diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index f2e75479cfc..b1aa64649a3 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -178,6 +178,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; import com.cloud.network.NetworkEnums.RouterPrivateIpStrategy; +import com.cloud.network.router.VirtualRouter; import com.cloud.resource.ServerResource; import com.cloud.resource.ServerResourceBase; import com.cloud.storage.Storage; @@ -203,7 +204,6 @@ import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.Script; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DiskProfile; -import com.cloud.vm.DomainRouter; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.State; import com.cloud.vm.VirtualMachine; @@ -869,7 +869,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } protected synchronized String startDomainRouter(StartRouterCommand cmd) { - DomainRouter router = cmd.getRouter(); + VirtualRouter router = cmd.getRouter(); List nics = null; try { nics = createRouterVMNetworks(cmd); @@ -2087,7 +2087,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv private Answer execute(StartRouterCommand cmd) { - final DomainRouter router = cmd.getRouter(); + final VirtualRouter router = cmd.getRouter(); String result = null; @@ -3649,7 +3649,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv private List createRouterVMNetworks(StartRouterCommand cmd) throws InternalErrorException { List nics = new ArrayList(); - DomainRouter router = cmd.getRouter(); + VirtualRouter router = cmd.getRouter(); String guestMac = router.getGuestMacAddress(); String privateMac = router.getPrivateMacAddress(); String pubMac = router.getPublicMacAddress(); diff --git a/api/.classpath b/api/.classpath index 1522af664ce..e52580d102b 100644 --- a/api/.classpath +++ b/api/.classpath @@ -3,5 +3,7 @@ + + diff --git a/api/src/com/cloud/alert/Alert.java b/api/src/com/cloud/alert/Alert.java new file mode 100644 index 00000000000..0c8f9bc9f36 --- /dev/null +++ b/api/src/com/cloud/alert/Alert.java @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.alert; + +import java.util.Date; + +/** + * @author ahuang + * + */ +public interface Alert { + long getId(); + short getType(); + String getSubject(); + Long getPodId(); + long getDataCenterId(); + int getSentCount(); + Date getCreatedDate(); + Date getLastSent(); + Date getResolved(); +} diff --git a/server/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java similarity index 100% rename from server/src/com/cloud/api/ApiConstants.java rename to api/src/com/cloud/api/ApiConstants.java diff --git a/server/src/com/cloud/api/BaseAsyncCmd.java b/api/src/com/cloud/api/BaseAsyncCmd.java similarity index 85% rename from server/src/com/cloud/api/BaseAsyncCmd.java rename to api/src/com/cloud/api/BaseAsyncCmd.java index 900537e5bb1..25a5d6698b4 100644 --- a/server/src/com/cloud/api/BaseAsyncCmd.java +++ b/api/src/com/cloud/api/BaseAsyncCmd.java @@ -18,8 +18,6 @@ package com.cloud.api; import com.cloud.api.response.AsyncJobResponse; -import com.cloud.async.AsyncJobManager; -import com.cloud.async.AsyncJobVO; /** * A base command for supporting asynchronous API calls. When an API command is received, the command will be @@ -28,8 +26,7 @@ import com.cloud.async.AsyncJobVO; * queryAsyncJobResult API command. */ public abstract class BaseAsyncCmd extends BaseCmd { - private AsyncJobManager _asyncJobMgr = null; - private AsyncJobVO _job = null; + private Object _job = null; @Parameter(name="starteventid", type=CommandType.LONG) private Long startEventId; @@ -64,23 +61,11 @@ public abstract class BaseAsyncCmd extends BaseCmd { return response; } - public AsyncJobManager getAsyncJobManager() { - return _asyncJobMgr; - } - - public void setAsyncJobManager(AsyncJobManager mgr) { - _asyncJobMgr = mgr; - } - public void synchronizeCommand(String syncObjType, long syncObjId) { - _asyncJobMgr.syncAsyncJobExecution(_job, syncObjType, syncObjId); + _responseGenerator.synchronizeCommand(_job, syncObjType, syncObjId); } - public AsyncJobVO getJob() { - return _job; - } - - public void setJob(AsyncJobVO job) { + public void setJob(Object job) { _job = job; } @@ -91,5 +76,4 @@ public abstract class BaseAsyncCmd extends BaseCmd { public void setStartEventId(Long startEventId) { this.startEventId = startEventId; } - } diff --git a/server/src/com/cloud/api/BaseAsyncCreateCmd.java b/api/src/com/cloud/api/BaseAsyncCreateCmd.java similarity index 81% rename from server/src/com/cloud/api/BaseAsyncCreateCmd.java rename to api/src/com/cloud/api/BaseAsyncCreateCmd.java index 279ae715786..4da990ba930 100644 --- a/server/src/com/cloud/api/BaseAsyncCreateCmd.java +++ b/api/src/com/cloud/api/BaseAsyncCreateCmd.java @@ -1,6 +1,5 @@ package com.cloud.api; -import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.CreateCmdResponse; public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd { @@ -22,6 +21,6 @@ public abstract class BaseAsyncCreateCmd extends BaseAsyncCmd { response.setJobId(jobId); response.setId(objectId); response.setResponseName(getName()); - return ApiResponseSerializer.toSerializedString(response, getResponseType()); + return _responseGenerator.toSerializedString(response, getResponseType()); } } diff --git a/server/src/com/cloud/api/BaseCmd.java b/api/src/com/cloud/api/BaseCmd.java similarity index 89% rename from server/src/com/cloud/api/BaseCmd.java rename to api/src/com/cloud/api/BaseCmd.java index aff3f398460..ae103291e6d 100755 --- a/server/src/com/cloud/api/BaseCmd.java +++ b/api/src/com/cloud/api/BaseCmd.java @@ -27,20 +27,20 @@ import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.agent.AgentManager; -import com.cloud.async.AsyncJobManager; import com.cloud.configuration.ConfigurationService; -import com.cloud.consoleproxy.ConsoleProxyManager; +import com.cloud.consoleproxy.ConsoleProxyService; +import com.cloud.dao.EntityManager; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.DomainRouterService; -import com.cloud.network.NetworkManager; -import com.cloud.network.security.NetworkGroupManager; -import com.cloud.server.ManagementServer; -import com.cloud.storage.StorageManager; -import com.cloud.storage.snapshot.SnapshotManager; -import com.cloud.template.TemplateManager; +import com.cloud.network.NetworkService; +import com.cloud.network.security.NetworkGroupService; +import com.cloud.resource.ResourceService; +import com.cloud.server.ManagementService; +import com.cloud.storage.StorageService; +import com.cloud.storage.snapshot.SnapshotService; +import com.cloud.template.TemplateService; import com.cloud.user.Account; import com.cloud.user.AccountService; import com.cloud.utils.Pair; @@ -89,33 +89,35 @@ public abstract class BaseCmd { public static ConfigurationService _configService; public static AccountService _accountService; public static UserVmService _userVmService; - public static ManagementServer _mgr; - public static AsyncJobManager _asyncMgr; - public static StorageManager _storageMgr; - public static AgentManager _agentMgr; - public static NetworkManager _networkMgr; - public static TemplateManager _templateMgr; - public static NetworkGroupManager _networkGroupMgr; - public static SnapshotManager _snapshotMgr; - public static ConsoleProxyManager _consoleProxyMgr; - public static DomainRouterService _routerMgr; + public static ManagementService _mgr; + public static StorageService _storageMgr; + public static ResourceService _resourceService; + public static NetworkService _networkService; + public static TemplateService _templateService; + public static NetworkGroupService _networkGroupMgr; + public static SnapshotService _snapshotMgr; + public static ConsoleProxyService _consoleProxyMgr; + public static DomainRouterService _routerService; + public static ResponseGenerator _responseGenerator; + public static EntityManager _entityMgr; - static void setComponents(){ - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); + static void setComponents(ResponseGenerator generator){ + ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); + _mgr = (ManagementService)ComponentLocator.getComponent(ManagementService.Name); _accountService = locator.getManager(AccountService.class); _configService = locator.getManager(ConfigurationService.class); _userVmService = locator.getManager(UserVmService.class); - _mgr = (ManagementServer)locator.getComponent("management-server"); - _asyncMgr = locator.getManager(AsyncJobManager.class); - _storageMgr = locator.getManager(StorageManager.class); - _agentMgr = locator.getManager(AgentManager.class); - _networkMgr = locator.getManager(NetworkManager.class); - _templateMgr = locator.getManager(TemplateManager.class); - _networkGroupMgr = locator.getManager(NetworkGroupManager.class); - _snapshotMgr = locator.getManager(SnapshotManager.class); - _consoleProxyMgr = locator.getManager(ConsoleProxyManager.class); - _routerMgr = locator.getManager(DomainRouterService.class); + _storageMgr = locator.getManager(StorageService.class); + _resourceService = locator.getManager(ResourceService.class); + _networkService = locator.getManager(NetworkService.class); + _templateService = locator.getManager(TemplateService.class); + _networkGroupMgr = locator.getManager(NetworkGroupService.class); + _snapshotMgr = locator.getManager(SnapshotService.class); + _consoleProxyMgr = locator.getManager(ConsoleProxyService.class); + _routerService = locator.getManager(DomainRouterService.class); + _entityMgr = locator.getManager(EntityManager.class); + _responseGenerator = generator; } public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException; @@ -334,14 +336,14 @@ public abstract class BaseCmd { StringBuffer sb = new StringBuffer(); if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { // JSON response - sb.append("{ \"" + getName() + "\" : { " + "\"@attributes\":{\"cloud-stack-version\":\""+ApiDBUtils.getVersion()+"\"},"); + sb.append("{ \"" + getName() + "\" : { " + "\"@attributes\":{\"cloud-stack-version\":\""+_mgr.getVersion()+"\"},"); sb.append("\"errorcode\" : \"" + apiException.getErrorCode() + "\", \"description\" : \"" + apiException.getDescription() + "\" } }"); } else { sb.append(""); sb.append("<" + getName() + ">"); sb.append("" + apiException.getErrorCode() + ""); sb.append("" + escapeXml(apiException.getDescription()) + ""); - sb.append(""); + sb.append(""); } return sb.toString(); } @@ -352,10 +354,10 @@ public abstract class BaseCmd { // set up the return value with the name of the response if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { - prefixSb.append("{ \"" + getName() + "\" : { \"@attributes\":{\"cloud-stack-version\":\""+ApiDBUtils.getVersion()+"\"},"); + prefixSb.append("{ \"" + getName() + "\" : { \"@attributes\":{\"cloud-stack-version\":\""+ _mgr.getVersion()+"\"},"); } else { prefixSb.append(""); - prefixSb.append("<" + getName() + " cloud-stack-version=\""+ApiDBUtils.getVersion()+ "\">"); + prefixSb.append("<" + getName() + " cloud-stack-version=\""+_mgr.getVersion()+ "\">"); } int i = 0; diff --git a/server/src/com/cloud/api/BaseListCmd.java b/api/src/com/cloud/api/BaseListCmd.java similarity index 100% rename from server/src/com/cloud/api/BaseListCmd.java rename to api/src/com/cloud/api/BaseListCmd.java diff --git a/server/src/com/cloud/api/Implementation.java b/api/src/com/cloud/api/Implementation.java similarity index 91% rename from server/src/com/cloud/api/Implementation.java rename to api/src/com/cloud/api/Implementation.java index 95e44c3adfd..ff28bc2cfe0 100644 --- a/server/src/com/cloud/api/Implementation.java +++ b/api/src/com/cloud/api/Implementation.java @@ -6,8 +6,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import com.cloud.server.ManagementServer; - @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface Implementation { diff --git a/server/src/com/cloud/api/Parameter.java b/api/src/com/cloud/api/Parameter.java similarity index 100% rename from server/src/com/cloud/api/Parameter.java rename to api/src/com/cloud/api/Parameter.java diff --git a/api/src/com/cloud/api/ResponseGenerator.java b/api/src/com/cloud/api/ResponseGenerator.java new file mode 100644 index 00000000000..44544080dbb --- /dev/null +++ b/api/src/com/cloud/api/ResponseGenerator.java @@ -0,0 +1,202 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.api; + +import java.text.DecimalFormat; +import java.util.List; + +import com.cloud.api.commands.QueryAsyncJobResultCmd; +import com.cloud.api.response.AccountResponse; +import com.cloud.api.response.AsyncJobResponse; +import com.cloud.api.response.CapacityResponse; +import com.cloud.api.response.ClusterResponse; +import com.cloud.api.response.ConfigurationResponse; +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.FirewallRuleResponse; +import com.cloud.api.response.HostResponse; +import com.cloud.api.response.IPAddressResponse; +import com.cloud.api.response.InstanceGroupResponse; +import com.cloud.api.response.IpForwardingRuleResponse; +import com.cloud.api.response.ListResponse; +import com.cloud.api.response.LoadBalancerResponse; +import com.cloud.api.response.NetworkGroupResponse; +import com.cloud.api.response.PodResponse; +import com.cloud.api.response.PreallocatedLunResponse; +import com.cloud.api.response.RemoteAccessVpnResponse; +import com.cloud.api.response.ResourceLimitResponse; +import com.cloud.api.response.ServiceOfferingResponse; +import com.cloud.api.response.SnapshotPolicyResponse; +import com.cloud.api.response.SnapshotResponse; +import com.cloud.api.response.StoragePoolResponse; +import com.cloud.api.response.SystemVmResponse; +import com.cloud.api.response.TemplatePermissionsResponse; +import com.cloud.api.response.TemplateResponse; +import com.cloud.api.response.UserResponse; +import com.cloud.api.response.UserVmResponse; +import com.cloud.api.response.VlanIpRangeResponse; +import com.cloud.api.response.VolumeResponse; +import com.cloud.api.response.VpnUsersResponse; +import com.cloud.api.response.ZoneResponse; +import com.cloud.async.AsyncJob; +import com.cloud.capacity.Capacity; +import com.cloud.configuration.Configuration; +import com.cloud.configuration.ResourceLimit; +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.host.Host; +import com.cloud.network.IpAddress; +import com.cloud.network.LoadBalancer; +import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.VpnUser; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.security.NetworkGroup; +import com.cloud.network.security.NetworkGroupRules; +import com.cloud.offering.DiskOffering; +import com.cloud.offering.ServiceOffering; +import com.cloud.org.Cluster; +import com.cloud.storage.Snapshot; +import com.cloud.storage.StoragePool; +import com.cloud.storage.Volume; +import com.cloud.storage.snapshot.SnapshotPolicy; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserAccount; +import com.cloud.uservm.UserVm; +import com.cloud.vm.InstanceGroup; +import com.cloud.vm.VirtualMachine; + +public interface ResponseGenerator { + UserResponse createUserResponse(UserAccount user); + + AccountResponse createAccountResponse(Account account); + + DomainResponse createDomainResponse(Domain domain); + + DiskOfferingResponse createDiskOfferingResponse(DiskOffering offering); + + ResourceLimitResponse createResourceLimitResponse(ResourceLimit limit); + + ServiceOfferingResponse createServiceOfferingResponse(ServiceOffering offering); + + ConfigurationResponse createConfigurationResponse(Configuration cfg); + + SnapshotResponse createSnapshotResponse(Snapshot snapshot); + + SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy); + + UserVmResponse createUserVmResponse(UserVm userVm); + + SystemVmResponse createSystemVmResponse(VirtualMachine systemVM); + + DomainRouterResponse createDomainRouterResponse(VirtualRouter router); + + HostResponse createHostResponse(Host host); + + VlanIpRangeResponse createVlanIpRangeResponse(Vlan vlan); + + IPAddressResponse createIPAddressResponse(IpAddress ipAddress); + + LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer); + + PodResponse createPodResponse(Pod pod); + + ZoneResponse createZoneResponse(DataCenter dataCenter); + + VolumeResponse createVolumeResponse(Volume volume); + + InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group); + + PreallocatedLunResponse createPreallocatedLunResponse(Object preallocatedLun); + + StoragePoolResponse createStoragePoolResponse(StoragePool pool); + + ClusterResponse createClusterResponse(Cluster cluster); + + FirewallRuleResponse createFirewallRuleResponse(FirewallRule fwRule); + + IpForwardingRuleResponse createIpForwardingRuleResponse(FirewallRule fwRule); + + UserVmResponse createUserVm2Response(UserVm userVm); + + DomainRouterResponse createDomainRouter2Response(VirtualRouter router); + + SystemVmResponse createSystemVm2Response(VirtualMachine systemVM); + + void synchronizeCommand(Object job, String syncObjType, long syncObjId); + + User findUserById(long userId); + + UserVm findUserVmById(long vmId); + + Volume findVolumeById(long volumeId); + + Account findAccountByNameDomain(String accountName, long domainId); + + VirtualMachineTemplate findTemplateById(long templateId); + + VpnUsersResponse createVpnUserResponse(VpnUser user); + + RemoteAccessVpnResponse createRemoteAccessVpnResponse(RemoteAccessVpn vpn); + + void createTemplateResponse(List responses, VirtualMachineTemplate template, boolean onlyReady, Long zoneId, boolean isAdmin, + Account account); + + ListResponse createTemplateResponse2(VirtualMachineTemplate template, Long zoneId); + + ListResponse createIsoResponses(VirtualMachineTemplate template, Long zoneId); + + ListResponse createNetworkGroupResponses(List networkGroups); + + NetworkGroupResponse createNetworkGroupResponse(NetworkGroup group); + + ExtractResponse createExtractResponse(long uploadId, long id, long zoneId, long accountId, String mode); + + TemplateResponse createTemplateResponse(VirtualMachineTemplate template, long destZoneId); + + TemplateResponse createIsoResponse3(VirtualMachineTemplate iso, long destZoneId); + + String toSerializedString(CreateCmdResponse response, String responseType); + + AsyncJobResponse createAsyncJobResponse(AsyncJob job); + + TemplateResponse createTemplateResponse(VirtualMachineTemplate template, Long snapshotId, long volumeId); + + EventResponse createEventResponse(Event event); + + ListResponse createIsoResponse(List isos, Long zoneId, boolean onlyReady, boolean isAdmin, + Account account); + + TemplateResponse createIsoResponse(VirtualMachineTemplate result); + + List createCapacityResponse(List result, DecimalFormat format); + + TemplatePermissionsResponse createTemplatePermissionsResponse(List accountNames, long id, boolean isAdmin); + + AsyncJobResponse queryJobResult(QueryAsyncJobResultCmd cmd); + +} diff --git a/server/src/com/cloud/api/ResponseObject.java b/api/src/com/cloud/api/ResponseObject.java similarity index 100% rename from server/src/com/cloud/api/ResponseObject.java rename to api/src/com/cloud/api/ResponseObject.java diff --git a/server/src/com/cloud/api/ServerApiException.java b/api/src/com/cloud/api/ServerApiException.java similarity index 100% rename from server/src/com/cloud/api/ServerApiException.java rename to api/src/com/cloud/api/ServerApiException.java diff --git a/server/src/com/cloud/api/commands/.gitignore b/api/src/com/cloud/api/commands/.gitignore similarity index 100% rename from server/src/com/cloud/api/commands/.gitignore rename to api/src/com/cloud/api/commands/.gitignore diff --git a/server/src/com/cloud/api/commands/AddHostCmd.java b/api/src/com/cloud/api/commands/AddHostCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/AddHostCmd.java rename to api/src/com/cloud/api/commands/AddHostCmd.java index 1d3b3952ca8..bfbd6904e8e 100644 --- a/server/src/com/cloud/api/commands/AddHostCmd.java +++ b/api/src/com/cloud/api/commands/AddHostCmd.java @@ -23,7 +23,6 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -31,7 +30,7 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.DiscoveryException; -import com.cloud.host.HostVO; +import com.cloud.host.Host; @Implementation(description="Adds a new host.", responseObject=HostResponse.class) public class AddHostCmd extends BaseCmd { @@ -109,12 +108,12 @@ public class AddHostCmd extends BaseCmd { @Override public void execute(){ try { - List result = _agentMgr.discoverHosts(this); + List result = _resourceService.discoverHosts(this); ListResponse response = new ListResponse(); List hostResponses = new ArrayList(); if (result != null) { - for (HostVO host : result) { - HostResponse hostResponse = ApiResponseHelper.createHostResponse(host); + for (Host host : result) { + HostResponse hostResponse = _responseGenerator.createHostResponse(host); hostResponses.add(hostResponse); } } else { diff --git a/server/src/com/cloud/api/commands/AddSecondaryStorageCmd.java b/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/AddSecondaryStorageCmd.java rename to api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java index 47715e3527a..1c71ce50efd 100644 --- a/server/src/com/cloud/api/commands/AddSecondaryStorageCmd.java +++ b/api/src/com/cloud/api/commands/AddSecondaryStorageCmd.java @@ -23,14 +23,13 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.HostResponse; import com.cloud.exception.DiscoveryException; -import com.cloud.host.HostVO; +import com.cloud.host.Host; @Implementation(description="Adds secondary storage.", responseObject=HostResponse.class) public class AddSecondaryStorageCmd extends BaseCmd { @@ -71,12 +70,12 @@ public class AddSecondaryStorageCmd extends BaseCmd { @Override public void execute(){ try { - List result = _agentMgr.discoverHosts(this); + List result = _resourceService.discoverHosts(this); HostResponse hostResponse = null; if (result != null && result.size() > 0) { - for (HostVO host : result) { + for (Host host : result) { // There should only be one secondary storage host per add - hostResponse = ApiResponseHelper.createHostResponse(host); + hostResponse = _responseGenerator.createHostResponse(host); hostResponse.setResponseName(getName()); hostResponse.setObjectName("secondarystorage"); this.setResponseObject(hostResponse); diff --git a/server/src/com/cloud/api/commands/AddVpnUserCmd.java b/api/src/com/cloud/api/commands/AddVpnUserCmd.java similarity index 89% rename from server/src/com/cloud/api/commands/AddVpnUserCmd.java rename to api/src/com/cloud/api/commands/AddVpnUserCmd.java index 55365ae0374..2d24473cefc 100644 --- a/server/src/com/cloud/api/commands/AddVpnUserCmd.java +++ b/api/src/com/cloud/api/commands/AddVpnUserCmd.java @@ -20,17 +20,16 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; 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 com.cloud.api.response.VpnUsersResponse; +import com.cloud.domain.Domain; import com.cloud.event.EventTypes; -import com.cloud.exception.AccountLimitException; import com.cloud.exception.ConcurrentOperationException; -import com.cloud.network.VpnUserVO; +import com.cloud.network.VpnUser; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -88,16 +87,17 @@ public class AddVpnUserCmd extends BaseAsyncCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - public String getName() { + @Override + public String getName() { return s_name; } @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } @@ -126,17 +126,17 @@ public class AddVpnUserCmd extends BaseAsyncCmd { @Override public void execute(){ try { - VpnUserVO vpnUser = _networkMgr.addVpnUser(this); + VpnUser vpnUser = _networkService.addVpnUser(this); if (vpnUser != null) { VpnUsersResponse vpnResponse = new VpnUsersResponse(); vpnResponse.setId(vpnUser.getId()); vpnResponse.setUserName(vpnUser.getUsername()); vpnResponse.setAccountName(vpnUser.getAccountName()); - Account accountTemp = ApiDBUtils.findAccountById(vpnUser.getAccountId()); + Account accountTemp = _entityMgr.findById(Account.class, vpnUser.getAccountId()); if (accountTemp != null) { vpnResponse.setDomainId(accountTemp.getDomainId()); - vpnResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + vpnResponse.setDomainName(_entityMgr.findById(Domain.class, accountTemp.getDomainId()).getName()); } vpnResponse.setResponseName(getName()); diff --git a/server/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java rename to api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java index 0521475396f..4bc5494b85c 100644 --- a/server/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/AssignToLoadBalancerRuleCmd.java @@ -22,7 +22,6 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -31,7 +30,7 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; import com.cloud.exception.NetworkRuleConflictException; -import com.cloud.network.LoadBalancerVO; +import com.cloud.network.LoadBalancer; import com.cloud.user.Account; @Implementation(description="Assigns virtual machine or a list of virtual machines to a load balancer rule.", responseObject=SuccessResponse.class) @@ -80,7 +79,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public long getAccountId() { - LoadBalancerVO lb = ApiDBUtils.findLoadBalancerById(getLoadBalancerId()); + LoadBalancer lb = _entityMgr.findById(LoadBalancer.class, getLoadBalancerId()); if (lb == null) { return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked } @@ -100,7 +99,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public void execute(){ try { - boolean result = _networkMgr.assignToLoadBalancer(this); + boolean result = _networkService.assignToLoadBalancer(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/AssociateIPAddrCmd.java b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/AssociateIPAddrCmd.java rename to api/src/com/cloud/api/commands/AssociateIPAddrCmd.java index 69669c213fc..1ee8bb73e71 100644 --- a/server/src/com/cloud/api/commands/AssociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -29,7 +28,7 @@ import com.cloud.api.response.IPAddressResponse; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.ResourceAllocationException; -import com.cloud.network.IPAddressVO; +import com.cloud.network.IpAddress; @Implementation(description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class) public class AssociateIPAddrCmd extends BaseCmd { @@ -72,6 +71,7 @@ public class AssociateIPAddrCmd extends BaseCmd { ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } @@ -83,9 +83,9 @@ public class AssociateIPAddrCmd extends BaseCmd { @Override public void execute(){ try { - IPAddressVO result = _networkMgr.associateIP(this); + IpAddress result = _networkService.associateIP(this); if (result != null) { - IPAddressResponse ipResponse = ApiResponseHelper.createIPAddressResponse(result); + IPAddressResponse ipResponse = _responseGenerator.createIPAddressResponse(result); ipResponse.setResponseName(getName()); this.setResponseObject(ipResponse); } else { diff --git a/server/src/com/cloud/api/commands/AttachIsoCmd.java b/api/src/com/cloud/api/commands/AttachIsoCmd.java similarity index 89% rename from server/src/com/cloud/api/commands/AttachIsoCmd.java rename to api/src/com/cloud/api/commands/AttachIsoCmd.java index fdfd7f2397c..919f027910c 100755 --- a/server/src/com/cloud/api/commands/AttachIsoCmd.java +++ b/api/src/com/cloud/api/commands/AttachIsoCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,7 +27,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.event.EventTypes; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -74,7 +72,7 @@ public class AttachIsoCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VMTemplateVO iso = ApiDBUtils.findTemplateById(getId()); + VirtualMachineTemplate iso = _responseGenerator.findTemplateById(getId()); if (iso == null) { return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked } @@ -93,11 +91,11 @@ public class AttachIsoCmd extends BaseAsyncCmd { @Override public void execute(){ - boolean result = _templateMgr.attachIso(this); + boolean result = _templateService.attachIso(this); if (result) { - UserVm userVm = ApiDBUtils.findUserVmById(virtualMachineId); + UserVm userVm = _responseGenerator.findUserVmById(virtualMachineId); if (userVm != null) { - UserVmResponse response = ApiResponseHelper.createUserVmResponse(userVm); + UserVmResponse response = _responseGenerator.createUserVmResponse(userVm); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/AttachVolumeCmd.java b/api/src/com/cloud/api/commands/AttachVolumeCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/AttachVolumeCmd.java rename to api/src/com/cloud/api/commands/AttachVolumeCmd.java index bd5de085343..51507aad251 100755 --- a/server/src/com/cloud/api/commands/AttachVolumeCmd.java +++ b/api/src/com/cloud/api/commands/AttachVolumeCmd.java @@ -21,8 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -31,7 +29,6 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.storage.Volume; -import com.cloud.storage.VolumeVO; import com.cloud.user.Account; @Implementation(description="Attaches a disk volume to a virtual machine.", responseObject=VolumeResponse.class) @@ -91,7 +88,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VolumeVO volume = ApiDBUtils.findVolumeById(getId()); + Volume volume = _responseGenerator.findVolumeById(getId()); if (volume == null) { return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked } @@ -112,7 +109,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd { public void execute(){ Volume result = _userVmService.attachVolumeToVM(this); if (result != null) { - VolumeResponse response = ApiResponseHelper.createVolumeResponse((VolumeVO)result); + VolumeResponse response = _responseGenerator.createVolumeResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/AuthorizeNetworkGroupIngressCmd.java b/api/src/com/cloud/api/commands/AuthorizeNetworkGroupIngressCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/AuthorizeNetworkGroupIngressCmd.java rename to api/src/com/cloud/api/commands/AuthorizeNetworkGroupIngressCmd.java index 12a35d84133..bb3793ea5a3 100644 --- a/server/src/com/cloud/api/commands/AuthorizeNetworkGroupIngressCmd.java +++ b/api/src/com/cloud/api/commands/AuthorizeNetworkGroupIngressCmd.java @@ -28,7 +28,6 @@ import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -37,7 +36,7 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.IngressRuleResponse; import com.cloud.api.response.ListResponse; import com.cloud.event.EventTypes; -import com.cloud.network.security.IngressRuleVO; +import com.cloud.network.security.IngressRule; import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.StringUtils; @@ -156,10 +155,10 @@ public class AuthorizeNetworkGroupIngressCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } @@ -209,11 +208,11 @@ public class AuthorizeNetworkGroupIngressCmd extends BaseAsyncCmd { @Override public void execute(){ - List ingressRules = _networkGroupMgr.authorizeNetworkGroupIngress(this); + List ingressRules = _networkGroupMgr.authorizeNetworkGroupIngress(this); ListResponse response = new ListResponse(); if ((ingressRules != null) && !ingressRules.isEmpty()) { List responses = new ArrayList(); - for (IngressRuleVO ingressRule : ingressRules) { + for (IngressRule ingressRule : ingressRules) { IngressRuleResponse ingressData = new IngressRuleResponse(); ingressData.setRuleId(ingressRule.getId()); diff --git a/server/src/com/cloud/api/commands/CancelMaintenanceCmd.java b/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/CancelMaintenanceCmd.java rename to api/src/com/cloud/api/commands/CancelMaintenanceCmd.java index d991c2dc817..76368a114c3 100644 --- a/server/src/com/cloud/api/commands/CancelMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/CancelMaintenanceCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,7 +28,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.event.EventTypes; -import com.cloud.host.HostVO; +import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -91,9 +90,9 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd { @Override public void execute(){ - HostVO result = _agentMgr.cancelMaintenance(this); + Host result = _resourceService.cancelMaintenance(this); if (result != null) { - HostResponse response = ApiResponseHelper.createHostResponse(result); + HostResponse response = _responseGenerator.createHostResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java b/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java rename to api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java index a2a27311a0d..4e409bcfc31 100644 --- a/server/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/CancelPrimaryStorageMaintenanceCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,7 +28,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.event.EventTypes; -import com.cloud.storage.StoragePoolVO; +import com.cloud.storage.StoragePool; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -71,7 +70,7 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (account != null) { return account.getId(); } @@ -91,9 +90,9 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { @Override public void execute(){ - StoragePoolVO result = _storageMgr.cancelPrimaryStorageForMaintenance(this); + StoragePool result = _storageMgr.cancelPrimaryStorageForMaintenance(this); if (result != null) { - StoragePoolResponse response = ApiResponseHelper.createStoragePoolResponse(result); + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/CopyIsoCmd.java b/api/src/com/cloud/api/commands/CopyIsoCmd.java new file mode 100644 index 00000000000..712a7a65083 --- /dev/null +++ b/api/src/com/cloud/api/commands/CopyIsoCmd.java @@ -0,0 +1,114 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +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 com.cloud.api.response.TemplateResponse; +import com.cloud.event.EventTypes; +import com.cloud.exception.StorageUnavailableException; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.user.Account; + +@Implementation(description="Copies an ISO file.", responseObject=TemplateResponse.class) +public class CopyIsoCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(CopyIsoCmd.class.getName()); + private static final String s_name = "copyisoresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name="destzoneid", type=CommandType.LONG, required=true, description="the ID of the destination zone to which the ISO file will be copied") + private Long destZoneId; + + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the ISO file") + private Long id; + + @Parameter(name="sourcezoneid", type=CommandType.LONG, required=true, description="the ID of the source zone from which the ISO file will be copied") + private Long sourceZoneId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getDestinationZoneId() { + return destZoneId; + } + + public Long getId() { + return id; + } + + public Long getSourceZoneId() { + return sourceZoneId; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getName() { + return s_name; + } + + public static String getStaticName() { + return s_name; + } + + @Override + public long getAccountId() { + VirtualMachineTemplate iso = _entityMgr.findById(VirtualMachineTemplate.class, getId()); + if (iso != null) { + return iso.getAccountId(); + } + + // bad id given, parent this command to SYSTEM so ERROR events are tracked + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public String getEventType() { + return EventTypes.EVENT_ISO_COPY; + } + + @Override + public String getEventDescription() { + return "copying ISO: " + getId() + " from zone: " + getSourceZoneId() + " to zone: " + getDestinationZoneId(); + } + + @Override + public void execute(){ + try { + VirtualMachineTemplate iso = _templateService.copyIso(this); + TemplateResponse isoResponse = _responseGenerator.createIsoResponse3(iso, destZoneId); + isoResponse.setResponseName(getName()); + this.setResponseObject(isoResponse); + } catch (StorageUnavailableException ex) { + throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + } + } +} diff --git a/api/src/com/cloud/api/commands/CopyTemplateCmd.java b/api/src/com/cloud/api/commands/CopyTemplateCmd.java new file mode 100644 index 00000000000..d66fafb2b3c --- /dev/null +++ b/api/src/com/cloud/api/commands/CopyTemplateCmd.java @@ -0,0 +1,117 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +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 com.cloud.api.response.TemplateResponse; +import com.cloud.event.EventTypes; +import com.cloud.exception.StorageUnavailableException; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.user.Account; + +@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()); + private static final String s_name = "copytemplateresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.DESTINATION_ZONE_ID, type=CommandType.LONG, required=true, description="ID of the zone the template is being copied to.") + private Long destZoneId; + + @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Template ID.") + private Long id; + + @Parameter(name=ApiConstants.SOURCE_ZONE_ID, type=CommandType.LONG, required=true, description="ID of the zone the template is currently hosted on.") + private Long sourceZoneId; + + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getDestinationZoneId() { + return destZoneId; + } + + public Long getId() { + return id; + } + + public Long getSourceZoneId() { + return sourceZoneId; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getName() { + return s_name; + } + + public static String getStaticName() { + return s_name; + } + + @Override + public long getAccountId() { + VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, getId()); + if (template != null) { + return template.getAccountId(); + } + + // bad id given, parent this command to SYSTEM so ERROR events are tracked + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public String getEventType() { + return EventTypes.EVENT_TEMPLATE_COPY; + } + + @Override + public String getEventDescription() { + return "copying template: " + getId() + " from zone: " + getSourceZoneId() + " to zone: " + getDestinationZoneId(); + } + + @Override + public void execute(){ + try { + VirtualMachineTemplate template = _templateService.copyTemplate(this); + TemplateResponse templateResponse = _responseGenerator.createTemplateResponse(template, destZoneId); + templateResponse.setResponseName(getName()); + + this.setResponseObject(templateResponse); + } catch (StorageUnavailableException ex) { + throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + } + } +} + diff --git a/server/src/com/cloud/api/commands/CreateCfgCmd.java b/api/src/com/cloud/api/commands/CreateCfgCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/CreateCfgCmd.java rename to api/src/com/cloud/api/commands/CreateCfgCmd.java index ad6beb3489e..b7d7afc774d 100644 --- a/server/src/com/cloud/api/commands/CreateCfgCmd.java +++ b/api/src/com/cloud/api/commands/CreateCfgCmd.java @@ -20,14 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.ConfigurationResponse; import com.cloud.configuration.Configuration; -import com.cloud.configuration.ConfigurationVO; @Implementation(description="Adds configuration value", responseObject=ConfigurationResponse.class) public class CreateCfgCmd extends BaseCmd { @@ -99,7 +97,7 @@ public class CreateCfgCmd extends BaseCmd { public void execute(){ Configuration cfg = _configService.addConfig(this); if (cfg != null) { - ConfigurationResponse response = ApiResponseHelper.createConfigurationResponse((ConfigurationVO)cfg); + ConfigurationResponse response = _responseGenerator.createConfigurationResponse(cfg); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateDiskOfferingCmd.java b/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/CreateDiskOfferingCmd.java rename to api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java index 56009608f9c..1fa54340879 100755 --- a/server/src/com/cloud/api/commands/CreateDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateDiskOfferingCmd.java @@ -20,14 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.DiskOfferingResponse; import com.cloud.offering.DiskOffering; -import com.cloud.storage.DiskOfferingVO; @Implementation(description="Creates a disk offering.", responseObject=DiskOfferingResponse.class) public class CreateDiskOfferingCmd extends BaseCmd { @@ -90,7 +88,7 @@ public class CreateDiskOfferingCmd extends BaseCmd { public void execute(){ DiskOffering offering = _configService.createDiskOffering(this); if (offering != null) { - DiskOfferingResponse response = ApiResponseHelper.createDiskOfferingResponse((DiskOfferingVO)offering); + DiskOfferingResponse response = _responseGenerator.createDiskOfferingResponse(offering); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateDomainCmd.java b/api/src/com/cloud/api/commands/CreateDomainCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/CreateDomainCmd.java rename to api/src/com/cloud/api/commands/CreateDomainCmd.java index 6c91530a885..3e28ad1d62e 100644 --- a/server/src/com/cloud/api/commands/CreateDomainCmd.java +++ b/api/src/com/cloud/api/commands/CreateDomainCmd.java @@ -20,13 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.DomainResponse; -import com.cloud.domain.DomainVO; +import com.cloud.domain.Domain; @Implementation(description="Creates a domain", responseObject=DomainResponse.class) public class CreateDomainCmd extends BaseCmd { @@ -69,9 +68,9 @@ public class CreateDomainCmd extends BaseCmd { @Override public void execute(){ - DomainVO domain = _mgr.createDomain(this); + Domain domain = _mgr.createDomain(this); if (domain != null) { - DomainResponse response = ApiResponseHelper.createDomainResponse(domain); + DomainResponse response = _responseGenerator.createDomainResponse(domain); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java rename to api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java index ec5809d5c1e..bbff4bf0343 100644 --- a/server/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCreateCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,7 +28,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.event.EventTypes; -import com.cloud.network.FirewallRuleVO; +import com.cloud.network.rules.FirewallRule; import com.cloud.user.Account; @Implementation(description="Creates an ip forwarding rule", responseObject=FirewallRuleResponse.class) @@ -73,9 +72,9 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd { @Override public void execute(){ - FirewallRuleVO result = _networkMgr.createIpForwardingRuleOnDomr(this.getId()); + FirewallRule result = _networkService.createIpForwardingRuleOnDomr(this.getId()); if (result != null) { - FirewallRuleResponse fwResponse = ApiResponseHelper.createFirewallRuleResponse(result); + FirewallRuleResponse fwResponse = _responseGenerator.createFirewallRuleResponse(result); fwResponse.setResponseName(getName()); this.setResponseObject(fwResponse); } else { @@ -86,7 +85,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd { @Override public void callCreate(){ - FirewallRuleVO rule = _networkMgr.createIpForwardingRuleInDb(ipAddress,virtualMachineId); + FirewallRule rule = _networkService.createIpForwardingRuleInDb(ipAddress,virtualMachineId); if (rule != null){ this.setId(rule.getId()); } else { diff --git a/server/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java rename to api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java index 7a7c1f235ac..61c585fb1f4 100644 --- a/server/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateLoadBalancerRuleCmd.java @@ -21,13 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.LoadBalancerResponse; -import com.cloud.network.LoadBalancerVO; +import com.cloud.network.LoadBalancer; @Implementation(description="Creates a load balancer rule", responseObject=LoadBalancerResponse.class) public class CreateLoadBalancerRuleCmd extends BaseCmd { @@ -91,15 +90,16 @@ public class CreateLoadBalancerRuleCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } @Override public void execute(){ - LoadBalancerVO result = _networkMgr.createLoadBalancerRule(this); + LoadBalancer result = _networkService.createLoadBalancerRule(this); if (result != null) { - LoadBalancerResponse response = ApiResponseHelper.createLoadBalancerResponse(result); + LoadBalancerResponse response = _responseGenerator.createLoadBalancerResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateNetworkGroupCmd.java b/api/src/com/cloud/api/commands/CreateNetworkGroupCmd.java similarity index 81% rename from server/src/com/cloud/api/commands/CreateNetworkGroupCmd.java rename to api/src/com/cloud/api/commands/CreateNetworkGroupCmd.java index b5a72f8b810..f6956f27517 100644 --- a/server/src/com/cloud/api/commands/CreateNetworkGroupCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkGroupCmd.java @@ -20,13 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; 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.NetworkGroupResponse; -import com.cloud.network.security.NetworkGroupVO; +import com.cloud.network.security.NetworkGroup; //TODO - add description to implementation @Implementation(responseObject=NetworkGroupResponse.class) @@ -77,24 +76,17 @@ public class CreateNetworkGroupCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } @Override public void execute(){ - NetworkGroupVO group = _networkGroupMgr.createNetworkGroup(this); + NetworkGroup group = _networkGroupMgr.createNetworkGroup(this); if (group != null) { - NetworkGroupResponse response = new NetworkGroupResponse(); - response.setAccountName(group.getAccountName()); - response.setDescription(group.getDescription()); - response.setDomainId(group.getDomainId()); - response.setDomainName(ApiDBUtils.findDomainById(group.getDomainId()).getName()); - response.setId(group.getId()); - response.setName(group.getName()); - + NetworkGroupResponse response = _responseGenerator.createNetworkGroupResponse(group); response.setResponseName(getName()); - response.setObjectName("securitygroup"); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create network group"); diff --git a/server/src/com/cloud/api/commands/CreatePodCmd.java b/api/src/com/cloud/api/commands/CreatePodCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/CreatePodCmd.java rename to api/src/com/cloud/api/commands/CreatePodCmd.java index dc9823a2356..4bdfe5b27ed 100644 --- a/server/src/com/cloud/api/commands/CreatePodCmd.java +++ b/api/src/com/cloud/api/commands/CreatePodCmd.java @@ -21,13 +21,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.PodResponse; -import com.cloud.dc.HostPodVO; import com.cloud.dc.Pod; @Implementation(description="Creates a new Pod.", responseObject=PodResponse.class) @@ -92,6 +90,7 @@ public class CreatePodCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } @@ -100,7 +99,7 @@ public class CreatePodCmd extends BaseCmd { public void execute(){ Pod result = _configService.createPod(this); if (result != null) { - PodResponse response = ApiResponseHelper.createPodResponse((HostPodVO)result); + PodResponse response = _responseGenerator.createPodResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java rename to api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java index 5d289738faf..aa58fd14a7b 100644 --- a/server/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreatePortForwardingRuleCmd.java @@ -21,14 +21,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.FirewallRuleResponse; import com.cloud.exception.NetworkRuleConflictException; -import com.cloud.network.FirewallRuleVO; +import com.cloud.network.rules.FirewallRule; @Implementation(description="Creates a port forwarding rule", responseObject=FirewallRuleResponse.class) public class CreatePortForwardingRuleCmd extends BaseCmd { @@ -93,9 +92,9 @@ public class CreatePortForwardingRuleCmd extends BaseCmd { @Override public void execute(){ try { - FirewallRuleVO result = _networkMgr.createPortForwardingRule(this); + FirewallRule result = _networkService.createPortForwardingRule(this); if (result != null) { - FirewallRuleResponse fwResponse = ApiResponseHelper.createFirewallRuleResponse(result); + FirewallRuleResponse fwResponse = _responseGenerator.createFirewallRuleResponse(result); fwResponse.setResponseName(getName()); this.setResponseObject(fwResponse); } else { diff --git a/server/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java b/api/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java rename to api/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java index 724882ce58c..ddc1944737f 100644 --- a/server/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java +++ b/api/src/com/cloud/api/commands/CreateRemoteAccessVpnCmd.java @@ -20,17 +20,17 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; 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 com.cloud.api.response.RemoteAccessVpnResponse; +import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.RemoteAccessVpnVO; +import com.cloud.network.RemoteAccessVpn; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -99,16 +99,17 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { - public String getName() { + @Override + public String getName() { return s_name; } @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } @@ -135,7 +136,7 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { @Override public void callCreate(){ try { - RemoteAccessVpnVO vpn = _networkMgr.createRemoteAccessVpn(this); + RemoteAccessVpn vpn = _networkService.createRemoteAccessVpn(this); if (vpn != null) { this.setId(vpn.getId()); } else { @@ -149,7 +150,7 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { @Override public void execute(){ try { - RemoteAccessVpnVO result = _networkMgr.startRemoteAccessVpn(this); + RemoteAccessVpn result = _networkService.startRemoteAccessVpn(this); if (result != null) { RemoteAccessVpnResponse response = new RemoteAccessVpnResponse(); response.setId(result.getId()); @@ -157,7 +158,7 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { response.setIpRange(result.getIpRange()); response.setAccountName(result.getAccountName()); response.setDomainId(result.getDomainId()); - response.setDomainName(ApiDBUtils.findDomainById(result.getDomainId()).getName()); + response.setDomainName(_entityMgr.findById(Domain.class, result.getDomainId()).getName()); response.setObjectName("remoteaccessvpn"); response.setResponseName(getName()); response.setPresharedKey(result.getIpsecPresharedKey()); diff --git a/server/src/com/cloud/api/commands/CreateServiceOfferingCmd.java b/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/CreateServiceOfferingCmd.java rename to api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java index 8f1bad68d65..0ab12647b60 100644 --- a/server/src/com/cloud/api/commands/CreateServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateServiceOfferingCmd.java @@ -21,14 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; -import com.cloud.service.ServiceOfferingVO; @Implementation(description="Creates a service offering.", responseObject=ServiceOfferingResponse.class) public class CreateServiceOfferingCmd extends BaseCmd { @@ -119,7 +117,7 @@ public class CreateServiceOfferingCmd extends BaseCmd { public void execute(){ ServiceOffering result = _configService.createServiceOffering(this); if (result != null) { - ServiceOfferingResponse response = ApiResponseHelper.createServiceOfferingResponse((ServiceOfferingVO)result); + ServiceOfferingResponse response = _responseGenerator.createServiceOfferingResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateSnapshotCmd.java b/api/src/com/cloud/api/commands/CreateSnapshotCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/CreateSnapshotCmd.java rename to api/src/com/cloud/api/commands/CreateSnapshotCmd.java index cedba87003d..53cc4ac549e 100644 --- a/server/src/com/cloud/api/commands/CreateSnapshotCmd.java +++ b/api/src/com/cloud/api/commands/CreateSnapshotCmd.java @@ -21,8 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -31,8 +29,8 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.SnapshotResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; -import com.cloud.storage.SnapshotVO; -import com.cloud.storage.VolumeVO; +import com.cloud.storage.Snapshot; +import com.cloud.storage.Volume; import com.cloud.user.Account; @Implementation(description="Creates an instant snapshot of a volume.", responseObject=SnapshotResponse.class) @@ -84,7 +82,7 @@ public class CreateSnapshotCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VolumeVO volume = ApiDBUtils.findVolumeById(getVolumeId()); + Volume volume = _entityMgr.findById(Volume.class, getVolumeId()); if (volume != null) { return volume.getAccountId(); } @@ -106,9 +104,9 @@ public class CreateSnapshotCmd extends BaseAsyncCmd { @Override public void execute(){ try { - SnapshotVO snapshot = _snapshotMgr.createSnapshot(this); + Snapshot snapshot = _snapshotMgr.createSnapshot(this); if (snapshot != null) { - SnapshotResponse response = ApiResponseHelper.createSnapshotResponse(snapshot); + SnapshotResponse response = _responseGenerator.createSnapshotResponse(snapshot); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateSnapshotInternalCmd.java b/api/src/com/cloud/api/commands/CreateSnapshotInternalCmd.java similarity index 86% rename from server/src/com/cloud/api/commands/CreateSnapshotInternalCmd.java rename to api/src/com/cloud/api/commands/CreateSnapshotInternalCmd.java index c8e4af88d3f..ff43ecd4966 100644 --- a/server/src/com/cloud/api/commands/CreateSnapshotInternalCmd.java +++ b/api/src/com/cloud/api/commands/CreateSnapshotInternalCmd.java @@ -20,18 +20,18 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; 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 com.cloud.api.response.SnapshotResponse; +import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; -import com.cloud.storage.Snapshot.SnapshotType; -import com.cloud.storage.SnapshotVO; -import com.cloud.storage.VolumeVO; +import com.cloud.storage.Snapshot; +import com.cloud.storage.Snapshot.Type; +import com.cloud.storage.Volume; import com.cloud.user.Account; @Implementation(description="Creates an instant snapshot of a volume.", responseObject=SnapshotResponse.class) @@ -76,7 +76,7 @@ public class CreateSnapshotInternalCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VolumeVO volume = ApiDBUtils.findVolumeById(getVolumeId()); + Volume volume = _entityMgr.findById(Volume.class, getVolumeId()); if (volume != null) { return volume.getAccountId(); } @@ -98,20 +98,20 @@ public class CreateSnapshotInternalCmd extends BaseAsyncCmd { @Override public void execute(){ try { - SnapshotVO snapshot = _snapshotMgr.createSnapshotInternal(this); + Snapshot snapshot = _snapshotMgr.createSnapshotInternal(this); if (snapshot != null) { SnapshotResponse response = new SnapshotResponse(); response.setId(snapshot.getId()); - Account account = ApiDBUtils.findAccountById(snapshot.getAccountId()); + Account account = _entityMgr.findById(Account.class, snapshot.getAccountId()); if (account != null) { response.setAccountName(account.getAccountName()); response.setDomainId(account.getDomainId()); - response.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); + response.setDomainName(_entityMgr.findById(Domain.class, account.getDomainId()).getName()); } - VolumeVO volume = ApiDBUtils.findVolumeById(snapshot.getVolumeId()); - String snapshotTypeStr = SnapshotType.values()[snapshot.getSnapshotType()].name(); + Volume volume = _entityMgr.findById(Volume.class, snapshot.getVolumeId()); + String snapshotTypeStr = Type.values()[snapshot.getSnapshotType()].name(); response.setSnapshotType(snapshotTypeStr); response.setVolumeId(snapshot.getVolumeId()); response.setVolumeName(volume.getName()); diff --git a/server/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java b/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java rename to api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java index 24a8246d40d..f353083fa43 100644 --- a/server/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java +++ b/api/src/com/cloud/api/commands/CreateSnapshotPolicyCmd.java @@ -21,13 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.SnapshotPolicyResponse; -import com.cloud.storage.SnapshotPolicyVO; +import com.cloud.storage.snapshot.SnapshotPolicy; @Implementation(description="Creates a snapshot policy for the account.", responseObject=SnapshotPolicyResponse.class) public class CreateSnapshotPolicyCmd extends BaseCmd { @@ -110,9 +109,9 @@ public class CreateSnapshotPolicyCmd extends BaseCmd { @Override public void execute(){ - SnapshotPolicyVO result = _snapshotMgr.createPolicy(this); + SnapshotPolicy result = _snapshotMgr.createPolicy(this); if (result != null) { - SnapshotPolicyResponse response = ApiResponseHelper.createSnapshotPolicyResponse(result); + SnapshotPolicyResponse response = _responseGenerator.createSnapshotPolicyResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateStoragePoolCmd.java b/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/CreateStoragePoolCmd.java rename to api/src/com/cloud/api/commands/CreateStoragePoolCmd.java index 2b5aadc0473..d84f971f5b8 100644 --- a/server/src/com/cloud/api/commands/CreateStoragePoolCmd.java +++ b/api/src/com/cloud/api/commands/CreateStoragePoolCmd.java @@ -24,7 +24,6 @@ import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -32,7 +31,7 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceInUseException; -import com.cloud.storage.StoragePoolVO; +import com.cloud.storage.StoragePool; @SuppressWarnings("rawtypes") @Implementation(description="Creates a storage pool.", responseObject=StoragePoolResponse.class) @@ -110,9 +109,9 @@ public class CreateStoragePoolCmd extends BaseCmd { @Override public void execute(){ try { - StoragePoolVO result = _storageMgr.createPool(this); + StoragePool result = _storageMgr.createPool(this); if (result != null) { - StoragePoolResponse response = ApiResponseHelper.createStoragePoolResponse(result); + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateTemplateCmd.java b/api/src/com/cloud/api/commands/CreateTemplateCmd.java similarity index 70% rename from server/src/com/cloud/api/commands/CreateTemplateCmd.java rename to api/src/com/cloud/api/commands/CreateTemplateCmd.java index 7352b9cacac..79e37d92b9f 100644 --- a/server/src/com/cloud/api/commands/CreateTemplateCmd.java +++ b/api/src/com/cloud/api/commands/CreateTemplateCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCreateCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,14 +28,10 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.api.response.TemplateResponse; -import com.cloud.dc.DataCenterVO; import com.cloud.event.EventTypes; -import com.cloud.storage.GuestOS; import com.cloud.storage.Snapshot; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.VolumeVO; +import com.cloud.storage.Volume; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @Implementation(responseObject=StoragePoolResponse.class, description="Creates a template of a virtual machine. " + @@ -142,12 +137,12 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { Long volumeId = getVolumeId(); Long snapshotId = getSnapshotId(); if (volumeId != null) { - VolumeVO volume = ApiDBUtils.findVolumeById(volumeId); + Volume volume = _entityMgr.findById(Volume.class, volumeId); if (volume != null) { return volume.getAccountId(); } } else { - Snapshot snapshot = ApiDBUtils.findSnapshotById(snapshotId); + Snapshot snapshot = _entityMgr.findById(Snapshot.class, snapshotId); if (snapshot != null) { return snapshot.getAccountId(); } @@ -169,7 +164,7 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { @Override public void callCreate(){ - VMTemplateVO template = _userVmService.createPrivateTemplateRecord(this); + VirtualMachineTemplate template = _userVmService.createPrivateTemplateRecord(this); if (template != null){ this.setId(template.getId()); } else { @@ -179,51 +174,9 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { @Override public void execute(){ - VMTemplateVO template = _userVmService.createPrivateTemplate(this); + VirtualMachineTemplate template = _userVmService.createPrivateTemplate(this); if (template != null) { - TemplateResponse response = new TemplateResponse(); - response.setId(template.getId()); - response.setName(template.getName()); - response.setDisplayText(template.getDisplayText()); - response.setPublic(template.isPublicTemplate()); - response.setPasswordEnabled(template.getEnablePassword()); - response.setCrossZones(template.isCrossZones()); - - VolumeVO volume = null; - if (snapshotId != null) { - Snapshot snapshot = ApiDBUtils.findSnapshotById(snapshotId); - volume = ApiDBUtils.findVolumeById(snapshot.getVolumeId()); - } else { - volume = ApiDBUtils.findVolumeById(volumeId); - } - - VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), volume.getDataCenterId()); - response.setCreated(templateHostRef.getCreated()); - response.setReady(templateHostRef != null && templateHostRef.getDownloadState() == Status.DOWNLOADED); - - GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); - if (os != null) { - response.setOsTypeId(os.getId()); - response.setOsTypeName(os.getDisplayName()); - } else { - response.setOsTypeId(-1L); - response.setOsTypeName(""); - } - - Account owner = ApiDBUtils.findAccountById(template.getAccountId()); - if (owner != null) { - response.setAccount(owner.getAccountName()); - response.setDomainId(owner.getDomainId()); - response.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); - } - - DataCenterVO zone = ApiDBUtils.findZoneById(volume.getDataCenterId()); - if (zone != null) { - response.setZoneId(zone.getId()); - response.setZoneName(zone.getName()); - } - - response.setObjectName("template"); + TemplateResponse response = _responseGenerator.createTemplateResponse(template, snapshotId, volumeId); response.setResponseName(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/CreateUserCmd.java b/api/src/com/cloud/api/commands/CreateUserCmd.java similarity index 97% rename from server/src/com/cloud/api/commands/CreateUserCmd.java rename to api/src/com/cloud/api/commands/CreateUserCmd.java index 7af4c645efe..c1a02440a81 100644 --- a/server/src/com/cloud/api/commands/CreateUserCmd.java +++ b/api/src/com/cloud/api/commands/CreateUserCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -126,7 +125,7 @@ public class CreateUserCmd extends BaseCmd { public void execute(){ UserAccount user = _accountService.createUser(this); if (user != null) { - UserResponse response = ApiResponseHelper.createUserResponse(user); + UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateVMGroupCmd.java b/api/src/com/cloud/api/commands/CreateVMGroupCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/CreateVMGroupCmd.java rename to api/src/com/cloud/api/commands/CreateVMGroupCmd.java index b110f38ad5c..02361703517 100644 --- a/server/src/com/cloud/api/commands/CreateVMGroupCmd.java +++ b/api/src/com/cloud/api/commands/CreateVMGroupCmd.java @@ -20,13 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.InstanceGroupResponse; -import com.cloud.vm.InstanceGroupVO; +import com.cloud.vm.InstanceGroup; @Implementation(description="Creates a vm group", responseObject=InstanceGroupResponse.class) public class CreateVMGroupCmd extends BaseCmd{ @@ -74,9 +73,9 @@ public class CreateVMGroupCmd extends BaseCmd{ @Override public void execute(){ - InstanceGroupVO result = _userVmService.createVmGroup(this); + InstanceGroup result = _userVmService.createVmGroup(this); if (result != null) { - InstanceGroupResponse response = ApiResponseHelper.createInstanceGroupResponse(result); + InstanceGroupResponse response = _responseGenerator.createInstanceGroupResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java rename to api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java index 904e5edbe72..420c2b215e3 100644 --- a/server/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java +++ b/api/src/com/cloud/api/commands/CreateVlanIpRangeCmd.java @@ -21,14 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.VlanIpRangeResponse; import com.cloud.dc.Vlan; -import com.cloud.dc.VlanVO; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -131,7 +129,7 @@ public class CreateVlanIpRangeCmd extends BaseCmd { try { Vlan result = _configService.createVlanAndPublicIpRange(this); if (result != null) { - VlanIpRangeResponse response = ApiResponseHelper.createVlanIpRangeResponse((VlanVO)result); + VlanIpRangeResponse response = _responseGenerator.createVlanIpRangeResponse(result); response.setResponseName(getName()); this.setResponseObject(response); }else { diff --git a/server/src/com/cloud/api/commands/CreateVolumeCmd.java b/api/src/com/cloud/api/commands/CreateVolumeCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/CreateVolumeCmd.java rename to api/src/com/cloud/api/commands/CreateVolumeCmd.java index 94191b772a7..4c72088f734 100644 --- a/server/src/com/cloud/api/commands/CreateVolumeCmd.java +++ b/api/src/com/cloud/api/commands/CreateVolumeCmd.java @@ -21,8 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCreateCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -32,7 +30,6 @@ import com.cloud.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ResourceAllocationException; import com.cloud.storage.Volume; -import com.cloud.storage.VolumeVO; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -114,10 +111,10 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } @@ -159,7 +156,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { public void execute(){ Volume volume = _storageMgr.createVolume(this); if (volume != null) { - VolumeResponse response = ApiResponseHelper.createVolumeResponse((VolumeVO)volume); + 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 response.setResponseName(getName()); diff --git a/server/src/com/cloud/api/commands/CreateZoneCmd.java b/api/src/com/cloud/api/commands/CreateZoneCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/CreateZoneCmd.java rename to api/src/com/cloud/api/commands/CreateZoneCmd.java index 51b5eeef057..c651d47948a 100644 --- a/server/src/com/cloud/api/commands/CreateZoneCmd.java +++ b/api/src/com/cloud/api/commands/CreateZoneCmd.java @@ -21,14 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.ZoneResponse; import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenterVO; @Implementation(description="Creates a Zone.", responseObject=ZoneResponse.class) public class CreateZoneCmd extends BaseCmd { @@ -126,7 +124,7 @@ public class CreateZoneCmd extends BaseCmd { public void execute(){ DataCenter result = _configService.createZone(this); if (result != null){ - ZoneResponse response = ApiResponseHelper.createZoneResponse((DataCenterVO)result); + ZoneResponse response = _responseGenerator.createZoneResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java rename to api/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java diff --git a/server/src/com/cloud/api/commands/DeleteDomainCmd.java b/api/src/com/cloud/api/commands/DeleteDomainCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/DeleteDomainCmd.java rename to api/src/com/cloud/api/commands/DeleteDomainCmd.java index bb685030ab3..93a5ef82d97 100644 --- a/server/src/com/cloud/api/commands/DeleteDomainCmd.java +++ b/api/src/com/cloud/api/commands/DeleteDomainCmd.java @@ -20,14 +20,13 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; 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 com.cloud.api.response.SuccessResponse; -import com.cloud.domain.DomainVO; +import com.cloud.domain.Domain; import com.cloud.event.EventTypes; import com.cloud.user.Account; @@ -70,7 +69,7 @@ public class DeleteDomainCmd extends BaseAsyncCmd { @Override public long getAccountId() { - DomainVO domain = ApiDBUtils.findDomainById(getId()); + Domain domain = _entityMgr.findById(Domain.class, getId()); if (domain != null) { return domain.getAccountId(); } diff --git a/server/src/com/cloud/api/commands/DeleteHostCmd.java b/api/src/com/cloud/api/commands/DeleteHostCmd.java similarity index 97% rename from server/src/com/cloud/api/commands/DeleteHostCmd.java rename to api/src/com/cloud/api/commands/DeleteHostCmd.java index f7ef3228c94..2cbb27706a0 100644 --- a/server/src/com/cloud/api/commands/DeleteHostCmd.java +++ b/api/src/com/cloud/api/commands/DeleteHostCmd.java @@ -62,7 +62,7 @@ public class DeleteHostCmd extends BaseCmd { @Override public void execute(){ - boolean result = _agentMgr.deleteHost(this); + boolean result = _resourceService.deleteHost(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java b/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java similarity index 98% rename from server/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java rename to api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java index 043e1c45865..916c78151ab 100644 --- a/server/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteIpForwardingRuleCmd.java @@ -63,7 +63,7 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { @Override public void execute(){ boolean result = false; - result = _networkMgr.deleteIpForwardingRule(id); + result = _networkService.deleteIpForwardingRule(id); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeleteIsoCmd.java b/api/src/com/cloud/api/commands/DeleteIsoCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/DeleteIsoCmd.java rename to api/src/com/cloud/api/commands/DeleteIsoCmd.java index ff07518da83..c90bd942ae5 100644 --- a/server/src/com/cloud/api/commands/DeleteIsoCmd.java +++ b/api/src/com/cloud/api/commands/DeleteIsoCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -28,7 +27,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @Implementation(description="Deletes an ISO file.", responseObject=SuccessResponse.class) @@ -74,7 +73,7 @@ public class DeleteIsoCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VMTemplateVO iso = ApiDBUtils.findTemplateById(getId()); + VirtualMachineTemplate iso = _entityMgr.findById(VirtualMachineTemplate.class, getId()); if (iso != null) { return iso.getAccountId(); } @@ -94,7 +93,7 @@ public class DeleteIsoCmd extends BaseAsyncCmd { @Override public void execute(){ - boolean result = _templateMgr.deleteIso(this); + boolean result = _templateService.deleteIso(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java rename to api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java index 3346a579088..9bb6255d167 100644 --- a/server/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeleteLoadBalancerRuleCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -28,7 +27,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; -import com.cloud.network.LoadBalancerVO; +import com.cloud.network.LoadBalancer; import com.cloud.user.Account; @Implementation(description="Deletes a load balancer rule.", responseObject=SuccessResponse.class) @@ -62,7 +61,7 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public long getAccountId() { - LoadBalancerVO lb = ApiDBUtils.findLoadBalancerById(getId()); + LoadBalancer lb = _entityMgr.findById(LoadBalancer.class, getId()); if (lb != null) { return lb.getAccountId(); } @@ -82,7 +81,7 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public void execute(){ - boolean result = _networkMgr.deleteLoadBalancerRule(this); + boolean result = _networkService.deleteLoadBalancerRule(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeleteNetworkGroupCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkGroupCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteNetworkGroupCmd.java rename to api/src/com/cloud/api/commands/DeleteNetworkGroupCmd.java diff --git a/server/src/com/cloud/api/commands/DeletePodCmd.java b/api/src/com/cloud/api/commands/DeletePodCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeletePodCmd.java rename to api/src/com/cloud/api/commands/DeletePodCmd.java diff --git a/server/src/com/cloud/api/commands/DeletePoolCmd.java b/api/src/com/cloud/api/commands/DeletePoolCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeletePoolCmd.java rename to api/src/com/cloud/api/commands/DeletePoolCmd.java diff --git a/server/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java rename to api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java index 8f8df726511..230902236b6 100644 --- a/server/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/DeletePortForwardingRuleCmd.java @@ -58,7 +58,7 @@ public class DeletePortForwardingRuleCmd extends BaseCmd { @Override public void execute(){ - boolean result = _networkMgr.deletePortForwardingRule(id,false); + boolean result = _networkService.deletePortForwardingRule(id,false); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java b/api/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java rename to api/src/com/cloud/api/commands/DeletePreallocatedLunCmd.java diff --git a/server/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java b/api/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java rename to api/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java index 20df5fad026..c57a8010855 100644 --- a/server/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java +++ b/api/src/com/cloud/api/commands/DeleteRemoteAccessVpnCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -74,16 +73,17 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - public String getName() { + @Override + public String getName() { return s_name; } @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } @@ -110,7 +110,7 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd { @Override public void execute(){ try { - boolean result = _networkMgr.destroyRemoteAccessVpn(this); + boolean result = _networkService.destroyRemoteAccessVpn(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java b/api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java rename to api/src/com/cloud/api/commands/DeleteServiceOfferingCmd.java diff --git a/server/src/com/cloud/api/commands/DeleteSnapshotCmd.java b/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/DeleteSnapshotCmd.java rename to api/src/com/cloud/api/commands/DeleteSnapshotCmd.java index 6229911fd0a..bdec3f6e881 100644 --- a/server/src/com/cloud/api/commands/DeleteSnapshotCmd.java +++ b/api/src/com/cloud/api/commands/DeleteSnapshotCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -64,7 +63,7 @@ public class DeleteSnapshotCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Snapshot snapshot = ApiDBUtils.findSnapshotById(getId()); + Snapshot snapshot = _entityMgr.findById(Snapshot.class, getId()); if (snapshot != null) { return snapshot.getAccountId(); } diff --git a/server/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java b/api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java rename to api/src/com/cloud/api/commands/DeleteSnapshotPoliciesCmd.java diff --git a/server/src/com/cloud/api/commands/DeleteTemplateCmd.java b/api/src/com/cloud/api/commands/DeleteTemplateCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/DeleteTemplateCmd.java rename to api/src/com/cloud/api/commands/DeleteTemplateCmd.java index f0968f4c727..ff90c4633c8 100644 --- a/server/src/com/cloud/api/commands/DeleteTemplateCmd.java +++ b/api/src/com/cloud/api/commands/DeleteTemplateCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,7 +28,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @Implementation(responseObject=SuccessResponse.class, description="Deletes a template from the system. All virtual machines using the deleted template will not be affected.") @@ -76,7 +75,7 @@ public class DeleteTemplateCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VMTemplateVO template = ApiDBUtils.findTemplateById(getId()); + VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, getId()); if (template != null) { return template.getAccountId(); } @@ -96,7 +95,7 @@ public class DeleteTemplateCmd extends BaseAsyncCmd { @Override public void execute(){ - boolean result = _templateMgr.deleteTemplate(this); + boolean result = _templateService.deleteTemplate(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeleteUserCmd.java b/api/src/com/cloud/api/commands/DeleteUserCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/DeleteUserCmd.java rename to api/src/com/cloud/api/commands/DeleteUserCmd.java index 35cf3a74329..31f43c9cb72 100644 --- a/server/src/com/cloud/api/commands/DeleteUserCmd.java +++ b/api/src/com/cloud/api/commands/DeleteUserCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -70,7 +69,7 @@ public class DeleteUserCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (account != null) { return account.getId(); } @@ -85,7 +84,7 @@ public class DeleteUserCmd extends BaseAsyncCmd { @Override public String getEventDescription() { - User user = ApiDBUtils.findUserById(getId()); + User user = _responseGenerator.findUserById(getId()); return (user != null ? ("User " + user.getUsername() + " (id: " + user.getId() + ") and accountId = " + user.getAccountId()) : "user delete, but this user does not exist in the system"); } diff --git a/server/src/com/cloud/api/commands/DeleteVMGroupCmd.java b/api/src/com/cloud/api/commands/DeleteVMGroupCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteVMGroupCmd.java rename to api/src/com/cloud/api/commands/DeleteVMGroupCmd.java diff --git a/server/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java b/api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java rename to api/src/com/cloud/api/commands/DeleteVlanIpRangeCmd.java diff --git a/server/src/com/cloud/api/commands/DeleteVolumeCmd.java b/api/src/com/cloud/api/commands/DeleteVolumeCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteVolumeCmd.java rename to api/src/com/cloud/api/commands/DeleteVolumeCmd.java diff --git a/server/src/com/cloud/api/commands/DeleteZoneCmd.java b/api/src/com/cloud/api/commands/DeleteZoneCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DeleteZoneCmd.java rename to api/src/com/cloud/api/commands/DeleteZoneCmd.java diff --git a/server/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/com/cloud/api/commands/DeployVMCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/DeployVMCmd.java rename to api/src/com/cloud/api/commands/DeployVMCmd.java index bfe841ea09a..410227ebed8 100644 --- a/server/src/com/cloud/api/commands/DeployVMCmd.java +++ b/api/src/com/cloud/api/commands/DeployVMCmd.java @@ -23,8 +23,6 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -35,7 +33,7 @@ import com.cloud.event.EventTypes; import com.cloud.exception.InsufficientStorageCapacityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.StorageUnavailableException; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; @@ -169,7 +167,7 @@ public class DeployVMCmd extends BaseAsyncCmd { Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } @@ -198,14 +196,14 @@ public class DeployVMCmd extends BaseAsyncCmd { try { String password = null; if (templateId != null ) { - VMTemplateVO template = ApiDBUtils.findTemplateById(templateId); + VirtualMachineTemplate template = _responseGenerator.findTemplateById(templateId); if (template.getEnablePassword()) { password = _mgr.generateRandomPassword(); } } UserVm result = _mgr.deployVirtualMachine(this, password); if (result != null){ - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setPassword(password); response.setResponseName(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeployVm2Cmd.java b/api/src/com/cloud/api/commands/DeployVm2Cmd.java similarity index 97% rename from server/src/com/cloud/api/commands/DeployVm2Cmd.java rename to api/src/com/cloud/api/commands/DeployVm2Cmd.java index 2fa417a8a84..91f3de0c93c 100644 --- a/server/src/com/cloud/api/commands/DeployVm2Cmd.java +++ b/api/src/com/cloud/api/commands/DeployVm2Cmd.java @@ -23,8 +23,6 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCreateCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -159,7 +157,7 @@ public class DeployVm2Cmd extends BaseAsyncCreateCmd { try { result = _userVmService.startVirtualMachine(this); if (result != null) { - UserVmResponse response = ApiResponseHelper.createUserVm2Response(result); + UserVmResponse response = _responseGenerator.createUserVm2Response(result); response.setPassword(password); response.setResponseName(getName()); this.setResponseObject(response); @@ -208,7 +206,7 @@ public class DeployVm2Cmd extends BaseAsyncCreateCmd { Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } diff --git a/server/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java rename to api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java diff --git a/server/src/com/cloud/api/commands/DestroyVMCmd.java b/api/src/com/cloud/api/commands/DestroyVMCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/DestroyVMCmd.java rename to api/src/com/cloud/api/commands/DestroyVMCmd.java index 2d842235349..6641ab04bed 100644 --- a/server/src/com/cloud/api/commands/DestroyVMCmd.java +++ b/api/src/com/cloud/api/commands/DestroyVMCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -66,7 +64,7 @@ public class DestroyVMCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getId()); + UserVm vm = _responseGenerator.findUserVmById(getId()); if (vm != null) { return vm.getAccountId(); } @@ -88,7 +86,7 @@ public class DestroyVMCmd extends BaseAsyncCmd { public void execute() throws ResourceUnavailableException, ConcurrentOperationException{ UserVm result = _userVmService.destroyVm(this); if (result != null) { - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setResponseName("virtualmachine"); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/DetachIsoCmd.java b/api/src/com/cloud/api/commands/DetachIsoCmd.java similarity index 89% rename from server/src/com/cloud/api/commands/DetachIsoCmd.java rename to api/src/com/cloud/api/commands/DetachIsoCmd.java index 55cc03c152c..c72a8a10ff7 100755 --- a/server/src/com/cloud/api/commands/DetachIsoCmd.java +++ b/api/src/com/cloud/api/commands/DetachIsoCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -64,7 +62,7 @@ public class DetachIsoCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getVirtualMachineId()); + UserVm vm = _entityMgr.findById(UserVm.class, getVirtualMachineId()); if (vm != null) { return vm.getAccountId(); } @@ -84,10 +82,10 @@ public class DetachIsoCmd extends BaseAsyncCmd { @Override public void execute(){ - boolean result = _templateMgr.detachIso(this); + boolean result = _templateService.detachIso(this); if (result) { - UserVm userVm = ApiDBUtils.findUserVmById(virtualMachineId); - UserVmResponse response = ApiResponseHelper.createUserVmResponse(userVm); + UserVm userVm = _entityMgr.findById(UserVm.class, virtualMachineId); + UserVmResponse response = _responseGenerator.createUserVmResponse(userVm); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/DetachVolumeCmd.java b/api/src/com/cloud/api/commands/DetachVolumeCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/DetachVolumeCmd.java rename to api/src/com/cloud/api/commands/DetachVolumeCmd.java index deb7239c67d..66ebd6988cb 100755 --- a/server/src/com/cloud/api/commands/DetachVolumeCmd.java +++ b/api/src/com/cloud/api/commands/DetachVolumeCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -30,7 +28,6 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.VolumeResponse; import com.cloud.event.EventTypes; import com.cloud.storage.Volume; -import com.cloud.storage.VolumeVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -85,12 +82,12 @@ public class DetachVolumeCmd extends BaseAsyncCmd { public long getAccountId() { Long volumeId = getId(); if (volumeId != null) { - VolumeVO volume = ApiDBUtils.findVolumeById(volumeId); + Volume volume = _responseGenerator.findVolumeById(volumeId); if (volume != null) { return volume.getAccountId(); } } else if (getVirtualMachineId() != null) { - UserVm vm = ApiDBUtils.findUserVmById(getVirtualMachineId()); + UserVm vm = _responseGenerator.findUserVmById(getVirtualMachineId()); if (vm != null) { return vm.getAccountId(); } @@ -122,7 +119,7 @@ public class DetachVolumeCmd extends BaseAsyncCmd { public void execute(){ Volume result = _userVmService.detachVolumeFromVM(this); if (result != null){ - VolumeResponse response = ApiResponseHelper.createVolumeResponse((VolumeVO)result); + VolumeResponse response = _responseGenerator.createVolumeResponse(result); response.setResponseName("volume"); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/DisableAccountCmd.java b/api/src/com/cloud/api/commands/DisableAccountCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/DisableAccountCmd.java rename to api/src/com/cloud/api/commands/DisableAccountCmd.java index 0e9f266d55d..2c2d669774b 100644 --- a/server/src/com/cloud/api/commands/DisableAccountCmd.java +++ b/api/src/com/cloud/api/commands/DisableAccountCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -74,7 +73,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (account != null) { return account.getId(); } @@ -91,7 +90,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { public void execute(){ Account result = _accountService.disableAccount(this); if (result != null){ - AccountResponse response = ApiResponseHelper.createAccountResponse(result); + AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/DisableUserCmd.java b/api/src/com/cloud/api/commands/DisableUserCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/DisableUserCmd.java rename to api/src/com/cloud/api/commands/DisableUserCmd.java index 999396be353..5139250af69 100644 --- a/server/src/com/cloud/api/commands/DisableUserCmd.java +++ b/api/src/com/cloud/api/commands/DisableUserCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -68,7 +67,7 @@ public class DisableUserCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (account != null) { return account.getId(); } @@ -86,7 +85,7 @@ public class DisableUserCmd extends BaseAsyncCmd { public void execute(){ UserAccount user = _accountService.disableUser(this); if (user != null){ - UserResponse response = ApiResponseHelper.createUserResponse(user); + UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/DisassociateIPAddrCmd.java b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/DisassociateIPAddrCmd.java rename to api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java index d6919fe63ef..b3c69c140d2 100644 --- a/server/src/com/cloud/api/commands/DisassociateIPAddrCmd.java +++ b/api/src/com/cloud/api/commands/DisassociateIPAddrCmd.java @@ -58,7 +58,7 @@ public class DisassociateIPAddrCmd extends BaseCmd { @Override public void execute(){ - boolean result = _networkMgr.disassociateIpAddress(this); + boolean result = _networkService.disassociateIpAddress(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/EnableAccountCmd.java b/api/src/com/cloud/api/commands/EnableAccountCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/EnableAccountCmd.java rename to api/src/com/cloud/api/commands/EnableAccountCmd.java index a79d206336b..8aff8327ef2 100644 --- a/server/src/com/cloud/api/commands/EnableAccountCmd.java +++ b/api/src/com/cloud/api/commands/EnableAccountCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -68,7 +67,7 @@ public class EnableAccountCmd extends BaseCmd { public void execute(){ Account result = _accountService.enableAccount(this); if (result != null){ - AccountResponse response = ApiResponseHelper.createAccountResponse(result); + AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/EnableUserCmd.java b/api/src/com/cloud/api/commands/EnableUserCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/EnableUserCmd.java rename to api/src/com/cloud/api/commands/EnableUserCmd.java index 67fb94cc19c..d04fb9f8d68 100644 --- a/server/src/com/cloud/api/commands/EnableUserCmd.java +++ b/api/src/com/cloud/api/commands/EnableUserCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -63,7 +62,7 @@ public class EnableUserCmd extends BaseCmd { public void execute(){ UserAccount user = _accountService.enableUser(this); if (user != null){ - UserResponse response = ApiResponseHelper.createUserResponse(user); + UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/ExtractIsoCmd.java b/api/src/com/cloud/api/commands/ExtractIsoCmd.java similarity index 78% rename from server/src/com/cloud/api/commands/ExtractIsoCmd.java rename to api/src/com/cloud/api/commands/ExtractIsoCmd.java index d355432a7fe..aaafd7d3ac7 100755 --- a/server/src/com/cloud/api/commands/ExtractIsoCmd.java +++ b/api/src/com/cloud/api/commands/ExtractIsoCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,8 +28,7 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.ExtractResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InternalErrorException; -import com.cloud.storage.UploadVO; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @Implementation(description="Extracts an ISO", responseObject=ExtractResponse.class) @@ -90,7 +88,7 @@ public class ExtractIsoCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VMTemplateVO iso = ApiDBUtils.findTemplateById(getId()); + VirtualMachineTemplate iso = _entityMgr.findById(VirtualMachineTemplate.class, getId()); if (iso != null) { return iso.getAccountId(); } @@ -111,21 +109,9 @@ public class ExtractIsoCmd extends BaseAsyncCmd { @Override public void execute(){ try { - Long uploadId = _templateMgr.extract(this); + Long uploadId = _templateService.extract(this); if (uploadId != null){ - UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId); - ExtractResponse response = new ExtractResponse(); - response.setId(id); - response.setName(ApiDBUtils.findTemplateById(id).getName()); - response.setZoneId(zoneId); - response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName()); - response.setMode(mode); - response.setUploadId(uploadId); - response.setState(uploadInfo.getUploadState().toString()); - response.setAccountId(getAccountId()); - //FIX ME - Need to set the url once the gson jar is upgraded since it is throwing an error right now due to a bug. - //response.setUrl(uploadInfo.getUploadUrl()); - response.setUrl(uploadInfo.getUploadUrl().replaceAll("/", "%2F")); + ExtractResponse response = _responseGenerator.createExtractResponse(uploadId, id, zoneId, getAccountId(), mode); response.setResponseName(getName()); response.setObjectName("iso"); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/ExtractTemplateCmd.java b/api/src/com/cloud/api/commands/ExtractTemplateCmd.java similarity index 77% rename from server/src/com/cloud/api/commands/ExtractTemplateCmd.java rename to api/src/com/cloud/api/commands/ExtractTemplateCmd.java index 32388698c06..e103b81c4cc 100755 --- a/server/src/com/cloud/api/commands/ExtractTemplateCmd.java +++ b/api/src/com/cloud/api/commands/ExtractTemplateCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,8 +28,7 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.ExtractResponse; import com.cloud.event.EventTypes; import com.cloud.exception.InternalErrorException; -import com.cloud.storage.UploadVO; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; @Implementation(description="Extracts a template", responseObject=ExtractResponse.class) @@ -90,7 +88,7 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VMTemplateVO template = ApiDBUtils.findTemplateById(getId()); + VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, getId()); if (template != null) { return template.getAccountId(); } @@ -112,23 +110,10 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { @Override public void execute(){ try { - Long uploadId = _templateMgr.extract(this); + Long uploadId = _templateService.extract(this); if (uploadId != null){ - UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId); - ExtractResponse response = new ExtractResponse(); + ExtractResponse response = _responseGenerator.createExtractResponse(uploadId, id, zoneId, getAccountId(), mode); response.setResponseName(getName()); - response.setObjectName("template"); - response.setId(id); - response.setName(ApiDBUtils.findTemplateById(id).getName()); - response.setZoneId(zoneId); - response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName()); - response.setMode(mode); - response.setUploadId(uploadId); - response.setState(uploadInfo.getUploadState().toString()); - response.setAccountId(getAccountId()); - //FIX ME - Need to set the url once the gson jar is upgraded since it is throwing an error right now. - //response.setUrl(uploadInfo.getUploadUrl()); - response.setUrl(uploadInfo.getUploadUrl().replaceAll("/", "%2F")); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to extract template"); diff --git a/server/src/com/cloud/api/commands/ExtractVolumeCmd.java b/api/src/com/cloud/api/commands/ExtractVolumeCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ExtractVolumeCmd.java rename to api/src/com/cloud/api/commands/ExtractVolumeCmd.java index 2c6c1876140..0e9386d27f7 100755 --- a/server/src/com/cloud/api/commands/ExtractVolumeCmd.java +++ b/api/src/com/cloud/api/commands/ExtractVolumeCmd.java @@ -22,16 +22,16 @@ import java.net.URISyntaxException; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; 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 com.cloud.api.response.ExtractResponse; +import com.cloud.dc.DataCenter; import com.cloud.event.EventTypes; -import com.cloud.storage.UploadVO; -import com.cloud.storage.VolumeVO; +import com.cloud.storage.Upload; +import com.cloud.storage.Volume; import com.cloud.user.Account; @Implementation(description="Extracts volume", responseObject=ExtractResponse.class) @@ -94,7 +94,7 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { @Override public long getAccountId() { - VolumeVO volume = ApiDBUtils.findVolumeById(getId()); + Volume volume = _entityMgr.findById(Volume.class, getId()); if (volume != null) { return volume.getAccountId(); } @@ -118,14 +118,14 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { try { Long uploadId = _mgr.extractVolume(this); if (uploadId != null){ - UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId); + Upload uploadInfo = _entityMgr.findById(Upload.class, uploadId); ExtractResponse response = new ExtractResponse(); response.setResponseName(getName()); response.setObjectName("volume"); response.setId(id); - response.setName(ApiDBUtils.findVolumeById(id).getName()); + response.setName(_entityMgr.findById(Volume.class, id).getName()); response.setZoneId(zoneId); - response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName()); + response.setZoneName(_entityMgr.findById(DataCenter.class, zoneId).getName()); response.setMode(mode); response.setUploadId(uploadId); response.setState(uploadInfo.getUploadState().toString()); diff --git a/server/src/com/cloud/api/commands/GetCloudIdentifierCmd.java b/api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/GetCloudIdentifierCmd.java rename to api/src/com/cloud/api/commands/GetCloudIdentifierCmd.java diff --git a/server/src/com/cloud/api/commands/ListAccountsCmd.java b/api/src/com/cloud/api/commands/ListAccountsCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ListAccountsCmd.java rename to api/src/com/cloud/api/commands/ListAccountsCmd.java index 032f58303a9..bf238bba76f 100644 --- a/server/src/com/cloud/api/commands/ListAccountsCmd.java +++ b/api/src/com/cloud/api/commands/ListAccountsCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.AccountResponse; import com.cloud.api.response.ListResponse; -import com.cloud.user.AccountVO; +import com.cloud.user.Account; @Implementation(description="Lists accounts and provides detailed account information for listed accounts", responseObject=AccountResponse.class) public class ListAccountsCmd extends BaseListCmd { @@ -98,11 +97,11 @@ public class ListAccountsCmd extends BaseListCmd { @Override public void execute(){ - List accounts = _mgr.searchForAccounts(this); + List accounts = _mgr.searchForAccounts(this); ListResponse response = new ListResponse(); List accountResponses = new ArrayList(); - for (AccountVO account : accounts) { - AccountResponse acctResponse = ApiResponseHelper.createAccountResponse(account); + for (Account account : accounts) { + AccountResponse acctResponse = _responseGenerator.createAccountResponse(account); acctResponse.setObjectName("account"); accountResponses.add(acctResponse); } diff --git a/server/src/com/cloud/api/commands/ListAlertsCmd.java b/api/src/com/cloud/api/commands/ListAlertsCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/ListAlertsCmd.java rename to api/src/com/cloud/api/commands/ListAlertsCmd.java index a6e71997c00..d446542fa86 100644 --- a/server/src/com/cloud/api/commands/ListAlertsCmd.java +++ b/api/src/com/cloud/api/commands/ListAlertsCmd.java @@ -22,7 +22,7 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.alert.AlertVO; +import com.cloud.alert.Alert; import com.cloud.api.ApiConstants; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; @@ -63,10 +63,10 @@ public class ListAlertsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForAlerts(this); + List result = _mgr.searchForAlerts(this); ListResponse response = new ListResponse(); List alertResponseList = new ArrayList(); - for (AlertVO alert : result) { + for (Alert alert : result) { AlertResponse alertResponse = new AlertResponse(); alertResponse.setId(alert.getId()); alertResponse.setAlertType(alert.getType()); diff --git a/server/src/com/cloud/api/commands/ListAsyncJobsCmd.java b/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java similarity index 74% rename from server/src/com/cloud/api/commands/ListAsyncJobsCmd.java rename to api/src/com/cloud/api/commands/ListAsyncJobsCmd.java index 39ca6e87215..ca4f5b76fe3 100644 --- a/server/src/com/cloud/api/commands/ListAsyncJobsCmd.java +++ b/api/src/com/cloud/api/commands/ListAsyncJobsCmd.java @@ -22,14 +22,12 @@ import java.util.Date; import java.util.List; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiSerializerHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ResponseObject; import com.cloud.api.response.AsyncJobResponse; import com.cloud.api.response.ListResponse; -import com.cloud.async.AsyncJobVO; +import com.cloud.async.AsyncJob; @Implementation(description="Lists all pending asynchronous jobs for the account.", responseObject=AsyncJobResponse.class) public class ListAsyncJobsCmd extends BaseListCmd { @@ -75,25 +73,11 @@ public class ListAsyncJobsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForAsyncJobs(this); + List result = _mgr.searchForAsyncJobs(this); ListResponse response = new ListResponse(); List jobResponses = new ArrayList(); - for (AsyncJobVO job : result) { - AsyncJobResponse jobResponse = new AsyncJobResponse(); - jobResponse.setAccountId(job.getAccountId()); - jobResponse.setCmd(job.getCmd()); - jobResponse.setCreated(job.getCreated()); - jobResponse.setId(job.getId()); - jobResponse.setJobInstanceId(job.getInstanceId()); - jobResponse.setJobInstanceType(job.getInstanceType()); - jobResponse.setJobProcStatus(job.getProcessStatus()); - jobResponse.setJobResult((ResponseObject)ApiSerializerHelper.fromSerializedString(job.getResult())); - jobResponse.setJobResultCode(job.getResultCode()); - jobResponse.setJobStatus(job.getStatus()); - jobResponse.setUserId(job.getUserId()); - - jobResponse.setObjectName("asyncjobs"); - jobResponses.add(jobResponse); + for (AsyncJob job : result) { + jobResponses.add(_responseGenerator.createAsyncJobResponse(job)); } response.setResponses(jobResponses); diff --git a/server/src/com/cloud/api/commands/ListCapabilitiesCmd.java b/api/src/com/cloud/api/commands/ListCapabilitiesCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/ListCapabilitiesCmd.java rename to api/src/com/cloud/api/commands/ListCapabilitiesCmd.java diff --git a/api/src/com/cloud/api/commands/ListCapacityCmd.java b/api/src/com/cloud/api/commands/ListCapacityCmd.java new file mode 100644 index 00000000000..93a2ab923c3 --- /dev/null +++ b/api/src/com/cloud/api/commands/ListCapacityCmd.java @@ -0,0 +1,109 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.cloud.api.commands; + +import java.text.DecimalFormat; +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.response.CapacityResponse; +import com.cloud.api.response.ListResponse; +import com.cloud.capacity.Capacity; + +@Implementation(description="Lists capacity.", responseObject=CapacityResponse.class) +public class ListCapacityCmd extends BaseListCmd { + + public static final Logger s_logger = Logger.getLogger(ListCapacityCmd.class.getName()); + private static final DecimalFormat s_percentFormat = new DecimalFormat("##.##"); + + private static final String s_name = "listcapacityresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="lists capacity by the Host ID") + private Long hostId; + + @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="lists capacity by the Pod ID") + private Long podId; + + @Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="lists capacity by type") + private String type; + + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists capacity by the Zone ID") + private Long zoneId; + + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getHostId() { + return hostId; + } + + public Long getPodId() { + return podId; + } + + public String getType() { + return type; + } + + public Long getZoneId() { + return zoneId; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getName() { + return s_name; + } + + @Override + public Long getPageSizeVal() { + Long pageSizeVal = 1000000L; + Integer pageSize = getPageSize(); + if (pageSize != null) { + pageSizeVal = pageSize.longValue(); + } + return pageSizeVal; + } + + + + @Override + public void execute(){ + List result = _mgr.listCapacities(this); + ListResponse response = new ListResponse(); + List capacityResponses = _responseGenerator.createCapacityResponse(result, s_percentFormat); + response.setResponses(capacityResponses); + response.setResponseName(getName()); + this.setResponseObject(response); + } +} diff --git a/server/src/com/cloud/api/commands/ListCfgsByCmd.java b/api/src/com/cloud/api/commands/ListCfgsByCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/ListCfgsByCmd.java rename to api/src/com/cloud/api/commands/ListCfgsByCmd.java index 9c2ecfce46a..d1226b6f096 100644 --- a/server/src/com/cloud/api/commands/ListCfgsByCmd.java +++ b/api/src/com/cloud/api/commands/ListCfgsByCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ConfigurationResponse; import com.cloud.api.response.ListResponse; -import com.cloud.configuration.ConfigurationVO; +import com.cloud.configuration.Configuration; @Implementation(description="Lists all configurations.", responseObject=ConfigurationResponse.class) public class ListCfgsByCmd extends BaseListCmd { @@ -73,11 +72,11 @@ public class ListCfgsByCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForConfigurations(this); + List result = _mgr.searchForConfigurations(this); ListResponse response = new ListResponse(); List configResponses = new ArrayList(); - for (ConfigurationVO cfg : result) { - ConfigurationResponse cfgResponse = ApiResponseHelper.createConfigurationResponse(cfg); + for (Configuration cfg : result) { + ConfigurationResponse cfgResponse = _responseGenerator.createConfigurationResponse(cfg); cfgResponse.setObjectName("configuration"); configResponses.add(cfgResponse); } diff --git a/server/src/com/cloud/api/commands/ListClustersCmd.java b/api/src/com/cloud/api/commands/ListClustersCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/ListClustersCmd.java rename to api/src/com/cloud/api/commands/ListClustersCmd.java index ba7fe2f916d..9e9c156c250 100644 --- a/server/src/com/cloud/api/commands/ListClustersCmd.java +++ b/api/src/com/cloud/api/commands/ListClustersCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ClusterResponse; import com.cloud.api.response.ListResponse; -import com.cloud.dc.ClusterVO; +import com.cloud.org.Cluster; @Implementation(description="Lists clusters.", responseObject=ClusterResponse.class) public class ListClustersCmd extends BaseListCmd { @@ -86,11 +85,11 @@ public class ListClustersCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForClusters(this); + List result = _mgr.searchForClusters(this); ListResponse response = new ListResponse(); List clusterResponses = new ArrayList(); - for (ClusterVO cluster : result) { - ClusterResponse clusterResponse = ApiResponseHelper.createClusterResponse(cluster); + for (Cluster cluster : result) { + ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster); clusterResponse.setObjectName("cluster"); clusterResponses.add(clusterResponse); } diff --git a/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java b/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java rename to api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java index 2882040ae34..61645d06597 100644 --- a/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListDiskOfferingsCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.DiskOfferingResponse; import com.cloud.api.response.ListResponse; -import com.cloud.storage.DiskOfferingVO; +import com.cloud.offering.DiskOffering; @Implementation(description="Lists all available disk offerings.", responseObject=DiskOfferingResponse.class) public class ListDiskOfferingsCmd extends BaseListCmd { @@ -77,11 +76,11 @@ public class ListDiskOfferingsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForDiskOfferings(this); + List result = _mgr.searchForDiskOfferings(this); ListResponse response = new ListResponse(); List diskOfferingResponses = new ArrayList(); - for (DiskOfferingVO offering : result) { - DiskOfferingResponse diskOffResp = ApiResponseHelper.createDiskOfferingResponse(offering); + for (DiskOffering offering : result) { + DiskOfferingResponse diskOffResp = _responseGenerator.createDiskOfferingResponse(offering); diskOffResp.setObjectName("diskoffering"); diskOfferingResponses.add(diskOffResp); } diff --git a/server/src/com/cloud/api/commands/ListDomainChildrenCmd.java b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ListDomainChildrenCmd.java rename to api/src/com/cloud/api/commands/ListDomainChildrenCmd.java index 9533b299685..d00e533070a 100644 --- a/server/src/com/cloud/api/commands/ListDomainChildrenCmd.java +++ b/api/src/com/cloud/api/commands/ListDomainChildrenCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.DomainResponse; import com.cloud.api.response.ListResponse; -import com.cloud.domain.DomainVO; +import com.cloud.domain.Domain; @Implementation(description="Lists all children domains belonging to a specified domain", responseObject=DomainResponse.class) public class ListDomainChildrenCmd extends BaseListCmd { @@ -77,11 +76,11 @@ public class ListDomainChildrenCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForDomainChildren(this); + List result = _mgr.searchForDomainChildren(this); ListResponse response = new ListResponse(); List domainResponses = new ArrayList(); - for (DomainVO domain : result) { - DomainResponse domainResponse = ApiResponseHelper.createDomainResponse(domain); + for (Domain domain : result) { + DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain); domainResponse.setObjectName("domain"); domainResponses.add(domainResponse); } diff --git a/server/src/com/cloud/api/commands/ListDomainsCmd.java b/api/src/com/cloud/api/commands/ListDomainsCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ListDomainsCmd.java rename to api/src/com/cloud/api/commands/ListDomainsCmd.java index 7867ac246cd..af5ba803681 100644 --- a/server/src/com/cloud/api/commands/ListDomainsCmd.java +++ b/api/src/com/cloud/api/commands/ListDomainsCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.DomainResponse; import com.cloud.api.response.ListResponse; -import com.cloud.domain.DomainVO; +import com.cloud.domain.Domain; @Implementation(description="Lists domains and provides detailed information for listed domains", responseObject=DomainResponse.class) public class ListDomainsCmd extends BaseListCmd { @@ -77,11 +76,11 @@ public class ListDomainsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForDomains(this); + List result = _mgr.searchForDomains(this); ListResponse response = new ListResponse(); List domainResponses = new ArrayList(); - for (DomainVO domain : result) { - DomainResponse domainResponse = ApiResponseHelper.createDomainResponse(domain); + for (Domain domain : result) { + DomainResponse domainResponse = _responseGenerator.createDomainResponse(domain); domainResponse.setObjectName("domain"); domainResponses.add(domainResponse); } diff --git a/server/src/com/cloud/api/commands/ListEventsCmd.java b/api/src/com/cloud/api/commands/ListEventsCmd.java similarity index 78% rename from server/src/com/cloud/api/commands/ListEventsCmd.java rename to api/src/com/cloud/api/commands/ListEventsCmd.java index f6499631ccc..f1d3285a6a5 100644 --- a/server/src/com/cloud/api/commands/ListEventsCmd.java +++ b/api/src/com/cloud/api/commands/ListEventsCmd.java @@ -24,14 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.EventResponse; import com.cloud.api.response.ListResponse; -import com.cloud.event.EventVO; -import com.cloud.user.User; +import com.cloud.event.Event; @Implementation(description="A command to list events.", responseObject=EventResponse.class) public class ListEventsCmd extends BaseListCmd { @@ -114,28 +112,11 @@ public class ListEventsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForEvents(this); + List result = _mgr.searchForEvents(this); ListResponse response = new ListResponse(); List eventResponses = new ArrayList(); - for (EventVO event : result) { - EventResponse responseEvent = new EventResponse(); - responseEvent.setAccountName(event.getAccountName()); - responseEvent.setCreated(event.getCreateDate()); - responseEvent.setDescription(event.getDescription()); - responseEvent.setDomainId(event.getDomainId()); - responseEvent.setEventType(event.getType()); - responseEvent.setId(event.getId()); - responseEvent.setLevel(event.getLevel()); - responseEvent.setParentId(event.getStartId()); - responseEvent.setState(event.getState()); - responseEvent.setDomainName(ApiDBUtils.findDomainById(event.getDomainId()).getName()); - User user = ApiDBUtils.findUserById(event.getUserId()); - if (user != null) { - responseEvent.setUsername(user.getUsername()); - } - - responseEvent.setObjectName("event"); - eventResponses.add(responseEvent); + for (Event event : result) { + eventResponses.add(_responseGenerator.createEventResponse(event)); } response.setResponses(eventResponses); diff --git a/server/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java rename to api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java index 52027d502b1..89dab4c4d23 100644 --- a/server/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCategoriesCmd.java @@ -29,7 +29,7 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.GuestOSCategoryResponse; import com.cloud.api.response.ListResponse; -import com.cloud.storage.GuestOSCategoryVO; +import com.cloud.storage.GuestOsCategory; @Implementation(description="Lists all supported OS categories for this cloud.", responseObject=GuestOSCategoryResponse.class) public class ListGuestOsCategoriesCmd extends BaseListCmd { @@ -65,10 +65,10 @@ public class ListGuestOsCategoriesCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.listGuestOSCategoriesByCriteria(this); + List result = _mgr.listGuestOSCategoriesByCriteria(this); ListResponse response = new ListResponse(); List osCatResponses = new ArrayList(); - for (GuestOSCategoryVO osCategory : result) { + for (GuestOsCategory osCategory : result) { GuestOSCategoryResponse categoryResponse = new GuestOSCategoryResponse(); categoryResponse.setId(osCategory.getId()); categoryResponse.setName(osCategory.getName()); diff --git a/server/src/com/cloud/api/commands/ListGuestOsCmd.java b/api/src/com/cloud/api/commands/ListGuestOsCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/ListGuestOsCmd.java rename to api/src/com/cloud/api/commands/ListGuestOsCmd.java index 7fab88bdfbc..c7222213762 100644 --- a/server/src/com/cloud/api/commands/ListGuestOsCmd.java +++ b/api/src/com/cloud/api/commands/ListGuestOsCmd.java @@ -29,7 +29,7 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.GuestOSResponse; import com.cloud.api.response.ListResponse; -import com.cloud.storage.GuestOSVO; +import com.cloud.storage.GuestOS; @Implementation(description="Lists all supported OS types for this cloud.", responseObject=GuestOSResponse.class) public class ListGuestOsCmd extends BaseListCmd { @@ -82,10 +82,10 @@ public class ListGuestOsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.listGuestOSByCriteria(this); + List result = _mgr.listGuestOSByCriteria(this); ListResponse response = new ListResponse(); List osResponses = new ArrayList(); - for (GuestOSVO guestOS : result) { + for (GuestOS guestOS : result) { GuestOSResponse guestOSResponse = new GuestOSResponse(); guestOSResponse.setDescription(guestOS.getDisplayName()); guestOSResponse.setId(guestOS.getId()); diff --git a/server/src/com/cloud/api/commands/ListHostsCmd.java b/api/src/com/cloud/api/commands/ListHostsCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ListHostsCmd.java rename to api/src/com/cloud/api/commands/ListHostsCmd.java index 6a6d1fc1df0..4ea9640eaee 100644 --- a/server/src/com/cloud/api/commands/ListHostsCmd.java +++ b/api/src/com/cloud/api/commands/ListHostsCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; -import com.cloud.host.HostVO; +import com.cloud.host.Host; @Implementation(description="Lists hosts.", responseObject=HostResponse.class) public class ListHostsCmd extends BaseListCmd { @@ -108,12 +107,12 @@ public class ListHostsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForServers(this); + List result = _mgr.searchForServers(this); ListResponse response = new ListResponse(); List hostResponses = new ArrayList(); - for (HostVO host : result) { - HostResponse hostResponse = ApiResponseHelper.createHostResponse(host); + for (Host host : result) { + HostResponse hostResponse = _responseGenerator.createHostResponse(host); hostResponse.setObjectName("host"); hostResponses.add(hostResponse); } diff --git a/server/src/com/cloud/api/commands/ListHypervisorsCmd.java b/api/src/com/cloud/api/commands/ListHypervisorsCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/ListHypervisorsCmd.java rename to api/src/com/cloud/api/commands/ListHypervisorsCmd.java diff --git a/server/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java rename to api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java index b55316c230f..22cdf646b7d 100644 --- a/server/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java @@ -23,14 +23,13 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.api.response.IpForwardingRuleResponse; import com.cloud.api.response.ListResponse; -import com.cloud.network.FirewallRuleVO; +import com.cloud.network.rules.FirewallRule; @Implementation(description="List the ip forwarding rules", responseObject=FirewallRuleResponse.class) public class ListIpForwardingRulesCmd extends BaseListCmd { @@ -68,11 +67,11 @@ public class ListIpForwardingRulesCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForIpForwardingRules(this); + List result = _mgr.searchForIpForwardingRules(this); ListResponse response = new ListResponse(); List ipForwardingResponses = new ArrayList(); - for (FirewallRuleVO rule : result) { - IpForwardingRuleResponse resp = ApiResponseHelper.createIpForwardingRuleResponse(rule); + for (FirewallRule rule : result) { + IpForwardingRuleResponse resp = _responseGenerator.createIpForwardingRuleResponse(rule); if (resp != null) { ipForwardingResponses.add(resp); } diff --git a/server/src/com/cloud/api/commands/ListIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java similarity index 67% rename from server/src/com/cloud/api/commands/ListIsoPermissionsCmd.java rename to api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java index c830f887070..f0d59260459 100644 --- a/server/src/com/cloud/api/commands/ListIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListIsoPermissionsCmd.java @@ -3,22 +3,24 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.storage.Storage.ImageFormat; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; public class ListIsoPermissionsCmd extends ListTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "listisopermissionsresponse"; } - public String getMediaType() { + @Override + public String getMediaType() { return "iso"; } - protected Logger getLogger() { + @Override + protected Logger getLogger() { return Logger.getLogger(ListIsoPermissionsCmd.class.getName()); } - protected boolean templateIsCorrectType(VMTemplateVO template) { + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { return template.getFormat().equals(ImageFormat.ISO); } } diff --git a/server/src/com/cloud/api/commands/ListIsosCmd.java b/api/src/com/cloud/api/commands/ListIsosCmd.java similarity index 50% rename from server/src/com/cloud/api/commands/ListIsosCmd.java rename to api/src/com/cloud/api/commands/ListIsosCmd.java index d564a5f2c9a..2e042cdc3fe 100755 --- a/server/src/com/cloud/api/commands/ListIsosCmd.java +++ b/api/src/com/cloud/api/commands/ListIsosCmd.java @@ -18,28 +18,18 @@ package com.cloud.api.commands; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; -import com.cloud.async.AsyncJobVO; -import com.cloud.dc.DataCenterVO; -import com.cloud.host.HostVO; -import com.cloud.storage.GuestOS; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.dao.VMTemplateDao.TemplateFilter; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -142,7 +132,7 @@ public class ListIsosCmd extends BaseListCmd { @Override public void execute(){ - List isos = _mgr.listIsos(this); + List isos = _mgr.listIsos(this); TemplateFilter isoFilterObj = null; try { @@ -158,7 +148,7 @@ public class ListIsosCmd extends BaseListCmd { boolean isAdmin = false; boolean isAccountSpecific = true; - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN) || (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN)) { isAdmin = true; if ((accountName == null) || (domainId == null)) { @@ -173,114 +163,7 @@ public class ListIsosCmd extends BaseListCmd { (isoFilterObj == TemplateFilter.community); - Map> isoHostsMap = new HashMap>(); - for (VMTemplateVO iso : isos) { - // TODO: implement - List isoHosts = ApiDBUtils.listTemplateHostBy(iso.getId(), zoneId); - if (iso.getName().equals("xs-tools.iso")) { - List xstoolsZones = new ArrayList(); - // the xs-tools.iso is a special case since it will be available on every computing host in the zone and we want to return it once per zone - List xstoolsHosts = new ArrayList(); - for (VMTemplateHostVO isoHost : isoHosts) { - // TODO: implement - HostVO host = ApiDBUtils.findHostById(isoHost.getHostId()); - if (!xstoolsZones.contains(Long.valueOf(host.getDataCenterId()))) { - xstoolsZones.add(Long.valueOf(host.getDataCenterId())); - xstoolsHosts.add(isoHost); - } - } - isoHostsMap.put(iso.getId(), xstoolsHosts); - } else { - isoHostsMap.put(iso.getId(), isoHosts); - } - } - - ListResponse response = new ListResponse(); - List isoResponses = new ArrayList(); - for (VMTemplateVO iso : isos) { - List isoHosts = isoHostsMap.get(iso.getId()); - for (VMTemplateHostVO isoHost : isoHosts) { - if (onlyReady && isoHost.getDownloadState() != Status.DOWNLOADED) { - continue; - } - - TemplateResponse isoResponse = new TemplateResponse(); - isoResponse.setId(iso.getId()); - isoResponse.setName(iso.getName()); - isoResponse.setDisplayText(iso.getDisplayText()); - isoResponse.setPublic(iso.isPublicTemplate()); - isoResponse.setCreated(isoHost.getCreated()); - isoResponse.setReady(isoHost.getDownloadState() == Status.DOWNLOADED); - isoResponse.setBootable(iso.isBootable()); - isoResponse.setFeatured(iso.isFeatured()); - isoResponse.setCrossZones(iso.isCrossZones()); - isoResponse.setPublic(iso.isPublicTemplate()); - - // TODO: implement - GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); - if (os != null) { - isoResponse.setOsTypeId(os.getId()); - isoResponse.setOsTypeName(os.getDisplayName()); - } else { - isoResponse.setOsTypeId(-1L); - isoResponse.setOsTypeName(""); - } - - // add account ID and name - Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); - if (owner != null) { - isoResponse.setAccount(owner.getAccountName()); - isoResponse.setDomainId(owner.getDomainId()); - // TODO: implement - isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); - } - - // Add the zone ID - // TODO: implement - HostVO host = ApiDBUtils.findHostById(isoHost.getHostId()); - DataCenterVO datacenter = ApiDBUtils.findZoneById(host.getDataCenterId()); - isoResponse.setZoneId(host.getDataCenterId()); - isoResponse.setZoneName(datacenter.getName()); - - // If the user is an admin, add the template download status - if (isAdmin || account.getId() == iso.getAccountId()) { - // add download status - if (isoHost.getDownloadState()!=Status.DOWNLOADED) { - String isoStatus = "Processing"; - if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - isoStatus = "Download Complete"; - } else if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { - if (isoHost.getDownloadPercent() == 100) { - isoStatus = "Installing ISO"; - } else { - isoStatus = isoHost.getDownloadPercent() + "% Downloaded"; - } - } else { - isoStatus = isoHost.getErrorString(); - } - isoResponse.setStatus(isoStatus); - } else { - isoResponse.setStatus("Successfully Installed"); - } - } - - long isoSize = isoHost.getSize(); - if (isoSize > 0) { - isoResponse.setSize(isoSize); - } - - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_template", iso.getId()); - if(asyncJob != null) { - isoResponse.setJobId(asyncJob.getId()); - isoResponse.setJobStatus(asyncJob.getStatus()); - } - - isoResponse.setObjectName("iso"); - isoResponses.add(isoResponse); - } - } - - response.setResponses(isoResponses); + ListResponse response = _responseGenerator.createIsoResponse(isos, zoneId, onlyReady, isAdmin, account); response.setResponseName(getName()); this.setResponseObject(response); } diff --git a/server/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java rename to api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java index a6928ccf287..d8a467d90ac 100644 --- a/server/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.UserVmResponse; -import com.cloud.vm.UserVmVO; +import com.cloud.uservm.UserVm; @Implementation(description="List all virtual machine instances that are assigned to a load balancer rule.", responseObject=UserVmResponse.class) public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { @@ -70,11 +69,11 @@ public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.listLoadBalancerInstances(this); + List result = _mgr.listLoadBalancerInstances(this); ListResponse response = new ListResponse(); List vmResponses = new ArrayList(); - for (UserVmVO instance : result) { - UserVmResponse userVmResponse = ApiResponseHelper.createUserVmResponse(instance); + for (UserVm instance : result) { + UserVmResponse userVmResponse = _responseGenerator.createUserVmResponse(instance); userVmResponse.setObjectName("loadbalancerruleinstance"); vmResponses.add(userVmResponse); } diff --git a/server/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java rename to api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java index 83232d5b503..37b12409fc8 100644 --- a/server/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListLoadBalancerRulesCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.LoadBalancerResponse; -import com.cloud.network.LoadBalancerVO; +import com.cloud.network.LoadBalancer; @Implementation(description="Lists load balancer rules.", responseObject=LoadBalancerResponse.class) public class ListLoadBalancerRulesCmd extends BaseListCmd { @@ -99,11 +98,11 @@ public class ListLoadBalancerRulesCmd extends BaseListCmd { @Override public void execute(){ - List loadBalancers = _mgr.searchForLoadBalancers(this); + List loadBalancers = _mgr.searchForLoadBalancers(this); ListResponse response = new ListResponse(); List lbResponses = new ArrayList(); - for (LoadBalancerVO loadBalancer : loadBalancers) { - LoadBalancerResponse lbResponse = ApiResponseHelper.createLoadBalancerResponse(loadBalancer); + for (LoadBalancer loadBalancer : loadBalancers) { + LoadBalancerResponse lbResponse = _responseGenerator.createLoadBalancerResponse(loadBalancer); lbResponse.setObjectName("loadbalancerrule"); lbResponses.add(lbResponse); } diff --git a/server/src/com/cloud/api/commands/ListNetworkGroupsCmd.java b/api/src/com/cloud/api/commands/ListNetworkGroupsCmd.java similarity index 50% rename from server/src/com/cloud/api/commands/ListNetworkGroupsCmd.java rename to api/src/com/cloud/api/commands/ListNetworkGroupsCmd.java index 58e9d9f5e92..ef5129d42a7 100644 --- a/server/src/com/cloud/api/commands/ListNetworkGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkGroupsCmd.java @@ -17,22 +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.ApiDBUtils; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.response.IngressRuleResponse; import com.cloud.api.response.ListResponse; import com.cloud.api.response.NetworkGroupResponse; -import com.cloud.async.executor.IngressRuleResultObject; -import com.cloud.async.executor.NetworkGroupResultObject; -import com.cloud.network.security.NetworkGroupRulesVO; +import com.cloud.network.security.NetworkGroupRules; @Implementation(description="Lists network groups", responseObject=NetworkGroupResponse.class) public class ListNetworkGroupsCmd extends BaseListCmd { @@ -87,54 +82,9 @@ public class ListNetworkGroupsCmd extends BaseListCmd { @Override public void execute(){ - List networkGroups = _networkGroupMgr.searchForNetworkGroupRules(this); - List groupResultObjs = NetworkGroupResultObject.transposeNetworkGroups(networkGroups); + List networkGroups = _networkGroupMgr.searchForNetworkGroupRules(this); - ListResponse response = new ListResponse(); - List netGrpResponses = new ArrayList(); - for (NetworkGroupResultObject networkGroup : groupResultObjs) { - NetworkGroupResponse netGrpResponse = new NetworkGroupResponse(); - netGrpResponse.setId(networkGroup.getId()); - netGrpResponse.setName(networkGroup.getName()); - netGrpResponse.setDescription(networkGroup.getDescription()); - netGrpResponse.setAccountName(networkGroup.getAccountName()); - netGrpResponse.setDomainId(networkGroup.getDomainId()); - netGrpResponse.setDomainName(ApiDBUtils.findDomainById(networkGroup.getDomainId()).getName()); - - List ingressRules = networkGroup.getIngressRules(); - if ((ingressRules != null) && !ingressRules.isEmpty()) { - List ingressRulesResponse = new ArrayList(); - - for (IngressRuleResultObject ingressRule : ingressRules) { - IngressRuleResponse ingressData = new IngressRuleResponse(); - - ingressData.setRuleId(ingressRule.getId()); - ingressData.setProtocol(ingressRule.getProtocol()); - if ("icmp".equalsIgnoreCase(ingressRule.getProtocol())) { - ingressData.setIcmpType(ingressRule.getStartPort()); - ingressData.setIcmpCode(ingressRule.getEndPort()); - } else { - ingressData.setStartPort(ingressRule.getStartPort()); - ingressData.setEndPort(ingressRule.getEndPort()); - } - - if (ingressRule.getAllowedNetworkGroup() != null) { - ingressData.setNetworkGroupName(ingressRule.getAllowedNetworkGroup()); - ingressData.setAccountName(ingressRule.getAllowedNetGroupAcct()); - } else { - ingressData.setCidr(ingressRule.getAllowedSourceIpCidr()); - } - - ingressData.setObjectName("ingressrule"); - ingressRulesResponse.add(ingressData); - } - netGrpResponse.setIngressRules(ingressRulesResponse); - } - netGrpResponse.setObjectName("securitygroup"); - netGrpResponses.add(netGrpResponse); - } - - response.setResponses(netGrpResponses); + ListResponse response = _responseGenerator.createNetworkGroupResponses(networkGroups); response.setResponseName(getName()); this.setResponseObject(response); } diff --git a/server/src/com/cloud/api/commands/ListPodsByCmd.java b/api/src/com/cloud/api/commands/ListPodsByCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/ListPodsByCmd.java rename to api/src/com/cloud/api/commands/ListPodsByCmd.java index b8236e0007c..4d24c1f5663 100644 --- a/server/src/com/cloud/api/commands/ListPodsByCmd.java +++ b/api/src/com/cloud/api/commands/ListPodsByCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.PodResponse; -import com.cloud.dc.HostPodVO; +import com.cloud.dc.Pod; @Implementation(description="Lists all Pods.", responseObject=PodResponse.class) public class ListPodsByCmd extends BaseListCmd { @@ -79,11 +78,11 @@ public class ListPodsByCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForPods(this); + List result = _mgr.searchForPods(this); ListResponse response = new ListResponse(); List podResponses = new ArrayList(); - for (HostPodVO pod : result) { - PodResponse podResponse = ApiResponseHelper.createPodResponse(pod); + for (Pod pod : result) { + PodResponse podResponse = _responseGenerator.createPodResponse(pod); podResponse.setObjectName("pod"); podResponses.add(podResponse); } diff --git a/server/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java similarity index 89% rename from server/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java rename to api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java index 0a6526e2bb5..558871cdf89 100644 --- a/server/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListPortForwardingRulesCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.api.response.ListResponse; -import com.cloud.network.FirewallRuleVO; +import com.cloud.network.rules.FirewallRule; @Implementation(description="Lists all port forwarding rules for an IP address.", responseObject=FirewallRuleResponse.class) public class ListPortForwardingRulesCmd extends BaseListCmd { @@ -63,12 +62,12 @@ public class ListPortForwardingRulesCmd extends BaseListCmd { @Override public void execute(){ - List result = _networkMgr.listPortForwardingRules(this); + List result = _networkService.listPortForwardingRules(this); ListResponse response = new ListResponse(); List fwResponses = new ArrayList(); - for (FirewallRuleVO fwRule : result) { - FirewallRuleResponse ruleData = ApiResponseHelper.createFirewallRuleResponse(fwRule); + for (FirewallRule fwRule : result) { + FirewallRuleResponse ruleData = _responseGenerator.createFirewallRuleResponse(fwRule); ruleData.setObjectName("portforwardingrule"); fwResponses.add(ruleData); } diff --git a/server/src/com/cloud/api/commands/ListPreallocatedLunsCmd.java b/api/src/com/cloud/api/commands/ListPreallocatedLunsCmd.java similarity index 88% rename from server/src/com/cloud/api/commands/ListPreallocatedLunsCmd.java rename to api/src/com/cloud/api/commands/ListPreallocatedLunsCmd.java index 8b6834b78df..9a2666e4e14 100644 --- a/server/src/com/cloud/api/commands/ListPreallocatedLunsCmd.java +++ b/api/src/com/cloud/api/commands/ListPreallocatedLunsCmd.java @@ -24,13 +24,11 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.PreallocatedLunResponse; -import com.cloud.storage.preallocatedlun.PreallocatedLunVO; @Implementation(responseObject=PreallocatedLunResponse.class) public class ListPreallocatedLunsCmd extends BaseListCmd { @@ -73,11 +71,11 @@ public class ListPreallocatedLunsCmd extends BaseListCmd { @Override public void execute(){ - List preallocatedLuns = _mgr.getPreAllocatedLuns(this); + List preallocatedLuns = _mgr.getPreAllocatedLuns(this); ListResponse response = new ListResponse(); List lunResponses = new ArrayList(); - for (PreallocatedLunVO preallocatedLun : preallocatedLuns) { - PreallocatedLunResponse preallocLunResponse = ApiResponseHelper.createPreallocatedLunResponse(preallocatedLun); + for (Object preallocatedLun : preallocatedLuns) { + PreallocatedLunResponse preallocLunResponse = _responseGenerator.createPreallocatedLunResponse(preallocatedLun); preallocLunResponse.setObjectName("preallocatedlun"); lunResponses.add(preallocLunResponse); diff --git a/server/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java rename to api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java index 35a73a1b79c..a6896571ce2 100644 --- a/server/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java +++ b/api/src/com/cloud/api/commands/ListPublicIpAddressesCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.IPAddressResponse; import com.cloud.api.response.ListResponse; -import com.cloud.network.IPAddressVO; +import com.cloud.network.IpAddress; @Implementation(description="Lists all public ip addresses", responseObject=IPAddressResponse.class) public class ListPublicIpAddressesCmd extends BaseListCmd { @@ -106,11 +105,11 @@ public class ListPublicIpAddressesCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForIPAddresses(this); + List result = _mgr.searchForIPAddresses(this); ListResponse response = new ListResponse(); List ipAddrResponses = new ArrayList(); - for (IPAddressVO ipAddress : result) { - IPAddressResponse ipResponse = ApiResponseHelper.createIPAddressResponse(ipAddress); + for (IpAddress ipAddress : result) { + IPAddressResponse ipResponse = _responseGenerator.createIPAddressResponse(ipAddress); ipResponse.setObjectName("publicipaddress"); ipAddrResponses.add(ipResponse); } diff --git a/server/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java rename to api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java index fca6899def6..10b76090b50 100644 --- a/server/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java +++ b/api/src/com/cloud/api/commands/ListRecurringSnapshotScheduleCmd.java @@ -26,7 +26,7 @@ import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SnapshotScheduleResponse; -import com.cloud.storage.SnapshotScheduleVO; +import com.cloud.storage.snapshot.SnapshotSchedule; @Implementation(description="Lists recurring snapshot schedule", responseObject=SnapshotScheduleResponse.class) public class ListRecurringSnapshotScheduleCmd extends BaseListCmd { @@ -65,10 +65,10 @@ public class ListRecurringSnapshotScheduleCmd extends BaseListCmd { @Override public void execute(){ - List snapshotSchedules = _snapshotMgr.findRecurringSnapshotSchedule(this); + List snapshotSchedules = _snapshotMgr.findRecurringSnapshotSchedule(this); ListResponse response = new ListResponse(); List snapshotScheduleResponses = new ArrayList(); - for (SnapshotScheduleVO snapshotSchedule : snapshotSchedules) { + for (SnapshotSchedule snapshotSchedule : snapshotSchedules) { SnapshotScheduleResponse snapSchedResponse = new SnapshotScheduleResponse(); snapSchedResponse.setId(snapshotSchedule.getId()); snapSchedResponse.setVolumeId(snapshotSchedule.getVolumeId()); diff --git a/server/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java b/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java similarity index 77% rename from server/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java rename to api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java index c7ce6363cea..400ebd18201 100644 --- a/server/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java +++ b/api/src/com/cloud/api/commands/ListRemoteAccessVpnsCmd.java @@ -23,14 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.RemoteAccessVpnResponse; -import com.cloud.network.RemoteAccessVpnVO; -import com.cloud.user.Account; +import com.cloud.network.RemoteAccessVpn; @Implementation(description="Lists remote access vpns", responseObject=RemoteAccessVpnResponse.class) public class ListRemoteAccessVpnsCmd extends BaseListCmd { @@ -98,25 +96,11 @@ public class ListRemoteAccessVpnsCmd extends BaseListCmd { @Override public void execute(){ - List vpns = _mgr.searchForRemoteAccessVpns(this); + List vpns = _mgr.searchForRemoteAccessVpns(this); ListResponse response = new ListResponse(); List vpnResponses = new ArrayList(); - for (RemoteAccessVpnVO vpn : vpns) { - RemoteAccessVpnResponse vpnResponse = new RemoteAccessVpnResponse(); - vpnResponse.setId(vpn.getId()); - vpnResponse.setPublicIp(vpn.getVpnServerAddress()); - vpnResponse.setIpRange(vpn.getIpRange()); - vpnResponse.setPresharedKey(vpn.getIpsecPresharedKey()); - vpnResponse.setAccountName(vpn.getAccountName()); - - Account accountTemp = ApiDBUtils.findAccountById(vpn.getAccountId()); - if (accountTemp != null) { - vpnResponse.setDomainId(accountTemp.getDomainId()); - vpnResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - - vpnResponse.setObjectName("remoteaccessvpn"); - vpnResponses.add(vpnResponse); + for (RemoteAccessVpn vpn : vpns) { + vpnResponses.add(_responseGenerator.createRemoteAccessVpnResponse(vpn)); } response.setResponses(vpnResponses); diff --git a/server/src/com/cloud/api/commands/ListResourceLimitsCmd.java b/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ListResourceLimitsCmd.java rename to api/src/com/cloud/api/commands/ListResourceLimitsCmd.java index db0a5e1d12d..4b2e2f26f49 100644 --- a/server/src/com/cloud/api/commands/ListResourceLimitsCmd.java +++ b/api/src/com/cloud/api/commands/ListResourceLimitsCmd.java @@ -24,14 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ResourceLimitResponse; import com.cloud.configuration.ResourceLimit; -import com.cloud.configuration.ResourceLimitVO; @Implementation(description="Lists resource limits.", responseObject=ResourceLimitResponse.class) public class ListResourceLimitsCmd extends BaseListCmd { @@ -90,11 +88,11 @@ public class ListResourceLimitsCmd extends BaseListCmd { @Override public void execute(){ - List result = _accountService.searchForLimits(this); + List result = _accountService.searchForLimits(this); ListResponse response = new ListResponse(); List limitResponses = new ArrayList(); for (ResourceLimit limit : result) { - ResourceLimitResponse resourceLimitResponse = ApiResponseHelper.createResourceLimitResponse(limit); + ResourceLimitResponse resourceLimitResponse = _responseGenerator.createResourceLimitResponse(limit); resourceLimitResponse.setObjectName("resourcelimit"); limitResponses.add(resourceLimitResponse); } diff --git a/server/src/com/cloud/api/commands/ListRoutersCmd.java b/api/src/com/cloud/api/commands/ListRoutersCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/ListRoutersCmd.java rename to api/src/com/cloud/api/commands/ListRoutersCmd.java index e48299acb64..9da699faa8b 100644 --- a/server/src/com/cloud/api/commands/ListRoutersCmd.java +++ b/api/src/com/cloud/api/commands/ListRoutersCmd.java @@ -24,14 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.DomainRouterResponse; import com.cloud.api.response.ListResponse; -import com.cloud.vm.DomainRouter; -import com.cloud.vm.DomainRouterVO; +import com.cloud.network.router.VirtualRouter; @Implementation(description="List routers.", responseObject=DomainRouterResponse.class) public class ListRoutersCmd extends BaseListCmd { @@ -107,11 +105,11 @@ public class ListRoutersCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForRouters(this); + List result = _mgr.searchForRouters(this); ListResponse response = new ListResponse(); List routerResponses = new ArrayList(); - for (DomainRouter router : result) { - DomainRouterResponse routerResponse = ApiResponseHelper.createDomainRouterResponse(router); + for (VirtualRouter router : result) { + DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(router); routerResponse.setObjectName("router"); routerResponses.add(routerResponse); } diff --git a/server/src/com/cloud/api/commands/ListServiceOfferingsCmd.java b/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/ListServiceOfferingsCmd.java rename to api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java index 9ce400c5dba..37aa4b01276 100644 --- a/server/src/com/cloud/api/commands/ListServiceOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListServiceOfferingsCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ServiceOfferingResponse; -import com.cloud.service.ServiceOfferingVO; +import com.cloud.offering.ServiceOffering; @Implementation(description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class) public class ListServiceOfferingsCmd extends BaseListCmd { @@ -77,11 +76,11 @@ public class ListServiceOfferingsCmd extends BaseListCmd { @Override public void execute(){ - List offerings = _mgr.searchForServiceOfferings(this); + List offerings = _mgr.searchForServiceOfferings(this); ListResponse response = new ListResponse(); List offeringResponses = new ArrayList(); - for (ServiceOfferingVO offering : offerings) { - ServiceOfferingResponse offeringResponse = ApiResponseHelper.createServiceOfferingResponse(offering); + for (ServiceOffering offering : offerings) { + ServiceOfferingResponse offeringResponse = _responseGenerator.createServiceOfferingResponse(offering); offeringResponse.setObjectName("serviceoffering"); offeringResponses.add(offeringResponse); } diff --git a/server/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java b/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java rename to api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java index 965902f117b..c5b65cda1a0 100644 --- a/server/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java +++ b/api/src/com/cloud/api/commands/ListSnapshotPoliciesCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SnapshotPolicyResponse; -import com.cloud.storage.SnapshotPolicyVO; +import com.cloud.storage.snapshot.SnapshotPolicy; @Implementation(description="Lists snapshot policies.", responseObject=SnapshotPolicyResponse.class) public class ListSnapshotPoliciesCmd extends BaseListCmd { @@ -78,11 +77,11 @@ public class ListSnapshotPoliciesCmd extends BaseListCmd { @Override public void execute(){ - List result = _snapshotMgr.listPoliciesforVolume(this); + List result = _snapshotMgr.listPoliciesforVolume(this); ListResponse response = new ListResponse(); List policyResponses = new ArrayList(); - for (SnapshotPolicyVO policy : result) { - SnapshotPolicyResponse policyResponse = ApiResponseHelper.createSnapshotPolicyResponse(policy); + for (SnapshotPolicy policy : result) { + SnapshotPolicyResponse policyResponse = _responseGenerator.createSnapshotPolicyResponse(policy); policyResponse.setObjectName("snapshotpolicy"); policyResponses.add(policyResponse); } diff --git a/server/src/com/cloud/api/commands/ListSnapshotsCmd.java b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/ListSnapshotsCmd.java rename to api/src/com/cloud/api/commands/ListSnapshotsCmd.java index 127528f47ce..79d1e0a9451 100644 --- a/server/src/com/cloud/api/commands/ListSnapshotsCmd.java +++ b/api/src/com/cloud/api/commands/ListSnapshotsCmd.java @@ -23,14 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SnapshotResponse; import com.cloud.storage.Snapshot; -import com.cloud.storage.SnapshotVO; @Implementation(description="Lists all available snapshots for the account.", responseObject=SnapshotResponse.class) public class ListSnapshotsCmd extends BaseListCmd { @@ -106,11 +104,11 @@ public class ListSnapshotsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.listSnapshots(this); + List result = _mgr.listSnapshots(this); ListResponse response = new ListResponse(); List snapshotResponses = new ArrayList(); for (Snapshot snapshot : result) { - SnapshotResponse snapshotResponse = ApiResponseHelper.createSnapshotResponse(snapshot); + SnapshotResponse snapshotResponse = _responseGenerator.createSnapshotResponse(snapshot); snapshotResponse.setObjectName("snapshot"); snapshotResponses.add(snapshotResponse); } diff --git a/server/src/com/cloud/api/commands/ListStoragePoolsCmd.java b/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/ListStoragePoolsCmd.java rename to api/src/com/cloud/api/commands/ListStoragePoolsCmd.java index de4783c9f01..fc2375b8ac6 100644 --- a/server/src/com/cloud/api/commands/ListStoragePoolsCmd.java +++ b/api/src/com/cloud/api/commands/ListStoragePoolsCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.StoragePoolResponse; -import com.cloud.storage.StoragePoolVO; +import com.cloud.storage.StoragePool; @Implementation(description="Lists storage pools.", responseObject=StoragePoolResponse.class) public class ListStoragePoolsCmd extends BaseListCmd { @@ -99,11 +98,11 @@ public class ListStoragePoolsCmd extends BaseListCmd { @Override public void execute(){ - List pools = _mgr.searchForStoragePools(this); + List pools = _mgr.searchForStoragePools(this); ListResponse response = new ListResponse(); List poolResponses = new ArrayList(); - for (StoragePoolVO pool : pools) { - StoragePoolResponse poolResponse = ApiResponseHelper.createStoragePoolResponse(pool); + for (StoragePool pool : pools) { + StoragePoolResponse poolResponse = _responseGenerator.createStoragePoolResponse(pool); poolResponse.setObjectName("storagepool"); poolResponses.add(poolResponse); } diff --git a/server/src/com/cloud/api/commands/ListSystemVMsCmd.java b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/ListSystemVMsCmd.java rename to api/src/com/cloud/api/commands/ListSystemVMsCmd.java index 6c2392e88a1..4c76c846881 100644 --- a/server/src/com/cloud/api/commands/ListSystemVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.SystemVmResponse; -import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; @Implementation(description="List system virtual machines.", responseObject=SystemVmResponse.class) public class ListSystemVMsCmd extends BaseListCmd { @@ -105,11 +104,11 @@ public class ListSystemVMsCmd extends BaseListCmd { @Override public void execute(){ - List systemVMs = _mgr.searchForSystemVm(this); + List systemVMs = _mgr.searchForSystemVm(this); ListResponse response = new ListResponse(); List vmResponses = new ArrayList(); - for (VMInstanceVO systemVM : systemVMs) { - SystemVmResponse vmResponse = ApiResponseHelper.createSystemVmResponse(systemVM); + for (VirtualMachine systemVM : systemVMs) { + SystemVmResponse vmResponse = _responseGenerator.createSystemVmResponse(systemVM); vmResponse.setObjectName("systemvm"); vmResponses.add(vmResponse); } diff --git a/server/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java similarity index 76% rename from server/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java rename to api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index 1d378d9018f..37514e2f7cf 100644 --- a/server/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -22,12 +22,11 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.TemplatePermissionsResponse; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -74,7 +73,7 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseListCmd { return s_name; } - protected boolean templateIsCorrectType(VMTemplateVO template) { + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { return true; } @@ -89,27 +88,11 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseListCmd { @Override public void execute(){ List accountNames = _mgr.listTemplatePermissions(this); - Account account = (Account)UserContext.current().getAccount(); + + Account account = UserContext.current().getAccount(); boolean isAdmin = ((account == null) || isAdmin(account.getType())); - Long templateOwnerDomain = null; - VMTemplateVO template = ApiDBUtils.findTemplateById(id); - if (isAdmin) { - // FIXME: we have just template id and need to get template owner from that - Account templateOwner = ApiDBUtils.findAccountById(template.getAccountId()); - if (templateOwner != null) { - templateOwnerDomain = templateOwner.getDomainId(); - } - } - TemplatePermissionsResponse response = new TemplatePermissionsResponse(); - response.setId(template.getId()); - response.setPublicTemplate(template.isPublicTemplate()); - if (isAdmin && (templateOwnerDomain != null)) { - response.setDomainId(templateOwnerDomain); - } - - response.setAccountNames(accountNames); - response.setObjectName("templatepermission"); + TemplatePermissionsResponse response = _responseGenerator.createTemplatePermissionsResponse(accountNames, id, isAdmin); response.setResponseName(getName()); this.setResponseObject(response); } diff --git a/server/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java b/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java similarity index 84% rename from server/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java rename to api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java index f9cf0181989..61e5749a086 100644 --- a/server/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java @@ -21,22 +21,24 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.storage.Storage.ImageFormat; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; public class ListTemplatePermissionsCmd extends ListTemplateOrIsoPermissionsCmd { protected String getResponseName() { return "listtemplatepermissionsresponse"; } - public String getMediaType() { + @Override + public String getMediaType() { return "template"; } - protected Logger getLogger() { + @Override + protected Logger getLogger() { return Logger.getLogger(ListTemplatePermissionsCmd.class.getName()); } - protected boolean templateIsCorrectType(VMTemplateVO template) { + protected boolean templateIsCorrectType(VirtualMachineTemplate template) { return !template.getFormat().equals(ImageFormat.ISO); } } diff --git a/server/src/com/cloud/api/commands/ListTemplatesCmd.java b/api/src/com/cloud/api/commands/ListTemplatesCmd.java similarity index 53% rename from server/src/com/cloud/api/commands/ListTemplatesCmd.java rename to api/src/com/cloud/api/commands/ListTemplatesCmd.java index 7e12d0e75b5..dd0d314d65a 100644 --- a/server/src/com/cloud/api/commands/ListTemplatesCmd.java +++ b/api/src/com/cloud/api/commands/ListTemplatesCmd.java @@ -24,21 +24,14 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.TemplateResponse; -import com.cloud.async.AsyncJobVO; -import com.cloud.dc.DataCenterVO; -import com.cloud.host.HostVO; -import com.cloud.storage.GuestOS; import com.cloud.storage.Storage; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.storage.dao.VMTemplateDao.TemplateFilter; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -120,7 +113,7 @@ public class ListTemplatesCmd extends BaseListCmd { @Override public void execute(){ - List templates = _mgr.listTemplates(this); + List templates = _mgr.listTemplates(this); TemplateFilter templateFilterObj; try { templateFilterObj = TemplateFilter.valueOf(templateFilter); @@ -131,7 +124,7 @@ public class ListTemplatesCmd extends BaseListCmd { boolean isAdmin = false; boolean isAccountSpecific = true; - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN) || (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN)) { isAdmin = true; if ((accountName == null) || (domainId == null)) { @@ -150,98 +143,11 @@ public class ListTemplatesCmd extends BaseListCmd { ListResponse response = new ListResponse(); List templateResponses = new ArrayList(); - for (VMTemplateVO template : templates) { + for (VirtualMachineTemplate template : templates) { if (!showDomr && template.getTemplateType() == Storage.TemplateType.SYSTEM) { continue; } - - List templateHostRefsForTemplate = ApiDBUtils.listTemplateHostBy(template.getId(), zoneId); - - for (VMTemplateHostVO templateHostRef : templateHostRefsForTemplate) { - if (onlyReady && templateHostRef.getDownloadState() != Status.DOWNLOADED) { - continue; - } - - TemplateResponse templateResponse = new TemplateResponse(); - templateResponse.setId(template.getId()); - templateResponse.setName(template.getName()); - templateResponse.setDisplayText(template.getDisplayText()); - templateResponse.setPublic(template.isPublicTemplate()); - templateResponse.setCreated(templateHostRef.getCreated()); - if (template.getRemoved() != null) { - templateResponse.setRemoved(template.getRemoved()); - } - - templateResponse.setReady(templateHostRef.getDownloadState()==Status.DOWNLOADED); - templateResponse.setFeatured(template.isFeatured()); - templateResponse.setPasswordEnabled(template.getEnablePassword()); - templateResponse.setCrossZones(template.isCrossZones()); - templateResponse.setFormat(template.getFormat()); - if (template.getTemplateType() != null) { - templateResponse.setTemplateType(template.getTemplateType().toString()); - } - templateResponse.setHypervisor(template.getHypervisorType().toString()); - - GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); - if (os != null) { - templateResponse.setOsTypeId(os.getId()); - templateResponse.setOsTypeName(os.getDisplayName()); - } else { - templateResponse.setOsTypeId(-1L); - templateResponse.setOsTypeName(""); - } - - // add account ID and name - Account owner = ApiDBUtils.findAccountById(template.getAccountId()); - if (owner != null) { - templateResponse.setAccount(owner.getAccountName()); - templateResponse.setDomainId(owner.getDomainId()); - templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); - } - - HostVO host = ApiDBUtils.findHostById(templateHostRef.getHostId()); - DataCenterVO datacenter = ApiDBUtils.findZoneById(host.getDataCenterId()); - - // Add the zone ID - templateResponse.setZoneId(host.getDataCenterId()); - templateResponse.setZoneName(datacenter.getName()); - - // If the user is an admin, add the template download status - if (isAdmin || account.getId() == template.getAccountId()) { - // add download status - if (templateHostRef.getDownloadState()!=Status.DOWNLOADED) { - String templateStatus = "Processing"; - if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { - if (templateHostRef.getDownloadPercent() == 100) { - templateStatus = "Installing Template"; - } else { - templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded"; - } - } else { - templateStatus = templateHostRef.getErrorString(); - } - templateResponse.setStatus(templateStatus); - } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - templateResponse.setStatus("Download Complete"); - } else { - templateResponse.setStatus("Successfully Installed"); - } - } - - long templateSize = templateHostRef.getSize(); - if (templateSize > 0) { - templateResponse.setSize(templateSize); - } - - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_template", template.getId()); - if (asyncJob != null) { - templateResponse.setJobId(asyncJob.getId()); - templateResponse.setJobStatus(asyncJob.getStatus()); - } - - templateResponse.setObjectName("template"); - templateResponses.add(templateResponse); - } + _responseGenerator.createTemplateResponse(templateResponses, template, onlyReady, zoneId, isAdmin, account); } response.setResponses(templateResponses); diff --git a/server/src/com/cloud/api/commands/ListUsersCmd.java b/api/src/com/cloud/api/commands/ListUsersCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ListUsersCmd.java rename to api/src/com/cloud/api/commands/ListUsersCmd.java index 36759da3305..4d52eaf50cf 100644 --- a/server/src/com/cloud/api/commands/ListUsersCmd.java +++ b/api/src/com/cloud/api/commands/ListUsersCmd.java @@ -24,13 +24,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.UserResponse; -import com.cloud.user.UserAccountVO; +import com.cloud.user.UserAccount; @Implementation(description="Lists user accounts", responseObject=UserResponse.class) public class ListUsersCmd extends BaseListCmd { @@ -99,11 +98,11 @@ public class ListUsersCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForUsers(this); + List result = _mgr.searchForUsers(this); ListResponse response = new ListResponse(); List userResponses = new ArrayList(); - for (UserAccountVO user : result) { - UserResponse userResponse = ApiResponseHelper.createUserResponse(user); + for (UserAccount user : result) { + UserResponse userResponse = _responseGenerator.createUserResponse(user); userResponse.setObjectName("user"); userResponses.add(userResponse); } diff --git a/server/src/com/cloud/api/commands/ListVMGroupsCmd.java b/api/src/com/cloud/api/commands/ListVMGroupsCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/ListVMGroupsCmd.java rename to api/src/com/cloud/api/commands/ListVMGroupsCmd.java index 65d1ad8f184..e44179a7518 100644 --- a/server/src/com/cloud/api/commands/ListVMGroupsCmd.java +++ b/api/src/com/cloud/api/commands/ListVMGroupsCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.InstanceGroupResponse; import com.cloud.api.response.ListResponse; -import com.cloud.vm.InstanceGroupVO; +import com.cloud.vm.InstanceGroup; @Implementation(description="Lists vm groups", responseObject=InstanceGroupResponse.class) public class ListVMGroupsCmd extends BaseListCmd { @@ -84,11 +83,11 @@ public class ListVMGroupsCmd extends BaseListCmd { @Override public void execute(){ - List groups = _mgr.searchForVmGroups(this); + List groups = _mgr.searchForVmGroups(this); ListResponse response = new ListResponse(); List responses = new ArrayList(); - for (InstanceGroupVO group : groups) { - InstanceGroupResponse groupResponse = ApiResponseHelper.createInstanceGroupResponse(group); + for (InstanceGroup group : groups) { + InstanceGroupResponse groupResponse = _responseGenerator.createInstanceGroupResponse(group); groupResponse.setObjectName("instancegroup"); responses.add(groupResponse); } diff --git a/server/src/com/cloud/api/commands/ListVMsCmd.java b/api/src/com/cloud/api/commands/ListVMsCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/ListVMsCmd.java rename to api/src/com/cloud/api/commands/ListVMsCmd.java index a8913fd463a..48e958bb4a8 100644 --- a/server/src/com/cloud/api/commands/ListVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListVMsCmd.java @@ -23,14 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.uservm.UserVm; -import com.cloud.vm.UserVmVO; @Implementation(description="List the virtual machines owned by the account.", responseObject=UserVmResponse.class) public class ListVMsCmd extends BaseListCmd { @@ -130,11 +128,11 @@ public class ListVMsCmd extends BaseListCmd { @Override public void execute(){ - List result = _mgr.searchForUserVMs(this); + List result = _mgr.searchForUserVMs(this); ListResponse response = new ListResponse(); List vmResponses = new ArrayList(); for (UserVm userVm : result) { - UserVmResponse userVmResponse = ApiResponseHelper.createUserVmResponse(userVm); + UserVmResponse userVmResponse = _responseGenerator.createUserVmResponse(userVm); if (userVmResponse != null) { userVmResponse.setObjectName("virtualmachine"); vmResponses.add(userVmResponse); diff --git a/server/src/com/cloud/api/commands/ListVlanIpRangesCmd.java b/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ListVlanIpRangesCmd.java rename to api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java index fbf94fae77e..0d8da6f2aac 100644 --- a/server/src/com/cloud/api/commands/ListVlanIpRangesCmd.java +++ b/api/src/com/cloud/api/commands/ListVlanIpRangesCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VlanIpRangeResponse; -import com.cloud.dc.VlanVO; +import com.cloud.dc.Vlan; @Implementation(description="Lists all VLAN IP ranges.", responseObject=VlanIpRangeResponse.class) public class ListVlanIpRangesCmd extends BaseListCmd { @@ -98,11 +97,11 @@ public class ListVlanIpRangesCmd extends BaseListCmd { @Override public void execute(){ - List vlans = _mgr.searchForVlans(this); + List vlans = _mgr.searchForVlans(this); ListResponse response = new ListResponse(); List vlanResponses = new ArrayList(); - for (VlanVO vlan : vlans) { - VlanIpRangeResponse vlanResponse = ApiResponseHelper.createVlanIpRangeResponse(vlan); + for (Vlan vlan : vlans) { + VlanIpRangeResponse vlanResponse = _responseGenerator.createVlanIpRangeResponse(vlan); vlanResponse.setObjectName("vlaniprange"); vlanResponses.add(vlanResponse); } diff --git a/server/src/com/cloud/api/commands/ListVolumesCmd.java b/api/src/com/cloud/api/commands/ListVolumesCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/ListVolumesCmd.java rename to api/src/com/cloud/api/commands/ListVolumesCmd.java index 16a2130fecf..43d9f4c7871 100755 --- a/server/src/com/cloud/api/commands/ListVolumesCmd.java +++ b/api/src/com/cloud/api/commands/ListVolumesCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VolumeResponse; -import com.cloud.storage.VolumeVO; +import com.cloud.storage.Volume; @Implementation(description="Lists all volumes.", responseObject=VolumeResponse.class) public class ListVolumesCmd extends BaseListCmd { @@ -119,12 +118,12 @@ public class ListVolumesCmd extends BaseListCmd { @Override public void execute(){ - List volumes = _mgr.searchForVolumes(this); + List volumes = _mgr.searchForVolumes(this); ListResponse response = new ListResponse(); List volResponses = new ArrayList(); - for (VolumeVO volume : volumes) { - VolumeResponse volResponse = ApiResponseHelper.createVolumeResponse(volume); + for (Volume volume : volumes) { + VolumeResponse volResponse = _responseGenerator.createVolumeResponse(volume); volResponse.setObjectName("volume"); volResponses.add(volResponse); } diff --git a/server/src/com/cloud/api/commands/ListVpnUsersCmd.java b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java similarity index 78% rename from server/src/com/cloud/api/commands/ListVpnUsersCmd.java rename to api/src/com/cloud/api/commands/ListVpnUsersCmd.java index f4b79f283fe..933ebc1fb7b 100644 --- a/server/src/com/cloud/api/commands/ListVpnUsersCmd.java +++ b/api/src/com/cloud/api/commands/ListVpnUsersCmd.java @@ -23,14 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.VpnUsersResponse; -import com.cloud.network.VpnUserVO; -import com.cloud.user.Account; +import com.cloud.network.VpnUser; @Implementation(description="Lists vpn users", responseObject=VpnUsersResponse.class) public class ListVpnUsersCmd extends BaseListCmd { @@ -85,24 +83,12 @@ public class ListVpnUsersCmd extends BaseListCmd { @Override public void execute(){ - List vpnUsers = _mgr.searchForVpnUsers(this); + List vpnUsers = _mgr.searchForVpnUsers(this); ListResponse response = new ListResponse(); List vpnResponses = new ArrayList(); - for (VpnUserVO vpnUser : vpnUsers) { - VpnUsersResponse vpnResponse = new VpnUsersResponse(); - vpnResponse.setId(vpnUser.getId()); - vpnResponse.setUserName(vpnUser.getUsername()); - vpnResponse.setAccountName(vpnUser.getAccountName()); - - Account accountTemp = ApiDBUtils.findAccountById(vpnUser.getAccountId()); - if (accountTemp != null) { - vpnResponse.setDomainId(accountTemp.getDomainId()); - vpnResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - - vpnResponse.setObjectName("vpnuser"); - vpnResponses.add(vpnResponse); + for (VpnUser vpnUser : vpnUsers) { + vpnResponses.add(_responseGenerator.createVpnUserResponse(vpnUser)); } response.setResponses(vpnResponses); diff --git a/server/src/com/cloud/api/commands/ListZonesByCmd.java b/api/src/com/cloud/api/commands/ListZonesByCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ListZonesByCmd.java rename to api/src/com/cloud/api/commands/ListZonesByCmd.java index 60ff15045f3..fb39cb07ced 100644 --- a/server/src/com/cloud/api/commands/ListZonesByCmd.java +++ b/api/src/com/cloud/api/commands/ListZonesByCmd.java @@ -23,13 +23,12 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseListCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.response.ListResponse; import com.cloud.api.response.ZoneResponse; -import com.cloud.dc.DataCenterVO; +import com.cloud.dc.DataCenter; @Implementation(description="Lists zones", responseObject=ZoneResponse.class) public class ListZonesByCmd extends BaseListCmd { @@ -75,11 +74,11 @@ public class ListZonesByCmd extends BaseListCmd { @Override public void execute(){ - List dataCenters = _mgr.listDataCenters(this); + List dataCenters = _mgr.listDataCenters(this); ListResponse response = new ListResponse(); List zoneResponses = new ArrayList(); - for (DataCenterVO dataCenter : dataCenters) { - ZoneResponse zoneResponse = ApiResponseHelper.createZoneResponse(dataCenter); + for (DataCenter dataCenter : dataCenters) { + ZoneResponse zoneResponse = _responseGenerator.createZoneResponse(dataCenter); zoneResponse.setObjectName("zone"); zoneResponses.add(zoneResponse); } diff --git a/server/src/com/cloud/api/commands/LockAccountCmd.java b/api/src/com/cloud/api/commands/LockAccountCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/LockAccountCmd.java rename to api/src/com/cloud/api/commands/LockAccountCmd.java index e350ddfd794..0a4831b6d24 100644 --- a/server/src/com/cloud/api/commands/LockAccountCmd.java +++ b/api/src/com/cloud/api/commands/LockAccountCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -69,7 +68,7 @@ public class LockAccountCmd extends BaseCmd { public void execute(){ Account result = _accountService.lockAccount(this); if (result != null){ - AccountResponse response = ApiResponseHelper.createAccountResponse(result); + AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/LockUserCmd.java b/api/src/com/cloud/api/commands/LockUserCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/LockUserCmd.java rename to api/src/com/cloud/api/commands/LockUserCmd.java index 757e63831e4..1a2da6bc0fd 100644 --- a/server/src/com/cloud/api/commands/LockUserCmd.java +++ b/api/src/com/cloud/api/commands/LockUserCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -62,7 +61,7 @@ public class LockUserCmd extends BaseCmd { public void execute(){ UserAccount user = _accountService.lockUser(this); if (user != null){ - UserResponse response = ApiResponseHelper.createUserResponse(user); + UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java b/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java rename to api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java index de7ea8c9885..acd4941802d 100644 --- a/server/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/PrepareForMaintenanceCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -28,7 +27,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.event.EventTypes; -import com.cloud.host.HostVO; +import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -88,9 +87,9 @@ public class PrepareForMaintenanceCmd extends BaseAsyncCmd { @Override public void execute(){ - HostVO result = _agentMgr.maintain(this); + Host result = _resourceService.maintain(this); if (result != null){ - HostResponse response = ApiResponseHelper.createHostResponse(result); + HostResponse response = _responseGenerator.createHostResponse(result); response.setResponseName("host"); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java rename to api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java index 16ac49ec7d1..04e040e4d40 100644 --- a/server/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/com/cloud/api/commands/PreparePrimaryStorageForMaintenanceCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -28,7 +27,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.StoragePoolResponse; import com.cloud.event.EventTypes; -import com.cloud.storage.StoragePoolVO; +import com.cloud.storage.StoragePool; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -67,7 +66,7 @@ public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (account != null) { return account.getId(); } @@ -87,9 +86,9 @@ public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { @Override public void execute(){ - StoragePoolVO result = _storageMgr.preparePrimaryStorageForMaintenance(this); + StoragePool result = _storageMgr.preparePrimaryStorageForMaintenance(this); if (result != null){ - StoragePoolResponse response = ApiResponseHelper.createStoragePoolResponse(result); + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); response.setResponseName("storagepool"); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java similarity index 69% rename from server/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java rename to api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java index e654c062596..85d74a6c017 100644 --- a/server/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java +++ b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java @@ -18,18 +18,13 @@ package com.cloud.api.commands; -import java.util.Date; - import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiSerializerHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ResponseObject; import com.cloud.api.response.AsyncJobResponse; -import com.cloud.async.AsyncJobResult; @Implementation(description="Retrieves the current status of asynchronous job.", responseObject=AsyncJobResponse.class) public class QueryAsyncJobResultCmd extends BaseCmd { @@ -63,24 +58,7 @@ public class QueryAsyncJobResultCmd extends BaseCmd { @Override public void execute(){ - AsyncJobResult result = _asyncMgr.queryAsyncJobResult(this); - AsyncJobResponse response = new AsyncJobResponse(); - response.setId(result.getJobId()); - response.setJobStatus(result.getJobStatus()); - response.setJobProcStatus(result.getProcessStatus()); - response.setJobResultCode(result.getResultCode()); - response.setJobResult((ResponseObject)ApiSerializerHelper.fromSerializedString(result.getResult())); - - Object resultObject = result.getResultObject(); - if (resultObject != null) { - Class clz = resultObject.getClass(); - if(clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) { - response.setJobResultType("text"); - } else { - response.setJobResultType("object"); - } - } - + AsyncJobResponse response = _responseGenerator.queryJobResult(this); response.setResponseName(getName()); this.setResponseObject(response); } diff --git a/server/src/com/cloud/api/commands/RebootRouterCmd.java b/api/src/com/cloud/api/commands/RebootRouterCmd.java similarity index 88% rename from server/src/com/cloud/api/commands/RebootRouterCmd.java rename to api/src/com/cloud/api/commands/RebootRouterCmd.java index 04172c7a75f..76a75b942ad 100644 --- a/server/src/com/cloud/api/commands/RebootRouterCmd.java +++ b/api/src/com/cloud/api/commands/RebootRouterCmd.java @@ -21,8 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -30,9 +28,8 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.DomainRouterResponse; import com.cloud.event.EventTypes; +import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; -import com.cloud.vm.DomainRouter; -import com.cloud.vm.DomainRouterVO; @Implementation(description="Starts a router.", responseObject=DomainRouterResponse.class) public class RebootRouterCmd extends BaseAsyncCmd { @@ -65,7 +62,7 @@ public class RebootRouterCmd extends BaseAsyncCmd { @Override public long getAccountId() { - DomainRouterVO router = ApiDBUtils.findDomainRouterById(getId()); + VirtualRouter router = _entityMgr.findById(VirtualRouter.class, getId()); if (router != null) { return router.getAccountId(); } @@ -86,9 +83,9 @@ public class RebootRouterCmd extends BaseAsyncCmd { @Override public void execute(){ - DomainRouter result = _routerMgr.rebootRouter(this); + VirtualRouter result = _routerService.rebootRouter(this); if (result != null){ - DomainRouterResponse response = ApiResponseHelper.createDomainRouterResponse(result); + DomainRouterResponse response = _responseGenerator.createDomainRouterResponse(result); response.setResponseName("router"); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/RebootSystemVmCmd.java b/api/src/com/cloud/api/commands/RebootSystemVmCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/RebootSystemVmCmd.java rename to api/src/com/cloud/api/commands/RebootSystemVmCmd.java index e930b731ff5..f3c6656f94e 100644 --- a/server/src/com/cloud/api/commands/RebootSystemVmCmd.java +++ b/api/src/com/cloud/api/commands/RebootSystemVmCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -87,7 +86,7 @@ public class RebootSystemVmCmd extends BaseAsyncCmd { public void execute(){ VirtualMachine result = _mgr.rebootSystemVM(this); if (result != null) { - SystemVmResponse response = ApiResponseHelper.createSystemVmResponse(result); + SystemVmResponse response = _responseGenerator.createSystemVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/RebootVMCmd.java b/api/src/com/cloud/api/commands/RebootVMCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/RebootVMCmd.java rename to api/src/com/cloud/api/commands/RebootVMCmd.java index 38a9010af38..4baa2470ff2 100644 --- a/server/src/com/cloud/api/commands/RebootVMCmd.java +++ b/api/src/com/cloud/api/commands/RebootVMCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -63,7 +61,7 @@ public class RebootVMCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getId()); + UserVm vm = _responseGenerator.findUserVmById(getId()); if (vm != null) { return vm.getAccountId(); } @@ -85,7 +83,7 @@ public class RebootVMCmd extends BaseAsyncCmd { public void execute(){ UserVm result = _userVmService.rebootVirtualMachine(this); if (result !=null){ - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/ReconnectHostCmd.java b/api/src/com/cloud/api/commands/ReconnectHostCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/ReconnectHostCmd.java rename to api/src/com/cloud/api/commands/ReconnectHostCmd.java index 703e9a150ac..61aa64194e2 100644 --- a/server/src/com/cloud/api/commands/ReconnectHostCmd.java +++ b/api/src/com/cloud/api/commands/ReconnectHostCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -30,7 +29,7 @@ import com.cloud.api.ServerApiException; import com.cloud.api.response.HostResponse; import com.cloud.event.EventTypes; import com.cloud.exception.AgentUnavailableException; -import com.cloud.host.HostVO; +import com.cloud.host.Host; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -91,9 +90,9 @@ public class ReconnectHostCmd extends BaseAsyncCmd { @Override public void execute(){ try { - HostVO result = _agentMgr.reconnectHost(this); + Host result = _resourceService.reconnectHost(this); if (result != null){ - HostResponse response = ApiResponseHelper.createHostResponse(result); + HostResponse response = _responseGenerator.createHostResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/RecoverVMCmd.java b/api/src/com/cloud/api/commands/RecoverVMCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/RecoverVMCmd.java rename to api/src/com/cloud/api/commands/RecoverVMCmd.java index 6b9c7c8680c..cc7b0eb7d5c 100644 --- a/server/src/com/cloud/api/commands/RecoverVMCmd.java +++ b/api/src/com/cloud/api/commands/RecoverVMCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -65,7 +64,7 @@ public class RecoverVMCmd extends BaseCmd { try { UserVm result = _userVmService.recoverVirtualMachine(this); if (result != null){ - UserVmResponse recoverVmResponse = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse recoverVmResponse = _responseGenerator.createUserVmResponse(result); recoverVmResponse.setResponseName(getName()); this.setResponseObject(recoverVmResponse); } else { diff --git a/server/src/com/cloud/api/commands/RegisterCmd.java b/api/src/com/cloud/api/commands/RegisterCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/RegisterCmd.java rename to api/src/com/cloud/api/commands/RegisterCmd.java diff --git a/server/src/com/cloud/api/commands/RegisterIsoCmd.java b/api/src/com/cloud/api/commands/RegisterIsoCmd.java similarity index 64% rename from server/src/com/cloud/api/commands/RegisterIsoCmd.java rename to api/src/com/cloud/api/commands/RegisterIsoCmd.java index 928bbc0a3ea..811b0a458e2 100755 --- a/server/src/com/cloud/api/commands/RegisterIsoCmd.java +++ b/api/src/com/cloud/api/commands/RegisterIsoCmd.java @@ -17,25 +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.ApiDBUtils; 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.ListResponse; import com.cloud.api.response.TemplateResponse; -import com.cloud.dc.DataCenterVO; import com.cloud.exception.ResourceAllocationException; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.user.Account; +import com.cloud.template.VirtualMachineTemplate; @Implementation(responseObject=TemplateResponse.class, description="Registers an existing ISO into the Cloud.com Cloud.") public class RegisterIsoCmd extends BaseCmd { @@ -133,52 +125,10 @@ public class RegisterIsoCmd extends BaseCmd { @Override public void execute(){ try { - VMTemplateVO template = _templateMgr.registerIso(this); + VirtualMachineTemplate template = _templateService.registerIso(this); if (template != null) { - ListResponse response = new ListResponse(); - List responses = new ArrayList(); - List zones = null; - - if ((zoneId != null) && (zoneId != -1)) { - zones = new ArrayList(); - zones.add(ApiDBUtils.findZoneById(zoneId)); - } else { - zones = ApiDBUtils.listZones(); - } - - for (DataCenterVO zone : zones) { - TemplateResponse templateResponse = new TemplateResponse(); - templateResponse.setId(template.getId()); - templateResponse.setName(template.getName()); - templateResponse.setDisplayText(template.getDisplayText()); - templateResponse.setPublic(template.isPublicTemplate()); - - VMTemplateHostVO isoHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), zone.getId()); - if (isoHostRef != null) { - templateResponse.setCreated(isoHostRef.getCreated()); - templateResponse.setReady(isoHostRef.getDownloadState() == Status.DOWNLOADED); - } - - templateResponse.setFeatured(template.isFeatured()); - templateResponse.setBootable(template.isBootable()); - templateResponse.setOsTypeId(template.getGuestOSId()); - templateResponse.setOsTypeName(ApiDBUtils.findGuestOSById(template.getGuestOSId()).getDisplayName()); - - Account owner = ApiDBUtils.findAccountById(template.getAccountId()); - if (owner != null) { - templateResponse.setAccountId(owner.getId()); - templateResponse.setAccount(owner.getAccountName()); - templateResponse.setDomainId(owner.getDomainId()); - } - - templateResponse.setZoneId(zone.getId()); - templateResponse.setZoneName(zone.getName()); - templateResponse.setObjectName("iso"); - - responses.add(templateResponse); - } + ListResponse response = _responseGenerator.createIsoResponses(template, zoneId); response.setResponseName(getName()); - response.setResponses(responses); this.setResponseObject(response); } else { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register iso"); diff --git a/server/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java b/api/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java rename to api/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java index bedae5ac0f9..21cc99f0d8c 100644 --- a/server/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java +++ b/api/src/com/cloud/api/commands/RegisterPreallocatedLunCmd.java @@ -18,13 +18,11 @@ package com.cloud.api.commands; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.PreallocatedLunResponse; -import com.cloud.storage.preallocatedlun.PreallocatedLunVO; //TODO - add description to @Implementation @Implementation(responseObject=PreallocatedLunResponse.class) @@ -96,9 +94,9 @@ public class RegisterPreallocatedLunCmd extends BaseCmd { @Override public void execute(){ - PreallocatedLunVO result = _mgr.registerPreallocatedLun(this); + Object result = _mgr.registerPreallocatedLun(this); if (result != null){ - PreallocatedLunResponse response = ApiResponseHelper.createPreallocatedLunResponse(result); + PreallocatedLunResponse response = _responseGenerator.createPreallocatedLunResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/RegisterTemplateCmd.java b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java similarity index 65% rename from server/src/com/cloud/api/commands/RegisterTemplateCmd.java rename to api/src/com/cloud/api/commands/RegisterTemplateCmd.java index b020334d152..added37a6d8 100755 --- a/server/src/com/cloud/api/commands/RegisterTemplateCmd.java +++ b/api/src/com/cloud/api/commands/RegisterTemplateCmd.java @@ -18,26 +18,18 @@ package com.cloud.api.commands; import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; 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.ListResponse; import com.cloud.api.response.TemplateResponse; -import com.cloud.dc.DataCenterVO; import com.cloud.exception.ResourceAllocationException; -import com.cloud.storage.GuestOS; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.user.Account; +import com.cloud.template.VirtualMachineTemplate; @Implementation(description="Registers an existing template into the Cloud.com cloud. ", responseObject=TemplateResponse.class) public class RegisterTemplateCmd extends BaseCmd { @@ -163,63 +155,10 @@ public class RegisterTemplateCmd extends BaseCmd { @Override public void execute(){ try { - VMTemplateVO template = _templateMgr.registerTemplate(this); + VirtualMachineTemplate template = _templateService.registerTemplate(this); if (template != null){ - ListResponse response = new ListResponse(); - List responses = new ArrayList(); - List zones = null; - - if ((zoneId != null) && (zoneId != -1)) { - zones = new ArrayList(); - zones.add(ApiDBUtils.findZoneById(zoneId)); - } else { - zones = ApiDBUtils.listZones(); - } - - for (DataCenterVO zone : zones) { - TemplateResponse templateResponse = new TemplateResponse(); - templateResponse.setId(template.getId()); - templateResponse.setName(template.getName()); - templateResponse.setDisplayText(template.getDisplayText()); - templateResponse.setPublic(template.isPublicTemplate()); - templateResponse.setCrossZones(template.isCrossZones()); - - VMTemplateHostVO isoHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), zone.getId()); - if (isoHostRef != null) { - templateResponse.setCreated(isoHostRef.getCreated()); - templateResponse.setReady(isoHostRef.getDownloadState() == Status.DOWNLOADED); - } - - templateResponse.setFeatured(template.isFeatured()); - templateResponse.setPasswordEnabled(template.getEnablePassword()); - templateResponse.setFormat(template.getFormat()); - templateResponse.setStatus("Processing"); - - GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); - if (os != null) { - templateResponse.setOsTypeId(os.getId()); - templateResponse.setOsTypeName(os.getDisplayName()); - } else { - templateResponse.setOsTypeId(-1L); - templateResponse.setOsTypeName(""); - } - - Account owner = ApiDBUtils.findAccountById(template.getAccountId()); - if (owner != null) { - templateResponse.setAccountId(owner.getId()); - templateResponse.setAccount(owner.getAccountName()); - templateResponse.setDomainId(owner.getDomainId()); - } - - templateResponse.setZoneId(zone.getId()); - templateResponse.setZoneName(zone.getName()); - templateResponse.setHypervisor(template.getHypervisorType().toString()); - templateResponse.setObjectName("template"); - - responses.add(templateResponse); - } + ListResponse response = _responseGenerator.createTemplateResponse2(template, zoneId); response.setResponseName(getName()); - response.setResponses(responses); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java rename to api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java index 92854bd957d..b5ab094b8ca 100644 --- a/server/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/RemoveFromLoadBalancerRuleCmd.java @@ -23,7 +23,6 @@ import java.util.List; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -31,7 +30,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.SuccessResponse; import com.cloud.event.EventTypes; -import com.cloud.network.LoadBalancerVO; +import com.cloud.network.LoadBalancer; import com.cloud.user.Account; import com.cloud.utils.StringUtils; @@ -81,7 +80,7 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public long getAccountId() { - LoadBalancerVO lb = ApiDBUtils.findLoadBalancerById(getId()); + LoadBalancer lb = _entityMgr.findById(LoadBalancer.class, getId()); if (lb == null) { return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked } @@ -106,7 +105,7 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public void execute(){ - boolean result = _networkMgr.removeFromLoadBalancer(this); + boolean result = _networkService.removeFromLoadBalancer(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/RemoveVpnUserCmd.java b/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/RemoveVpnUserCmd.java rename to api/src/com/cloud/api/commands/RemoveVpnUserCmd.java index 8793760d4ec..b9c71639e76 100644 --- a/server/src/com/cloud/api/commands/RemoveVpnUserCmd.java +++ b/api/src/com/cloud/api/commands/RemoveVpnUserCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -76,16 +75,17 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - public String getName() { + @Override + public String getName() { return s_name; } @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } @@ -113,7 +113,7 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { @Override public void execute(){ try { - boolean result = _networkMgr.removeVpnUser(this); + boolean result = _networkService.removeVpnUser(this); if (result) { SuccessResponse response = new SuccessResponse(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/ResetVMPasswordCmd.java b/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ResetVMPasswordCmd.java rename to api/src/com/cloud/api/commands/ResetVMPasswordCmd.java index 2278beec4a9..040ede9ce76 100644 --- a/server/src/com/cloud/api/commands/ResetVMPasswordCmd.java +++ b/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java @@ -17,11 +17,11 @@ */ package com.cloud.api.commands; +import java.util.Random; + import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,7 +29,6 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.UserVmResponse; import com.cloud.event.EventTypes; -import com.cloud.exception.StorageUnavailableException; import com.cloud.user.Account; import com.cloud.uservm.UserVm; @@ -79,7 +78,7 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getId()); + UserVm vm = _responseGenerator.findUserVmById(getId()); if (vm != null) { return vm.getAccountId(); } @@ -97,12 +96,13 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { return "resetting password for vm: " + getId(); } + Random _rand = new Random(System.currentTimeMillis()); @Override public void execute(){ - password = _mgr.generateRandomPassword(); + password = Long.toHexString(_rand.nextLong()); UserVm result = _userVmService.resetVMPassword(this, password); if (result != null){ - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/RevokeNetworkGroupIngressCmd.java b/api/src/com/cloud/api/commands/RevokeNetworkGroupIngressCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/RevokeNetworkGroupIngressCmd.java rename to api/src/com/cloud/api/commands/RevokeNetworkGroupIngressCmd.java index ed452a465e4..28def4b8c33 100644 --- a/server/src/com/cloud/api/commands/RevokeNetworkGroupIngressCmd.java +++ b/api/src/com/cloud/api/commands/RevokeNetworkGroupIngressCmd.java @@ -8,7 +8,6 @@ import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -129,10 +128,10 @@ public class RevokeNetworkGroupIngressCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if ((account == null) || isAdmin(account.getType())) { if ((domainId != null) && (accountName != null)) { - Account userAccount = ApiDBUtils.findAccountByNameDomain(accountName, domainId); + Account userAccount = _responseGenerator.findAccountByNameDomain(accountName, domainId); if (userAccount != null) { return userAccount.getId(); } diff --git a/server/src/com/cloud/api/commands/StartRouterCmd.java b/api/src/com/cloud/api/commands/StartRouterCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/StartRouterCmd.java rename to api/src/com/cloud/api/commands/StartRouterCmd.java index 966f819d1c7..db2b83c3a87 100644 --- a/server/src/com/cloud/api/commands/StartRouterCmd.java +++ b/api/src/com/cloud/api/commands/StartRouterCmd.java @@ -21,8 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -33,9 +31,9 @@ import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -import com.cloud.vm.DomainRouter; @Implementation(responseObject=DomainRouterResponse.class, description="Starts a router.") @@ -74,7 +72,7 @@ public class StartRouterCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getId()); + UserVm vm = _entityMgr.findById(UserVm.class, getId()); if (vm != null) { return vm.getAccountId(); } @@ -94,9 +92,9 @@ public class StartRouterCmd extends BaseAsyncCmd { @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{ - DomainRouter result = _routerMgr.startRouter(this); + VirtualRouter result = _routerService.startRouter(this); if (result != null){ - DomainRouterResponse routerResponse = ApiResponseHelper.createDomainRouterResponse(result); + DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(result); routerResponse.setResponseName(getName()); this.setResponseObject(routerResponse); } else { diff --git a/server/src/com/cloud/api/commands/StartSystemVMCmd.java b/api/src/com/cloud/api/commands/StartSystemVMCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/StartSystemVMCmd.java rename to api/src/com/cloud/api/commands/StartSystemVMCmd.java index 4d11a02536c..3250935bb86 100644 --- a/server/src/com/cloud/api/commands/StartSystemVMCmd.java +++ b/api/src/com/cloud/api/commands/StartSystemVMCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -91,7 +90,7 @@ public class StartSystemVMCmd extends BaseAsyncCmd { public void execute(){ VirtualMachine instance = _mgr.startSystemVM(this); if (instance != null) { - SystemVmResponse response = ApiResponseHelper.createSystemVmResponse(instance); + SystemVmResponse response = _responseGenerator.createSystemVmResponse(instance); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/StartVMCmd.java b/api/src/com/cloud/api/commands/StartVMCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/StartVMCmd.java rename to api/src/com/cloud/api/commands/StartVMCmd.java index 0b4ed19cd61..928ee70f921 100644 --- a/server/src/com/cloud/api/commands/StartVMCmd.java +++ b/api/src/com/cloud/api/commands/StartVMCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -73,7 +71,7 @@ public class StartVMCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getId()); + UserVm vm = _responseGenerator.findUserVmById(getId()); if (vm != null) { return vm.getAccountId(); } @@ -96,7 +94,7 @@ public class StartVMCmd extends BaseAsyncCmd { try { UserVm result = _userVmService.startVirtualMachine(this); if (result != null){ - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/StopRouterCmd.java b/api/src/com/cloud/api/commands/StopRouterCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/StopRouterCmd.java rename to api/src/com/cloud/api/commands/StopRouterCmd.java index c895edb0f2c..3d60300afd7 100644 --- a/server/src/com/cloud/api/commands/StopRouterCmd.java +++ b/api/src/com/cloud/api/commands/StopRouterCmd.java @@ -21,8 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -32,9 +30,9 @@ import com.cloud.api.response.DomainRouterResponse; import com.cloud.event.EventTypes; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.router.VirtualRouter; import com.cloud.user.Account; import com.cloud.uservm.UserVm; -import com.cloud.vm.DomainRouter; @Implementation(description="Stops a router.", responseObject=DomainRouterResponse.class) @@ -68,7 +66,7 @@ public class StopRouterCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getId()); + UserVm vm = _entityMgr.findById(UserVm.class, getId()); if (vm != null) { return vm.getAccountId(); } @@ -88,9 +86,9 @@ public class StopRouterCmd extends BaseAsyncCmd { @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException{ - DomainRouter result = _routerMgr.stopRouter(this); + VirtualRouter result = _routerService.stopRouter(this); if (result != null){ - DomainRouterResponse response =ApiResponseHelper.createDomainRouterResponse(result); + DomainRouterResponse response =_responseGenerator.createDomainRouterResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/StopSystemVmCmd.java b/api/src/com/cloud/api/commands/StopSystemVmCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/StopSystemVmCmd.java rename to api/src/com/cloud/api/commands/StopSystemVmCmd.java index 36a06adfc14..7b3bdb7ad67 100644 --- a/server/src/com/cloud/api/commands/StopSystemVmCmd.java +++ b/api/src/com/cloud/api/commands/StopSystemVmCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -31,7 +30,7 @@ import com.cloud.api.response.SystemVmResponse; import com.cloud.event.EventTypes; import com.cloud.user.Account; import com.cloud.user.UserContext; -import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; @Implementation(description="Stops a system VM.", responseObject=SystemVmResponse.class) public class StopSystemVmCmd extends BaseAsyncCmd { @@ -65,7 +64,7 @@ public class StopSystemVmCmd extends BaseAsyncCmd { @Override public long getAccountId() { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (account != null) { return account.getId(); } @@ -85,9 +84,9 @@ public class StopSystemVmCmd extends BaseAsyncCmd { @Override public void execute(){ - VMInstanceVO result = _mgr.stopSystemVM(this); + VirtualMachine result = _mgr.stopSystemVM(this); if (result != null) { - SystemVmResponse response = ApiResponseHelper.createSystemVmResponse(result); + SystemVmResponse response = _responseGenerator.createSystemVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/StopVMCmd.java b/api/src/com/cloud/api/commands/StopVMCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/StopVMCmd.java rename to api/src/com/cloud/api/commands/StopVMCmd.java index 256444223f2..5de3b1768e3 100644 --- a/server/src/com/cloud/api/commands/StopVMCmd.java +++ b/api/src/com/cloud/api/commands/StopVMCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -69,7 +67,7 @@ public class StopVMCmd extends BaseAsyncCmd { @Override public long getAccountId() { - UserVm vm = ApiDBUtils.findUserVmById(getId()); + UserVm vm = _responseGenerator.findUserVmById(getId()); if (vm != null) { return vm.getAccountId(); } @@ -91,7 +89,7 @@ public class StopVMCmd extends BaseAsyncCmd { public void execute() throws ServerApiException, ConcurrentOperationException{ UserVm result = _userVmService.stopVirtualMachine(this); if (result != null) { - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateAccountCmd.java b/api/src/com/cloud/api/commands/UpdateAccountCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/UpdateAccountCmd.java rename to api/src/com/cloud/api/commands/UpdateAccountCmd.java index 7024fdde276..49d8ed0575d 100644 --- a/server/src/com/cloud/api/commands/UpdateAccountCmd.java +++ b/api/src/com/cloud/api/commands/UpdateAccountCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -75,7 +74,7 @@ public class UpdateAccountCmd extends BaseCmd{ public void execute(){ Account result = _accountService.updateAccount(this); if (result != null){ - AccountResponse response = ApiResponseHelper.createAccountResponse(result); + AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateCfgCmd.java b/api/src/com/cloud/api/commands/UpdateCfgCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/UpdateCfgCmd.java rename to api/src/com/cloud/api/commands/UpdateCfgCmd.java index 5523613666a..4b08ed05bd0 100644 --- a/server/src/com/cloud/api/commands/UpdateCfgCmd.java +++ b/api/src/com/cloud/api/commands/UpdateCfgCmd.java @@ -21,14 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.ConfigurationResponse; import com.cloud.configuration.Configuration; -import com.cloud.configuration.ConfigurationVO; @Implementation(description="Updates a configuration.", responseObject=ConfigurationResponse.class) public class UpdateCfgCmd extends BaseCmd { @@ -61,6 +59,7 @@ public class UpdateCfgCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } @@ -69,7 +68,7 @@ public class UpdateCfgCmd extends BaseCmd { public void execute(){ Configuration cfg = _configService.updateConfiguration(this); if (cfg != null) { - ConfigurationResponse response = ApiResponseHelper.createConfigurationResponse((ConfigurationVO)cfg); + ConfigurationResponse response = _responseGenerator.createConfigurationResponse(cfg); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java rename to api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java index d2805b32cdc..211b6082e7f 100644 --- a/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java @@ -20,14 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.DiskOfferingResponse; import com.cloud.offering.DiskOffering; -import com.cloud.storage.DiskOfferingVO; @Implementation(description="Updates a disk offering.", responseObject=DiskOfferingResponse.class) public class UpdateDiskOfferingCmd extends BaseCmd{ @@ -83,7 +81,7 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ public void execute(){ DiskOffering result = _configService.updateDiskOffering(this); if (result != null){ - DiskOfferingResponse response = ApiResponseHelper.createDiskOfferingResponse((DiskOfferingVO)result); + DiskOfferingResponse response = _responseGenerator.createDiskOfferingResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateDomainCmd.java b/api/src/com/cloud/api/commands/UpdateDomainCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/UpdateDomainCmd.java rename to api/src/com/cloud/api/commands/UpdateDomainCmd.java index 6d8958c4fd6..aae39c6bcaf 100644 --- a/server/src/com/cloud/api/commands/UpdateDomainCmd.java +++ b/api/src/com/cloud/api/commands/UpdateDomainCmd.java @@ -20,13 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.DomainResponse; -import com.cloud.domain.DomainVO; +import com.cloud.domain.Domain; @Implementation(description="Updates a domain with a new name", responseObject=DomainResponse.class) public class UpdateDomainCmd extends BaseCmd { @@ -66,9 +65,9 @@ public class UpdateDomainCmd extends BaseCmd { @Override public void execute(){ - DomainVO domain = _mgr.updateDomain(this); + Domain domain = _mgr.updateDomain(this); if (domain != null) { - DomainResponse response = ApiResponseHelper.createDomainResponse(domain); + DomainResponse response = _responseGenerator.createDomainResponse(domain); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateHostCmd.java b/api/src/com/cloud/api/commands/UpdateHostCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/UpdateHostCmd.java rename to api/src/com/cloud/api/commands/UpdateHostCmd.java index d894e57ec05..3ec4f816328 100644 --- a/server/src/com/cloud/api/commands/UpdateHostCmd.java +++ b/api/src/com/cloud/api/commands/UpdateHostCmd.java @@ -21,13 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.HostResponse; -import com.cloud.host.HostVO; +import com.cloud.host.Host; @Implementation(description="Updates a host.", responseObject=HostResponse.class) public class UpdateHostCmd extends BaseCmd { @@ -71,9 +70,9 @@ public class UpdateHostCmd extends BaseCmd { @Override public void execute(){ - HostVO result = _agentMgr.updateHost(this); + Host result = _resourceService.updateHost(this); if (result != null) { - HostResponse hostResponse = ApiResponseHelper.createHostResponse(result); + HostResponse hostResponse = _responseGenerator.createHostResponse(result); hostResponse.setResponseName(getName()); this.setResponseObject(hostResponse); } else { diff --git a/server/src/com/cloud/api/commands/UpdateIsoCmd.java b/api/src/com/cloud/api/commands/UpdateIsoCmd.java similarity index 73% rename from server/src/com/cloud/api/commands/UpdateIsoCmd.java rename to api/src/com/cloud/api/commands/UpdateIsoCmd.java index 47a9b52e4d5..eba2135a761 100755 --- a/server/src/com/cloud/api/commands/UpdateIsoCmd.java +++ b/api/src/com/cloud/api/commands/UpdateIsoCmd.java @@ -19,12 +19,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.ServerApiException; import com.cloud.api.response.TemplateResponse; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; @Implementation(description="Updates an ISO file.", responseObject=TemplateResponse.class) public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { @@ -35,10 +34,12 @@ public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// + @Override public Boolean isPasswordEnabled() { return null; } + @Override public String getFormat() { return null; } @@ -54,19 +55,9 @@ public class UpdateIsoCmd extends UpdateTemplateOrIsoCmd { @Override public void execute(){ - VMTemplateVO result = _mgr.updateTemplate(this); - TemplateResponse response = new TemplateResponse(); + VirtualMachineTemplate result = _mgr.updateTemplate(this); if (result != null) { - response.setId(result.getId()); - 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()); - response.setBootable(result.isBootable()); - response.setObjectName("iso"); + TemplateResponse response = _responseGenerator.createIsoResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java rename to api/src/com/cloud/api/commands/UpdateIsoPermissionsCmd.java diff --git a/server/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java b/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java similarity index 89% rename from server/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java rename to api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java index c7decac5f37..35c0b3c4799 100644 --- a/server/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java +++ b/api/src/com/cloud/api/commands/UpdateLoadBalancerRuleCmd.java @@ -20,8 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -29,7 +27,7 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.LoadBalancerResponse; import com.cloud.event.EventTypes; -import com.cloud.network.LoadBalancerVO; +import com.cloud.network.LoadBalancer; import com.cloud.user.Account; @Implementation(description="Updates load balancer", responseObject=LoadBalancerResponse.class) @@ -91,7 +89,7 @@ public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public long getAccountId() { - LoadBalancerVO lb = ApiDBUtils.findLoadBalancerById(getId()); + LoadBalancer lb = _entityMgr.findById(LoadBalancer.class, getId()); if (lb == null) { return Account.ACCOUNT_ID_SYSTEM; // bad id given, parent this command to SYSTEM so ERROR events are tracked } @@ -110,9 +108,9 @@ public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { @Override public void execute(){ - LoadBalancerVO result = _networkMgr.updateLoadBalancerRule(this); + LoadBalancer result = _networkService.updateLoadBalancerRule(this); if (result != null){ - LoadBalancerResponse response = ApiResponseHelper.createLoadBalancerResponse(result); + LoadBalancerResponse response = _responseGenerator.createLoadBalancerResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdatePodCmd.java b/api/src/com/cloud/api/commands/UpdatePodCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/UpdatePodCmd.java rename to api/src/com/cloud/api/commands/UpdatePodCmd.java index 8b21a8dd10c..bd7c858f65f 100644 --- a/server/src/com/cloud/api/commands/UpdatePodCmd.java +++ b/api/src/com/cloud/api/commands/UpdatePodCmd.java @@ -21,13 +21,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.PodResponse; -import com.cloud.dc.HostPodVO; import com.cloud.dc.Pod; @Implementation(description="Updates a Pod.", responseObject=PodResponse.class) @@ -90,6 +88,7 @@ public class UpdatePodCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } @@ -98,7 +97,7 @@ public class UpdatePodCmd extends BaseCmd { public void execute(){ Pod result = _configService.editPod(this); if (result != null) { - PodResponse response = ApiResponseHelper.createPodResponse((HostPodVO)result); + PodResponse response = _responseGenerator.createPodResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java b/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java similarity index 88% rename from server/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java rename to api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java index 49b3650e65e..c676b4f3b62 100644 --- a/server/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/UpdatePortForwardingRuleCmd.java @@ -3,8 +3,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; @@ -12,8 +10,8 @@ import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.FirewallRuleResponse; import com.cloud.event.EventTypes; -import com.cloud.network.FirewallRuleVO; -import com.cloud.network.IPAddressVO; +import com.cloud.network.IpAddress; +import com.cloud.network.rules.FirewallRule; 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.") @@ -82,7 +80,7 @@ public class UpdatePortForwardingRuleCmd extends BaseAsyncCmd { @Override public long getAccountId() { - IPAddressVO addr = ApiDBUtils.findIpAddressById(getPublicIp()); + IpAddress addr = _entityMgr.findById(IpAddress.class, getPublicIp()); if (addr != null) { return addr.getAccountId(); } @@ -103,9 +101,9 @@ public class UpdatePortForwardingRuleCmd extends BaseAsyncCmd { @Override public void execute(){ - FirewallRuleVO result = _mgr.updatePortForwardingRule(this); + FirewallRule result = _mgr.updatePortForwardingRule(this); if (result != null) { - FirewallRuleResponse response = ApiResponseHelper.createFirewallRuleResponse(result); + FirewallRuleResponse response = _responseGenerator.createFirewallRuleResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateResourceLimitCmd.java b/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/UpdateResourceLimitCmd.java rename to api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java index 6f318e7cc45..7de7444f03e 100644 --- a/server/src/com/cloud/api/commands/UpdateResourceLimitCmd.java +++ b/api/src/com/cloud/api/commands/UpdateResourceLimitCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -89,7 +88,7 @@ public class UpdateResourceLimitCmd extends BaseCmd { public void execute(){ ResourceLimit result = _accountService.updateResourceLimit(this); if (result != null){ - ResourceLimitResponse response = ApiResponseHelper.createResourceLimitResponse(result); + ResourceLimitResponse response = _responseGenerator.createResourceLimitResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java b/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java rename to api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java index 24fd7f5e189..cd765e6276f 100644 --- a/server/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java +++ b/api/src/com/cloud/api/commands/UpdateServiceOfferingCmd.java @@ -20,14 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.ServiceOfferingResponse; import com.cloud.offering.ServiceOffering; -import com.cloud.service.ServiceOfferingVO; @Implementation(description="Updates a service offering.", responseObject=ServiceOfferingResponse.class) public class UpdateServiceOfferingCmd extends BaseCmd { @@ -97,7 +95,7 @@ public class UpdateServiceOfferingCmd extends BaseCmd { public void execute(){ ServiceOffering result = _configService.updateServiceOffering(this); if (result != null){ - ServiceOfferingResponse response = ApiResponseHelper.createServiceOfferingResponse((ServiceOfferingVO)result); + ServiceOfferingResponse response = _responseGenerator.createServiceOfferingResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateStoragePoolCmd.java b/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/UpdateStoragePoolCmd.java rename to api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java index a3f22edc0ce..9ccd59181b8 100644 --- a/server/src/com/cloud/api/commands/UpdateStoragePoolCmd.java +++ b/api/src/com/cloud/api/commands/UpdateStoragePoolCmd.java @@ -21,13 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.StoragePoolResponse; -import com.cloud.storage.StoragePoolVO; +import com.cloud.storage.StoragePool; @Implementation(description="Updates a storage pool.", responseObject=StoragePoolResponse.class) public class UpdateStoragePoolCmd extends BaseCmd { @@ -68,9 +67,9 @@ public class UpdateStoragePoolCmd extends BaseCmd { @Override public void execute(){ - StoragePoolVO result = _storageMgr.updateStoragePool(this); + StoragePool result = _storageMgr.updateStoragePool(this); if (result != null){ - StoragePoolResponse response = ApiResponseHelper.createStoragePoolResponse(result); + StoragePoolResponse response = _responseGenerator.createStoragePoolResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateTemplateCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateCmd.java similarity index 73% rename from server/src/com/cloud/api/commands/UpdateTemplateCmd.java rename to api/src/com/cloud/api/commands/UpdateTemplateCmd.java index b23c5bfa783..3dbf9d4ced3 100755 --- a/server/src/com/cloud/api/commands/UpdateTemplateCmd.java +++ b/api/src/com/cloud/api/commands/UpdateTemplateCmd.java @@ -19,12 +19,11 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; -import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.ServerApiException; import com.cloud.api.response.TemplateResponse; -import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate; @Implementation(description="Updates attributes of a template.", responseObject=TemplateResponse.class) public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { @@ -35,6 +34,7 @@ public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// + @Override public Boolean isBootable() { return null; } @@ -55,19 +55,9 @@ public class UpdateTemplateCmd extends UpdateTemplateOrIsoCmd { @Override public void execute(){ - VMTemplateVO result = _mgr.updateTemplate(this); - TemplateResponse response = new TemplateResponse(); + VirtualMachineTemplate result = _mgr.updateTemplate(this); if (result != null) { - response.setId(result.getId()); - 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()); - response.setPasswordEnabled(result.getEnablePassword()); - response.setCrossZones(result.isCrossZones()); + TemplateResponse response = _responseGenerator.createIsoResponse(result); response.setObjectName("template"); response.setResponseName(getName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java rename to api/src/com/cloud/api/commands/UpdateTemplateOrIsoCmd.java diff --git a/server/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java rename to api/src/com/cloud/api/commands/UpdateTemplateOrIsoPermissionsCmd.java diff --git a/server/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java b/api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java rename to api/src/com/cloud/api/commands/UpdateTemplatePermissionsCmd.java diff --git a/server/src/com/cloud/api/commands/UpdateUserCmd.java b/api/src/com/cloud/api/commands/UpdateUserCmd.java similarity index 97% rename from server/src/com/cloud/api/commands/UpdateUserCmd.java rename to api/src/com/cloud/api/commands/UpdateUserCmd.java index dc2c2fe87f1..e614bd33009 100644 --- a/server/src/com/cloud/api/commands/UpdateUserCmd.java +++ b/api/src/com/cloud/api/commands/UpdateUserCmd.java @@ -21,7 +21,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -110,6 +109,7 @@ public class UpdateUserCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } @@ -118,7 +118,7 @@ public class UpdateUserCmd extends BaseCmd { public void execute(){ UserAccount user = _accountService.updateUser(this); if (user != null){ - UserResponse response = ApiResponseHelper.createUserResponse(user); + UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateVMCmd.java b/api/src/com/cloud/api/commands/UpdateVMCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/UpdateVMCmd.java rename to api/src/com/cloud/api/commands/UpdateVMCmd.java index 154718d7a01..16fdd2a4c15 100644 --- a/server/src/com/cloud/api/commands/UpdateVMCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVMCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -86,7 +85,7 @@ public class UpdateVMCmd extends BaseCmd{ public void execute(){ UserVm result = _userVmService.updateVirtualMachine(this); if (result != null){ - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateVMGroupCmd.java b/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/UpdateVMGroupCmd.java rename to api/src/com/cloud/api/commands/UpdateVMGroupCmd.java index f2a94b7b99c..2ad067c2262 100644 --- a/server/src/com/cloud/api/commands/UpdateVMGroupCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVMGroupCmd.java @@ -20,13 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.InstanceGroupResponse; -import com.cloud.vm.InstanceGroupVO; +import com.cloud.vm.InstanceGroup; @Implementation(description="Updates a vm group", responseObject=InstanceGroupResponse.class) public class UpdateVMGroupCmd extends BaseCmd{ @@ -67,9 +66,9 @@ public class UpdateVMGroupCmd extends BaseCmd{ @Override public void execute(){ - InstanceGroupVO result = _mgr.updateVmGroup(this); + InstanceGroup result = _mgr.updateVmGroup(this); if (result != null){ - InstanceGroupResponse response = ApiResponseHelper.createInstanceGroupResponse(result); + InstanceGroupResponse response = _responseGenerator.createInstanceGroupResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpdateZoneCmd.java b/api/src/com/cloud/api/commands/UpdateZoneCmd.java similarity index 96% rename from server/src/com/cloud/api/commands/UpdateZoneCmd.java rename to api/src/com/cloud/api/commands/UpdateZoneCmd.java index 2843e138cb3..ef238e91a15 100644 --- a/server/src/com/cloud/api/commands/UpdateZoneCmd.java +++ b/api/src/com/cloud/api/commands/UpdateZoneCmd.java @@ -21,14 +21,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.ZoneResponse; import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenterVO; @Implementation(description="Updates a Zone.", responseObject=ZoneResponse.class) public class UpdateZoneCmd extends BaseCmd { @@ -131,7 +129,7 @@ public class UpdateZoneCmd extends BaseCmd { public void execute(){ DataCenter result = _configService.editZone(this); if (result != null) { - ZoneResponse response = ApiResponseHelper.createZoneResponse((DataCenterVO)result); + ZoneResponse response = _responseGenerator.createZoneResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UpgradeRouterCmd.java b/api/src/com/cloud/api/commands/UpgradeRouterCmd.java similarity index 92% rename from server/src/com/cloud/api/commands/UpgradeRouterCmd.java rename to api/src/com/cloud/api/commands/UpgradeRouterCmd.java index 1bdc9368843..84ee4b714da 100644 --- a/server/src/com/cloud/api/commands/UpgradeRouterCmd.java +++ b/api/src/com/cloud/api/commands/UpgradeRouterCmd.java @@ -20,13 +20,12 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; 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.DomainRouterResponse; -import com.cloud.vm.DomainRouter; +import com.cloud.network.router.VirtualRouter; @Implementation(description="Upgrades domain router to a new service offering", responseObject=DomainRouterResponse.class) public class UpgradeRouterCmd extends BaseCmd { @@ -66,9 +65,9 @@ public class UpgradeRouterCmd extends BaseCmd { @Override public void execute(){ - DomainRouter router = _routerMgr.upgradeRouter(this); + VirtualRouter router = _routerService.upgradeRouter(this); if (router != null){ - DomainRouterResponse routerResponse = ApiResponseHelper.createDomainRouterResponse(router); + DomainRouterResponse routerResponse = _responseGenerator.createDomainRouterResponse(router); routerResponse.setResponseName(getName()); this.setResponseObject(routerResponse); } else { diff --git a/server/src/com/cloud/api/commands/UpgradeVMCmd.java b/api/src/com/cloud/api/commands/UpgradeVMCmd.java similarity index 95% rename from server/src/com/cloud/api/commands/UpgradeVMCmd.java rename to api/src/com/cloud/api/commands/UpgradeVMCmd.java index 35a3d346105..ebb8bfef1af 100644 --- a/server/src/com/cloud/api/commands/UpgradeVMCmd.java +++ b/api/src/com/cloud/api/commands/UpgradeVMCmd.java @@ -20,7 +20,6 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.ApiConstants; -import com.cloud.api.ApiResponseHelper; import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; @@ -74,7 +73,7 @@ public class UpgradeVMCmd extends BaseCmd { public void execute(){ UserVm result = _userVmService.upgradeVirtualMachine(this); if (result != null){ - UserVmResponse response = ApiResponseHelper.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse(result); response.setResponseName(getName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/commands/UploadCustomCertificateCmd.java b/api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java similarity index 100% rename from server/src/com/cloud/api/commands/UploadCustomCertificateCmd.java rename to api/src/com/cloud/api/commands/UploadCustomCertificateCmd.java diff --git a/server/src/com/cloud/api/response/AccountResponse.java b/api/src/com/cloud/api/response/AccountResponse.java similarity index 100% rename from server/src/com/cloud/api/response/AccountResponse.java rename to api/src/com/cloud/api/response/AccountResponse.java diff --git a/server/src/com/cloud/api/response/AlertResponse.java b/api/src/com/cloud/api/response/AlertResponse.java similarity index 100% rename from server/src/com/cloud/api/response/AlertResponse.java rename to api/src/com/cloud/api/response/AlertResponse.java diff --git a/server/src/com/cloud/api/response/AsyncJobResponse.java b/api/src/com/cloud/api/response/AsyncJobResponse.java similarity index 100% rename from server/src/com/cloud/api/response/AsyncJobResponse.java rename to api/src/com/cloud/api/response/AsyncJobResponse.java diff --git a/server/src/com/cloud/api/response/BaseResponse.java b/api/src/com/cloud/api/response/BaseResponse.java similarity index 100% rename from server/src/com/cloud/api/response/BaseResponse.java rename to api/src/com/cloud/api/response/BaseResponse.java diff --git a/server/src/com/cloud/api/response/CapabilitiesResponse.java b/api/src/com/cloud/api/response/CapabilitiesResponse.java similarity index 100% rename from server/src/com/cloud/api/response/CapabilitiesResponse.java rename to api/src/com/cloud/api/response/CapabilitiesResponse.java diff --git a/server/src/com/cloud/api/response/CapacityResponse.java b/api/src/com/cloud/api/response/CapacityResponse.java similarity index 100% rename from server/src/com/cloud/api/response/CapacityResponse.java rename to api/src/com/cloud/api/response/CapacityResponse.java diff --git a/server/src/com/cloud/api/response/CloudIdentifierResponse.java b/api/src/com/cloud/api/response/CloudIdentifierResponse.java similarity index 100% rename from server/src/com/cloud/api/response/CloudIdentifierResponse.java rename to api/src/com/cloud/api/response/CloudIdentifierResponse.java diff --git a/server/src/com/cloud/api/response/ClusterResponse.java b/api/src/com/cloud/api/response/ClusterResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ClusterResponse.java rename to api/src/com/cloud/api/response/ClusterResponse.java diff --git a/server/src/com/cloud/api/response/ConfigurationResponse.java b/api/src/com/cloud/api/response/ConfigurationResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ConfigurationResponse.java rename to api/src/com/cloud/api/response/ConfigurationResponse.java diff --git a/server/src/com/cloud/api/response/CreateCmdResponse.java b/api/src/com/cloud/api/response/CreateCmdResponse.java similarity index 100% rename from server/src/com/cloud/api/response/CreateCmdResponse.java rename to api/src/com/cloud/api/response/CreateCmdResponse.java diff --git a/server/src/com/cloud/api/response/CustomCertificateResponse.java b/api/src/com/cloud/api/response/CustomCertificateResponse.java similarity index 100% rename from server/src/com/cloud/api/response/CustomCertificateResponse.java rename to api/src/com/cloud/api/response/CustomCertificateResponse.java diff --git a/server/src/com/cloud/api/response/DiskOfferingResponse.java b/api/src/com/cloud/api/response/DiskOfferingResponse.java similarity index 100% rename from server/src/com/cloud/api/response/DiskOfferingResponse.java rename to api/src/com/cloud/api/response/DiskOfferingResponse.java diff --git a/server/src/com/cloud/api/response/DomainResponse.java b/api/src/com/cloud/api/response/DomainResponse.java similarity index 100% rename from server/src/com/cloud/api/response/DomainResponse.java rename to api/src/com/cloud/api/response/DomainResponse.java diff --git a/server/src/com/cloud/api/response/DomainRouterResponse.java b/api/src/com/cloud/api/response/DomainRouterResponse.java similarity index 100% rename from server/src/com/cloud/api/response/DomainRouterResponse.java rename to api/src/com/cloud/api/response/DomainRouterResponse.java diff --git a/server/src/com/cloud/api/response/EventResponse.java b/api/src/com/cloud/api/response/EventResponse.java similarity index 96% rename from server/src/com/cloud/api/response/EventResponse.java rename to api/src/com/cloud/api/response/EventResponse.java index 2e070153dc9..bd74aed4a64 100644 --- a/server/src/com/cloud/api/response/EventResponse.java +++ b/api/src/com/cloud/api/response/EventResponse.java @@ -20,7 +20,7 @@ package com.cloud.api.response; import java.util.Date; import com.cloud.api.ApiConstants; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; @@ -53,7 +53,7 @@ public class EventResponse extends BaseResponse { private Date created; @SerializedName(ApiConstants.STATE) @Param(description="the state of the event") - private EventState state; + private Event.State state; @SerializedName("parentid") @Param(description="whether the event is parented") private Long parentId; @@ -130,11 +130,11 @@ public class EventResponse extends BaseResponse { this.created = created; } - public EventState getState() { + public Event.State getState() { return state; } - public void setState(EventState state) { + public void setState(Event.State state) { this.state = state; } diff --git a/server/src/com/cloud/api/response/ExceptionResponse.java b/api/src/com/cloud/api/response/ExceptionResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ExceptionResponse.java rename to api/src/com/cloud/api/response/ExceptionResponse.java diff --git a/server/src/com/cloud/api/response/ExtractResponse.java b/api/src/com/cloud/api/response/ExtractResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ExtractResponse.java rename to api/src/com/cloud/api/response/ExtractResponse.java diff --git a/server/src/com/cloud/api/response/FirewallRuleResponse.java b/api/src/com/cloud/api/response/FirewallRuleResponse.java similarity index 100% rename from server/src/com/cloud/api/response/FirewallRuleResponse.java rename to api/src/com/cloud/api/response/FirewallRuleResponse.java diff --git a/server/src/com/cloud/api/response/GuestOSCategoryResponse.java b/api/src/com/cloud/api/response/GuestOSCategoryResponse.java similarity index 100% rename from server/src/com/cloud/api/response/GuestOSCategoryResponse.java rename to api/src/com/cloud/api/response/GuestOSCategoryResponse.java diff --git a/server/src/com/cloud/api/response/GuestOSResponse.java b/api/src/com/cloud/api/response/GuestOSResponse.java similarity index 100% rename from server/src/com/cloud/api/response/GuestOSResponse.java rename to api/src/com/cloud/api/response/GuestOSResponse.java diff --git a/server/src/com/cloud/api/response/HostResponse.java b/api/src/com/cloud/api/response/HostResponse.java similarity index 100% rename from server/src/com/cloud/api/response/HostResponse.java rename to api/src/com/cloud/api/response/HostResponse.java diff --git a/server/src/com/cloud/api/response/HypervisorResponse.java b/api/src/com/cloud/api/response/HypervisorResponse.java similarity index 100% rename from server/src/com/cloud/api/response/HypervisorResponse.java rename to api/src/com/cloud/api/response/HypervisorResponse.java diff --git a/server/src/com/cloud/api/response/IPAddressResponse.java b/api/src/com/cloud/api/response/IPAddressResponse.java similarity index 100% rename from server/src/com/cloud/api/response/IPAddressResponse.java rename to api/src/com/cloud/api/response/IPAddressResponse.java diff --git a/server/src/com/cloud/api/response/IngressRuleResponse.java b/api/src/com/cloud/api/response/IngressRuleResponse.java similarity index 100% rename from server/src/com/cloud/api/response/IngressRuleResponse.java rename to api/src/com/cloud/api/response/IngressRuleResponse.java diff --git a/server/src/com/cloud/api/response/InstanceGroupResponse.java b/api/src/com/cloud/api/response/InstanceGroupResponse.java similarity index 100% rename from server/src/com/cloud/api/response/InstanceGroupResponse.java rename to api/src/com/cloud/api/response/InstanceGroupResponse.java diff --git a/server/src/com/cloud/api/response/IpForwardingRuleResponse.java b/api/src/com/cloud/api/response/IpForwardingRuleResponse.java similarity index 100% rename from server/src/com/cloud/api/response/IpForwardingRuleResponse.java rename to api/src/com/cloud/api/response/IpForwardingRuleResponse.java diff --git a/server/src/com/cloud/api/response/IsoVmResponse.java b/api/src/com/cloud/api/response/IsoVmResponse.java similarity index 100% rename from server/src/com/cloud/api/response/IsoVmResponse.java rename to api/src/com/cloud/api/response/IsoVmResponse.java diff --git a/server/src/com/cloud/api/response/ListResponse.java b/api/src/com/cloud/api/response/ListResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ListResponse.java rename to api/src/com/cloud/api/response/ListResponse.java diff --git a/server/src/com/cloud/api/response/LoadBalancerResponse.java b/api/src/com/cloud/api/response/LoadBalancerResponse.java similarity index 100% rename from server/src/com/cloud/api/response/LoadBalancerResponse.java rename to api/src/com/cloud/api/response/LoadBalancerResponse.java diff --git a/server/src/com/cloud/api/response/NetworkGroupResponse.java b/api/src/com/cloud/api/response/NetworkGroupResponse.java similarity index 100% rename from server/src/com/cloud/api/response/NetworkGroupResponse.java rename to api/src/com/cloud/api/response/NetworkGroupResponse.java diff --git a/server/src/com/cloud/api/response/PodResponse.java b/api/src/com/cloud/api/response/PodResponse.java similarity index 100% rename from server/src/com/cloud/api/response/PodResponse.java rename to api/src/com/cloud/api/response/PodResponse.java diff --git a/server/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java b/api/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java similarity index 100% rename from server/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java rename to api/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java diff --git a/server/src/com/cloud/api/response/PreallocatedLunResponse.java b/api/src/com/cloud/api/response/PreallocatedLunResponse.java similarity index 100% rename from server/src/com/cloud/api/response/PreallocatedLunResponse.java rename to api/src/com/cloud/api/response/PreallocatedLunResponse.java diff --git a/server/src/com/cloud/api/response/RegisterResponse.java b/api/src/com/cloud/api/response/RegisterResponse.java similarity index 100% rename from server/src/com/cloud/api/response/RegisterResponse.java rename to api/src/com/cloud/api/response/RegisterResponse.java diff --git a/server/src/com/cloud/api/response/RemoteAccessVpnResponse.java b/api/src/com/cloud/api/response/RemoteAccessVpnResponse.java similarity index 100% rename from server/src/com/cloud/api/response/RemoteAccessVpnResponse.java rename to api/src/com/cloud/api/response/RemoteAccessVpnResponse.java diff --git a/server/src/com/cloud/api/response/ResourceLimitResponse.java b/api/src/com/cloud/api/response/ResourceLimitResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ResourceLimitResponse.java rename to api/src/com/cloud/api/response/ResourceLimitResponse.java diff --git a/server/src/com/cloud/api/response/ServiceOfferingResponse.java b/api/src/com/cloud/api/response/ServiceOfferingResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ServiceOfferingResponse.java rename to api/src/com/cloud/api/response/ServiceOfferingResponse.java diff --git a/server/src/com/cloud/api/response/SnapshotPolicyResponse.java b/api/src/com/cloud/api/response/SnapshotPolicyResponse.java similarity index 100% rename from server/src/com/cloud/api/response/SnapshotPolicyResponse.java rename to api/src/com/cloud/api/response/SnapshotPolicyResponse.java diff --git a/server/src/com/cloud/api/response/SnapshotResponse.java b/api/src/com/cloud/api/response/SnapshotResponse.java similarity index 100% rename from server/src/com/cloud/api/response/SnapshotResponse.java rename to api/src/com/cloud/api/response/SnapshotResponse.java diff --git a/server/src/com/cloud/api/response/SnapshotScheduleResponse.java b/api/src/com/cloud/api/response/SnapshotScheduleResponse.java similarity index 100% rename from server/src/com/cloud/api/response/SnapshotScheduleResponse.java rename to api/src/com/cloud/api/response/SnapshotScheduleResponse.java diff --git a/server/src/com/cloud/api/response/StatusResponse.java b/api/src/com/cloud/api/response/StatusResponse.java similarity index 100% rename from server/src/com/cloud/api/response/StatusResponse.java rename to api/src/com/cloud/api/response/StatusResponse.java diff --git a/server/src/com/cloud/api/response/StoragePoolResponse.java b/api/src/com/cloud/api/response/StoragePoolResponse.java similarity index 100% rename from server/src/com/cloud/api/response/StoragePoolResponse.java rename to api/src/com/cloud/api/response/StoragePoolResponse.java diff --git a/server/src/com/cloud/api/response/SuccessResponse.java b/api/src/com/cloud/api/response/SuccessResponse.java similarity index 100% rename from server/src/com/cloud/api/response/SuccessResponse.java rename to api/src/com/cloud/api/response/SuccessResponse.java diff --git a/server/src/com/cloud/api/response/SystemVmResponse.java b/api/src/com/cloud/api/response/SystemVmResponse.java similarity index 100% rename from server/src/com/cloud/api/response/SystemVmResponse.java rename to api/src/com/cloud/api/response/SystemVmResponse.java diff --git a/server/src/com/cloud/api/response/TemplatePermissionsResponse.java b/api/src/com/cloud/api/response/TemplatePermissionsResponse.java similarity index 100% rename from server/src/com/cloud/api/response/TemplatePermissionsResponse.java rename to api/src/com/cloud/api/response/TemplatePermissionsResponse.java diff --git a/server/src/com/cloud/api/response/TemplateResponse.java b/api/src/com/cloud/api/response/TemplateResponse.java similarity index 100% rename from server/src/com/cloud/api/response/TemplateResponse.java rename to api/src/com/cloud/api/response/TemplateResponse.java diff --git a/server/src/com/cloud/api/response/UpgradeVmResponse.java b/api/src/com/cloud/api/response/UpgradeVmResponse.java similarity index 100% rename from server/src/com/cloud/api/response/UpgradeVmResponse.java rename to api/src/com/cloud/api/response/UpgradeVmResponse.java diff --git a/server/src/com/cloud/api/response/UserResponse.java b/api/src/com/cloud/api/response/UserResponse.java similarity index 100% rename from server/src/com/cloud/api/response/UserResponse.java rename to api/src/com/cloud/api/response/UserResponse.java diff --git a/server/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java similarity index 100% rename from server/src/com/cloud/api/response/UserVmResponse.java rename to api/src/com/cloud/api/response/UserVmResponse.java diff --git a/server/src/com/cloud/api/response/VlanIpRangeResponse.java b/api/src/com/cloud/api/response/VlanIpRangeResponse.java similarity index 100% rename from server/src/com/cloud/api/response/VlanIpRangeResponse.java rename to api/src/com/cloud/api/response/VlanIpRangeResponse.java diff --git a/server/src/com/cloud/api/response/VolumeResponse.java b/api/src/com/cloud/api/response/VolumeResponse.java similarity index 100% rename from server/src/com/cloud/api/response/VolumeResponse.java rename to api/src/com/cloud/api/response/VolumeResponse.java diff --git a/server/src/com/cloud/api/response/VpnUsersResponse.java b/api/src/com/cloud/api/response/VpnUsersResponse.java similarity index 100% rename from server/src/com/cloud/api/response/VpnUsersResponse.java rename to api/src/com/cloud/api/response/VpnUsersResponse.java diff --git a/server/src/com/cloud/api/response/ZoneResponse.java b/api/src/com/cloud/api/response/ZoneResponse.java similarity index 100% rename from server/src/com/cloud/api/response/ZoneResponse.java rename to api/src/com/cloud/api/response/ZoneResponse.java diff --git a/core/src/com/cloud/async/AsyncInstanceCreateStatus.java b/api/src/com/cloud/async/AsyncInstanceCreateStatus.java similarity index 100% rename from core/src/com/cloud/async/AsyncInstanceCreateStatus.java rename to api/src/com/cloud/async/AsyncInstanceCreateStatus.java diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java new file mode 100644 index 00000000000..644771441c8 --- /dev/null +++ b/api/src/com/cloud/async/AsyncJob.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.async; + +import java.util.Date; + +public interface AsyncJob { + Long getId(); + long getUserId(); + long getAccountId(); + String getCmd(); + int getCmdVersion(); + String getCmdInfo(); + int getCallbackType(); + String getCallbackAddress(); + int getStatus(); + int getProcessStatus(); + int getResultCode(); + String getResult(); + Long getInitMsid(); + Long getCompleteMsid(); + Date getCreated(); + Date getLastUpdated(); + Date getLastPolled(); + Date getRemoved(); + String getInstanceType(); + Long getInstanceId(); + String getSessionKey(); + String getCmdOriginator(); + boolean isFromPreviousSession(); +} diff --git a/api/src/com/cloud/capacity/Capacity.java b/api/src/com/cloud/capacity/Capacity.java new file mode 100644 index 00000000000..a9df7342ab1 --- /dev/null +++ b/api/src/com/cloud/capacity/Capacity.java @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.capacity; + +/** + * @author ahuang + * + */ +public interface Capacity { + public static final short CAPACITY_TYPE_MEMORY = 0; + public static final short CAPACITY_TYPE_CPU = 1; + public static final short CAPACITY_TYPE_STORAGE = 2; + public static final short CAPACITY_TYPE_STORAGE_ALLOCATED = 3; + public static final short CAPACITY_TYPE_PUBLIC_IP = 4; + public static final short CAPACITY_TYPE_PRIVATE_IP = 5; + public static final short CAPACITY_TYPE_SECONDARY_STORAGE = 6; + + public long getId(); + + public Long getHostOrPoolId(); + public long getDataCenterId(); + public Long getPodId(); + public long getUsedCapacity(); + public long getTotalCapacity(); + public short getCapacityType(); + + +} diff --git a/core/src/com/cloud/configuration/Configuration.java b/api/src/com/cloud/configuration/Configuration.java similarity index 100% rename from core/src/com/cloud/configuration/Configuration.java rename to api/src/com/cloud/configuration/Configuration.java diff --git a/server/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java similarity index 98% rename from server/src/com/cloud/configuration/ConfigurationService.java rename to api/src/com/cloud/configuration/ConfigurationService.java index 9c0ad7cc25a..310cb2f2fd1 100644 --- a/server/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -24,9 +24,8 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; -import com.cloud.utils.component.Manager; -public interface ConfigurationService extends Manager{ +public interface ConfigurationService { /** * Updates a configuration entry with a new value @@ -170,5 +169,4 @@ public interface ConfigurationService extends Manager{ Vlan createVlanAndPublicIpRange(CreateVlanIpRangeCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException; boolean deleteVlanIpRange(DeleteVlanIpRangeCmd cmd); - } diff --git a/core/src/com/cloud/configuration/ResourceCount.java b/api/src/com/cloud/configuration/ResourceCount.java similarity index 100% rename from core/src/com/cloud/configuration/ResourceCount.java rename to api/src/com/cloud/configuration/ResourceCount.java diff --git a/core/src/com/cloud/configuration/ResourceLimit.java b/api/src/com/cloud/configuration/ResourceLimit.java similarity index 100% rename from core/src/com/cloud/configuration/ResourceLimit.java rename to api/src/com/cloud/configuration/ResourceLimit.java diff --git a/api/src/com/cloud/consoleproxy/ConsoleProxyService.java b/api/src/com/cloud/consoleproxy/ConsoleProxyService.java new file mode 100644 index 00000000000..453e2098ba8 --- /dev/null +++ b/api/src/com/cloud/consoleproxy/ConsoleProxyService.java @@ -0,0 +1,24 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.consoleproxy; + +import com.cloud.api.commands.DestroyConsoleProxyCmd; + +public interface ConsoleProxyService { + boolean destroyConsoleProxy(DestroyConsoleProxyCmd cmd); +} diff --git a/api/src/com/cloud/dao/EntityManager.java b/api/src/com/cloud/dao/EntityManager.java new file mode 100644 index 00000000000..0c07af63692 --- /dev/null +++ b/api/src/com/cloud/dao/EntityManager.java @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.dao; + +import java.io.Serializable; +import java.util.List; + +import com.cloud.utils.db.GenericSearchBuilder; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + +/** + * Generic Entity Manager to retrieve database objects. + * + */ +public interface EntityManager { + /** + * Finds an entity by its id. + * @param class of the entity you're trying to find. + * @param class of the id that the entity uses. + * @param entityType Type of the entity. + * @param id id value + * @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 + * @param entityType type of entity you're looking for. + * @param xid external id + * @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 + * @param entityType type of entity you're looking for. + * @return List + */ + public List list(Class entityType); + + /** + * Persists the entity. + * @param entity class + * @param t entity + * @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/DataCenter.java b/api/src/com/cloud/dc/DataCenter.java index 4331d35180d..a8b74b378c3 100644 --- a/api/src/com/cloud/dc/DataCenter.java +++ b/api/src/com/cloud/dc/DataCenter.java @@ -19,4 +19,11 @@ public interface DataCenter extends Grouping { String getGuestNetworkCidr(); String getName(); Long getDomainId(); + String getDescription(); + String getDomain(); + String getVnet(); + + DataCenterNetworkType getNetworkType(); + String getInternalDns1(); + String getInternalDns2(); } diff --git a/api/src/com/cloud/dc/Pod.java b/api/src/com/cloud/dc/Pod.java index 47e61f14e79..cff4edad93e 100644 --- a/api/src/com/cloud/dc/Pod.java +++ b/api/src/com/cloud/dc/Pod.java @@ -24,4 +24,8 @@ public interface Pod extends Grouping { long getDataCenterId(); //String getUniqueName(); + + String getDescription(); + + String getName(); } diff --git a/core/src/com/cloud/dc/Vlan.java b/api/src/com/cloud/dc/Vlan.java similarity index 100% rename from core/src/com/cloud/dc/Vlan.java rename to api/src/com/cloud/dc/Vlan.java diff --git a/api/src/com/cloud/event/Event.java b/api/src/com/cloud/event/Event.java new file mode 100644 index 00000000000..68d08a1a45e --- /dev/null +++ b/api/src/com/cloud/event/Event.java @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.event; + +import java.util.Date; + +public interface Event { + public enum State { + Scheduled, + Started, + Completed; + } + + + long getId(); + String getType(); + State getState(); + + String getDescription(); + Date getCreateDate(); + long getUserId(); + long getAccountId(); + long getDomainId(); + String getAccountName(); + int getTotalSize(); + String getLevel(); + long getStartId(); + String getParameters(); +} diff --git a/core/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java similarity index 100% rename from core/src/com/cloud/event/EventTypes.java rename to api/src/com/cloud/event/EventTypes.java diff --git a/server/src/com/cloud/network/DomainRouterService.java b/api/src/com/cloud/network/DomainRouterService.java similarity index 76% rename from server/src/com/cloud/network/DomainRouterService.java rename to api/src/com/cloud/network/DomainRouterService.java index 08290bcd25c..f21f352271e 100644 --- a/server/src/com/cloud/network/DomainRouterService.java +++ b/api/src/com/cloud/network/DomainRouterService.java @@ -25,7 +25,7 @@ import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.vm.DomainRouter; +import com.cloud.network.router.VirtualRouter; public interface DomainRouterService { /** @@ -34,16 +34,16 @@ public interface DomainRouterService { * @return DomainRouter object * @throws InvalidParameterValueException, PermissionDeniedException */ - DomainRouter startRouter(StartRouterCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; + VirtualRouter startRouter(StartRouterCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; /** * Stops domain router * @param cmd the command specifying router's id * @return router if successful, null otherwise */ - DomainRouter stopRouter(StopRouterCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException; + VirtualRouter stopRouter(StopRouterCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException; - DomainRouter startRouter(long routerId) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException; + VirtualRouter startRouter(long routerId) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException; /** * Stops domain router @@ -53,7 +53,7 @@ public interface DomainRouterService { * @throws ResourceUnavailableException * @throws InvalidParameterValueException, PermissionDeniedException */ - DomainRouter stopRouter(long routerId) throws ResourceUnavailableException, ConcurrentOperationException; + VirtualRouter stopRouter(long routerId) throws ResourceUnavailableException, ConcurrentOperationException; /** * Reboots domain router @@ -61,8 +61,8 @@ public interface DomainRouterService { * @return router if successful * @throws InvalidParameterValueException, PermissionDeniedException */ - DomainRouter rebootRouter(RebootRouterCmd cmd); + VirtualRouter rebootRouter(RebootRouterCmd cmd); - DomainRouter upgradeRouter(UpgradeRouterCmd cmd); + VirtualRouter upgradeRouter(UpgradeRouterCmd cmd); } diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/com/cloud/network/IpAddress.java new file mode 100644 index 00000000000..c352a273af0 --- /dev/null +++ b/api/src/com/cloud/network/IpAddress.java @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network; + +import java.util.Date; + +public interface IpAddress { + long getDataCenterId(); + + String getAddress(); + Long getAccountId(); + Long getDomainId(); + Date getAllocated(); + boolean isSourceNat(); + + void setAccountId(Long accountId); + + void setDomainId(Long domainId); + + void setSourceNat(boolean sourceNat); + + boolean getSourceNat(); + + void setAllocated(Date allocated); + + long getVlanDbId(); + + void setVlanDbId(long vlanDbId); + + boolean isOneToOneNat(); + + void setOneToOneNat(boolean oneToOneNat); +} diff --git a/api/src/com/cloud/network/LoadBalancer.java b/api/src/com/cloud/network/LoadBalancer.java new file mode 100644 index 00000000000..792f789fc50 --- /dev/null +++ b/api/src/com/cloud/network/LoadBalancer.java @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network; + +public interface LoadBalancer { + long getId(); + + String getName(); + void setName(String name); + + String getDescription(); + void setDescription(String description); + + long getAccountId(); + + String getIpAddress(); + + String getPublicPort(); + + String getPrivatePort(); + void setPrivatePort(String privatePort); + + String getAlgorithm(); + void setAlgorithm(String algorithm); + + Long getDomainId(); + + String getAccountName(); +} diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java new file mode 100644 index 00000000000..0bc9dc0d5f6 --- /dev/null +++ b/api/src/com/cloud/network/NetworkService.java @@ -0,0 +1,126 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network; + +import java.util.List; + +import com.cloud.api.commands.AddVpnUserCmd; +import com.cloud.api.commands.AssignToLoadBalancerRuleCmd; +import com.cloud.api.commands.AssociateIPAddrCmd; +import com.cloud.api.commands.CreateLoadBalancerRuleCmd; +import com.cloud.api.commands.CreatePortForwardingRuleCmd; +import com.cloud.api.commands.CreateRemoteAccessVpnCmd; +import com.cloud.api.commands.DeleteLoadBalancerRuleCmd; +import com.cloud.api.commands.DeleteRemoteAccessVpnCmd; +import com.cloud.api.commands.DisassociateIPAddrCmd; +import com.cloud.api.commands.ListPortForwardingRulesCmd; +import com.cloud.api.commands.RemoveFromLoadBalancerRuleCmd; +import com.cloud.api.commands.RemoveVpnUserCmd; +import com.cloud.api.commands.UpdateLoadBalancerRuleCmd; +import com.cloud.exception.AccountLimitException; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.rules.FirewallRule; +import com.cloud.offering.NetworkOffering; + + +public interface NetworkService { + List listNetworkOfferings(); + /** + * Associates a public IP address for a router. + * @param cmd - the command specifying ipAddress + * @return ip address object + * @throws ResourceAllocationException, InsufficientCapacityException + */ + IpAddress associateIP(AssociateIPAddrCmd cmd) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException; + /** + * Assign a virtual machine, or list of virtual machines, to a load balancer. + */ + boolean assignToLoadBalancer(AssignToLoadBalancerRuleCmd cmd) throws NetworkRuleConflictException; + + public boolean removeFromLoadBalancer(RemoveFromLoadBalancerRuleCmd cmd); + + public boolean deleteLoadBalancerRule(DeleteLoadBalancerRuleCmd cmd); + public LoadBalancer updateLoadBalancerRule(UpdateLoadBalancerRuleCmd cmd); + public boolean disassociateIpAddress(DisassociateIPAddrCmd cmd); + + /** + * Create a remote access vpn from the given public ip address and client ip range + * @param cmd the command specifying the ip address, ip range + * @return the newly created RemoteAccessVpnVO if successful, null otherwise + * @throws InvalidParameterValueException + * @throws PermissionDeniedException + * @throws ConcurrentOperationException + */ + public RemoteAccessVpn createRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, InvalidParameterValueException, PermissionDeniedException; + + /** + * Start a remote access vpn for the given public ip address and client ip range + * @param cmd the command specifying the ip address, ip range + * @return the RemoteAccessVpnVO if successful, null otherwise + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + */ + public RemoteAccessVpn startRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException; + + /** + * Destroy a previously created remote access VPN + * @param cmd the command specifying the account and zone + * @return success if successful, false otherwise + * @throws ConcurrentOperationException + */ + public boolean destroyRemoteAccessVpn(DeleteRemoteAccessVpnCmd cmd) throws ConcurrentOperationException; + + VpnUser addVpnUser(AddVpnUserCmd cmd) throws ConcurrentOperationException, AccountLimitException; + + boolean removeVpnUser(RemoveVpnUserCmd cmd) throws ConcurrentOperationException; + + /** + * Create a port forwarding rule from the given ipAddress/port to the given virtual machine/port. + * @param cmd the command specifying the ip address, public port, protocol, private port, and virtual machine id. + * @return the newly created FirewallRuleVO if successful, null otherwise. + */ + public FirewallRule createPortForwardingRule(CreatePortForwardingRuleCmd cmd) throws NetworkRuleConflictException; + + /** + * 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 + */ + public List listPortForwardingRules(ListPortForwardingRulesCmd cmd); + + /** + * Create a load balancer rule from the given ipAddress/port to the given private port + * @param cmd the command specifying the ip address, public port, protocol, private port, and algorithm + * @return the newly created LoadBalancerVO if successful, null otherwise + */ + public LoadBalancer createLoadBalancerRule(CreateLoadBalancerRuleCmd cmd); + + FirewallRule createIpForwardingRuleInDb(String ipAddr, long virtualMachineId); + + FirewallRule createIpForwardingRuleOnDomr(long ruleId); + + boolean deleteIpForwardingRule(Long id); + boolean deletePortForwardingRule(Long id, boolean sysContext); + +} diff --git a/api/src/com/cloud/network/RemoteAccessVpn.java b/api/src/com/cloud/network/RemoteAccessVpn.java new file mode 100644 index 00000000000..a967e954695 --- /dev/null +++ b/api/src/com/cloud/network/RemoteAccessVpn.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network; + +/** + * @author ahuang + * + */ +public interface RemoteAccessVpn { + long getId(); + long getAccountId(); + String getAccountName(); + String getVpnServerAddress(); + void setVpnServerAddress(String vpnServerAddress); + String getIpRange(); + void setIpRange(String ipRange); + String getIpsecPresharedKey(); + + void setIpsecPresharedKey(String ipsecPresharedKey); + + void setId(Long id); + + void setZoneId(long zoneId); + + long getZoneId(); + + String getLocalIp(); + + long getDomainId(); + +} diff --git a/server/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/VpnUser.java similarity index 81% rename from server/src/com/cloud/network/NetworkService.java rename to api/src/com/cloud/network/VpnUser.java index d97576ba582..733719daac6 100644 --- a/server/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/VpnUser.java @@ -17,11 +17,16 @@ */ package com.cloud.network; -import java.util.List; +public interface VpnUser { + long getId(); -import com.cloud.offering.NetworkOffering; + long getAccountId(); + + String getAccountName(); + String getUsername(); -public interface NetworkService { - List listNetworkOfferings(); + String getPassword(); + + long getDomainId(); } diff --git a/core/src/com/cloud/vm/DomainRouter.java b/api/src/com/cloud/network/router/VirtualRouter.java similarity index 94% rename from core/src/com/cloud/vm/DomainRouter.java rename to api/src/com/cloud/network/router/VirtualRouter.java index 254ec7801e1..51c9cb2341a 100755 --- a/core/src/com/cloud/vm/DomainRouter.java +++ b/api/src/com/cloud/network/router/VirtualRouter.java @@ -15,13 +15,15 @@ * along with this program. If not, see . * */ -package com.cloud.vm; +package com.cloud.network.router; + +import com.cloud.vm.VirtualMachine; /** * VirtualMachineRouter is a small VM instance that is started to * bridge internal and external traffic. */ -public interface DomainRouter extends VirtualMachine { +public interface VirtualRouter extends VirtualMachine { public enum Role { DHCP_FIREWALL_LB_PASSWD_USERDATA, DHCP_USERDATA diff --git a/api/src/com/cloud/network/rules/FirewallRule.java b/api/src/com/cloud/network/rules/FirewallRule.java index c049d8173ae..b87b6eeccab 100644 --- a/api/src/com/cloud/network/rules/FirewallRule.java +++ b/api/src/com/cloud/network/rules/FirewallRule.java @@ -50,4 +50,6 @@ public interface FirewallRule { * @return private port. */ String getPrivatePort(); + + String getProtocol(); } diff --git a/api/src/com/cloud/network/security/IngressRule.java b/api/src/com/cloud/network/security/IngressRule.java new file mode 100644 index 00000000000..66fa1fcb1e2 --- /dev/null +++ b/api/src/com/cloud/network/security/IngressRule.java @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.security; + +import com.cloud.async.AsyncInstanceCreateStatus; + +/** + * @author ahuang + * + */ +public interface IngressRule { + long getId(); + long getNetworkGroupId(); + int getStartPort(); + int getEndPort(); + String getProtocol(); + AsyncInstanceCreateStatus getCreateStatus(); + Long getAllowedNetworkId(); + String getAllowedNetworkGroup(); + String getAllowedNetGrpAcct(); + String getAllowedSourceIpCidr(); + +} diff --git a/api/src/com/cloud/network/security/NetworkGroup.java b/api/src/com/cloud/network/security/NetworkGroup.java new file mode 100644 index 00000000000..d98344db3a1 --- /dev/null +++ b/api/src/com/cloud/network/security/NetworkGroup.java @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.security; + +import com.cloud.domain.PartOf; +import com.cloud.user.OwnedBy; + +public interface NetworkGroup extends PartOf, OwnedBy { + long getId(); + String getName(); + String getDescription(); + String getAccountName(); +} diff --git a/api/src/com/cloud/network/security/NetworkGroupRules.java b/api/src/com/cloud/network/security/NetworkGroupRules.java new file mode 100644 index 00000000000..a3b7c8fa58a --- /dev/null +++ b/api/src/com/cloud/network/security/NetworkGroupRules.java @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.security; + +public interface NetworkGroupRules { + long getId(); + + String getName(); + + String getDescription(); + + Long getDomainId(); + + Long getAccountId(); + + String getAccountName(); + + Long getRuleId(); + + int getStartPort(); + + int getEndPort(); + + String getProtocol(); + + Long getAllowedNetworkId(); + + String getAllowedNetworkGroup(); + + String getAllowedNetGrpAcct(); + + String getAllowedSourceIpCidr(); +} diff --git a/api/src/com/cloud/network/security/NetworkGroupService.java b/api/src/com/cloud/network/security/NetworkGroupService.java new file mode 100644 index 00000000000..7000de667da --- /dev/null +++ b/api/src/com/cloud/network/security/NetworkGroupService.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.security; + +import java.util.List; + +import com.cloud.api.commands.AuthorizeNetworkGroupIngressCmd; +import com.cloud.api.commands.CreateNetworkGroupCmd; +import com.cloud.api.commands.DeleteNetworkGroupCmd; +import com.cloud.api.commands.ListNetworkGroupsCmd; +import com.cloud.api.commands.RevokeNetworkGroupIngressCmd; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceInUseException; + +public interface NetworkGroupService { + /** + * Create a network group with the given name and description + * @param command the command specifying the name and description + * @return the created network group if successful, null otherwise + */ + public NetworkGroup createNetworkGroup(CreateNetworkGroupCmd command) throws PermissionDeniedException, InvalidParameterValueException; + boolean revokeNetworkGroupIngress(RevokeNetworkGroupIngressCmd cmd); + + boolean deleteNetworkGroup(DeleteNetworkGroupCmd cmd) throws ResourceInUseException, PermissionDeniedException, InvalidParameterValueException; + + /** + * Search for network 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 network groups and associated ingress rules + */ + public List searchForNetworkGroupRules(ListNetworkGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException; + + public List authorizeNetworkGroupIngress(AuthorizeNetworkGroupIngressCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + + +} diff --git a/api/src/com/cloud/offering/DiskOffering.java b/api/src/com/cloud/offering/DiskOffering.java index 69e74415790..7341ca46d13 100644 --- a/api/src/com/cloud/offering/DiskOffering.java +++ b/api/src/com/cloud/offering/DiskOffering.java @@ -17,6 +17,8 @@ */ package com.cloud.offering; +import java.util.Date; + /** * Represents a disk offering that specifies what the end user needs in @@ -41,4 +43,10 @@ public interface DiskOffering { public String getTags(); public String[] getTagsArray(); + + Date getCreated(); + + long getDiskSize(); + + Boolean isCustomized(); } diff --git a/api/src/com/cloud/offering/ServiceOffering.java b/api/src/com/cloud/offering/ServiceOffering.java index 1d675ec57f8..357715f59cc 100755 --- a/api/src/com/cloud/offering/ServiceOffering.java +++ b/api/src/com/cloud/offering/ServiceOffering.java @@ -17,11 +17,21 @@ */ package com.cloud.offering; +import java.util.Date; + /** * ServiceOffering models the different types of service contracts to be * offered. */ public interface ServiceOffering { + long getId(); + + String getDisplayText(); + + Date getCreated(); + + String getTags(); + /** * @return user readable description */ diff --git a/api/src/com/cloud/org/Cluster.java b/api/src/com/cloud/org/Cluster.java index d5da8e2de01..37bb1c37a43 100644 --- a/api/src/com/cloud/org/Cluster.java +++ b/api/src/com/cloud/org/Cluster.java @@ -5,5 +5,9 @@ package com.cloud.org; public interface Cluster extends Grouping { long getId(); + + String getName(); + long getDataCenterId(); + long getPodId(); } diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java new file mode 100644 index 00000000000..bfc6bd56323 --- /dev/null +++ b/api/src/com/cloud/resource/ResourceService.java @@ -0,0 +1,59 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.resource; + +import java.util.List; + +import com.cloud.api.commands.AddHostCmd; +import com.cloud.api.commands.AddSecondaryStorageCmd; +import com.cloud.api.commands.CancelMaintenanceCmd; +import com.cloud.api.commands.DeleteHostCmd; +import com.cloud.api.commands.PrepareForMaintenanceCmd; +import com.cloud.api.commands.ReconnectHostCmd; +import com.cloud.api.commands.UpdateHostCmd; +import com.cloud.exception.AgentUnavailableException; +import com.cloud.exception.DiscoveryException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.host.Host; + +public interface ResourceService { + /** + * Updates a host + * @param cmd - the command specifying hostId + * @return hostObject + * @throws InvalidParameterValueException + */ + Host updateHost(UpdateHostCmd cmd) throws InvalidParameterValueException; + + Host cancelMaintenance(CancelMaintenanceCmd cmd) throws InvalidParameterValueException; + + Host reconnectHost(ReconnectHostCmd cmd) throws AgentUnavailableException; + List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; + List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; + Host maintain(PrepareForMaintenanceCmd cmd) throws InvalidParameterValueException; + /** + * Deletes a host + * + * @param cmd - the command specifying hostId + * @param true if deleted, false otherwise + * @throws InvalidParameterValueException + */ + boolean deleteHost(DeleteHostCmd cmd) throws InvalidParameterValueException; + + +} diff --git a/core/src/com/cloud/serializer/Param.java b/api/src/com/cloud/serializer/Param.java similarity index 100% rename from core/src/com/cloud/serializer/Param.java rename to api/src/com/cloud/serializer/Param.java diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java new file mode 100644 index 00000000000..5199962fdd1 --- /dev/null +++ b/api/src/com/cloud/server/ManagementService.java @@ -0,0 +1,494 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.server; + +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.cloud.alert.Alert; +import com.cloud.api.ServerApiException; +import com.cloud.api.commands.CreateDomainCmd; +import com.cloud.api.commands.DeleteDomainCmd; +import com.cloud.api.commands.DeletePreallocatedLunCmd; +import com.cloud.api.commands.DeployVMCmd; +import com.cloud.api.commands.ExtractVolumeCmd; +import com.cloud.api.commands.GetCloudIdentifierCmd; +import com.cloud.api.commands.ListAccountsCmd; +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; +import com.cloud.api.commands.ListClustersCmd; +import com.cloud.api.commands.ListDiskOfferingsCmd; +import com.cloud.api.commands.ListDomainChildrenCmd; +import com.cloud.api.commands.ListDomainsCmd; +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.ListHypervisorsCmd; +import com.cloud.api.commands.ListIpForwardingRulesCmd; +import com.cloud.api.commands.ListIsosCmd; +import com.cloud.api.commands.ListLoadBalancerRuleInstancesCmd; +import com.cloud.api.commands.ListLoadBalancerRulesCmd; +import com.cloud.api.commands.ListPodsByCmd; +import com.cloud.api.commands.ListPreallocatedLunsCmd; +import com.cloud.api.commands.ListPublicIpAddressesCmd; +import com.cloud.api.commands.ListRemoteAccessVpnsCmd; +import com.cloud.api.commands.ListRoutersCmd; +import com.cloud.api.commands.ListServiceOfferingsCmd; +import com.cloud.api.commands.ListSnapshotsCmd; +import com.cloud.api.commands.ListStoragePoolsCmd; +import com.cloud.api.commands.ListSystemVMsCmd; +import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; +import com.cloud.api.commands.ListTemplatesCmd; +import com.cloud.api.commands.ListUsersCmd; +import com.cloud.api.commands.ListVMGroupsCmd; +import com.cloud.api.commands.ListVMsCmd; +import com.cloud.api.commands.ListVlanIpRangesCmd; +import com.cloud.api.commands.ListVolumesCmd; +import com.cloud.api.commands.ListVpnUsersCmd; +import com.cloud.api.commands.ListZonesByCmd; +import com.cloud.api.commands.RebootSystemVmCmd; +import com.cloud.api.commands.RegisterCmd; +import com.cloud.api.commands.RegisterPreallocatedLunCmd; +import com.cloud.api.commands.StartSystemVMCmd; +import com.cloud.api.commands.StopSystemVmCmd; +import com.cloud.api.commands.UpdateDomainCmd; +import com.cloud.api.commands.UpdateIsoCmd; +import com.cloud.api.commands.UpdateIsoPermissionsCmd; +import com.cloud.api.commands.UpdatePortForwardingRuleCmd; +import com.cloud.api.commands.UpdateTemplateCmd; +import com.cloud.api.commands.UpdateTemplatePermissionsCmd; +import com.cloud.api.commands.UpdateVMGroupCmd; +import com.cloud.api.commands.UploadCustomCertificateCmd; +import com.cloud.async.AsyncJob; +import com.cloud.capacity.Capacity; +import com.cloud.configuration.Configuration; +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.InsufficientCapacityException; +import com.cloud.exception.InsufficientStorageCapacityException; +import com.cloud.exception.InternalErrorException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.StorageUnavailableException; +import com.cloud.host.Host; +import com.cloud.network.IpAddress; +import com.cloud.network.LoadBalancer; +import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.VpnUser; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.rules.FirewallRule; +import com.cloud.offering.DiskOffering; +import com.cloud.offering.ServiceOffering; +import com.cloud.org.Cluster; +import com.cloud.storage.GuestOS; +import com.cloud.storage.GuestOsCategory; +import com.cloud.storage.Snapshot; +import com.cloud.storage.StoragePool; +import com.cloud.storage.Volume; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.user.Account; +import com.cloud.user.UserAccount; +import com.cloud.uservm.UserVm; +import com.cloud.utils.exception.ExecutionException; +import com.cloud.vm.InstanceGroup; +import com.cloud.vm.VirtualMachine; + +/** + * Hopefull this is temporary. + * + */ +public interface ManagementService { + static final String Name = "management-server"; + + /** + * Creates and starts a new Virtual Machine. + * + * @param cmd the command with the deployment parameters + * - userId + * - accountId + * - zoneId + * - serviceOfferingId + * - templateId: the id of the template (or ISO) to use for creating the virtual machine + * - diskOfferingId: ID of the disk offering to use when creating the root disk (if deploying from an ISO) or the data disk (if deploying from a template). If deploying from a template and a disk offering ID is not passed in, the VM will have only a root disk. + * - displayName: user-supplied name to be shown in the UI or returned in the API + * - groupName: user-supplied groupname to be shown in the UI or returned in the API + * - userData: user-supplied base64-encoded data that can be retrieved by the instance from the virtual router + * - size: size to be used for volume creation in case the disk offering is private (i.e. size=0) + * @return VirtualMachine if successfully deployed, null otherwise + * @throws InvalidParameterValueException if the parameter values are incorrect. + * @throws ExecutionException + * @throws StorageUnavailableException + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + * @throws InsufficientCapacityException + */ + UserVm deployVirtualMachine(DeployVMCmd cmd, String password) throws ResourceAllocationException, InsufficientStorageCapacityException, ExecutionException, StorageUnavailableException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException; + + /** + * Retrieves the list of data centers with search criteria. + * Currently the only search criteria is "available" zones 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 + */ + List searchForConfigurations(ListCfgsByCmd c); + + /** revisit + * Searches for users by the specified search criteria + * Can search by: "id", "username", "account", "domainId", "type" + * @param cmd + * @return List of UserAccounts + */ + List searchForUsers(ListUsersCmd cmd); + + /** + * Searches for Service Offerings by the specified search criteria + * Can search by: "name" + * @param cmd + * @return List of ServiceOfferings + */ + List searchForServiceOfferings(ListServiceOfferingsCmd cmd); + + /** + * Searches for Clusters by the specified search criteria + * @param c + * @return + */ + List searchForClusters(ListClustersCmd c); + + /** + * Searches for Pods by the specified search criteria + * Can search by: pod name and/or zone name + * @param cmd + * @return List of Pods + */ + List 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 + * @param cmd + * @return updated template + * @throws InvalidParameterValueException, PermissionDeniedException + */ + VirtualMachineTemplate updateTemplate(UpdateIsoCmd cmd); + VirtualMachineTemplate updateTemplate(UpdateTemplateCmd cmd); + + /** + * 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. + */ + List searchForUserVMs(ListVMsCmd cmd); + + /** + * Update an existing port forwarding rule on the given public IP / public port for the given protocol + * @param cmd - the UpdatePortForwardingRuleCmd command that wraps publicIp, privateIp, publicPort, privatePort, protocol of the rule to update + * @return the new firewall rule if updated, null if no rule on public IP / public port of that protocol could be found + */ + FirewallRule updatePortForwardingRule(UpdatePortForwardingRuleCmd 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. + */ + List searchForEvents(ListEventsCmd c); + + /** + * registerPreallocatedLun registers a preallocated lun in our database. + * + * @param cmd the API command wrapping the register parameters + * - targetIqn iqn for the storage server. + * - portal portal ip address for the storage server. + * - lun lun # + * - size size of the lun + * - dcId data center to attach to + * - tags tags to attach to the lun + * @return the new PreAllocatedLun + */ + Object registerPreallocatedLun(RegisterPreallocatedLunCmd cmd); + + /** + * 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. + */ + List searchForRouters(ListRoutersCmd cmd); + + /** revisit + * Obtains a list of storage volumes by the specified search criteria. + * Can search by: "userId", "vType", "instanceId", "dataCenterId", "podId", "hostId" + * @param cmd + * @return List of Volumes. + */ + List searchForVolumes(ListVolumesCmd cmd); + + /** + * 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 + */ + List searchForIPAddresses(ListPublicIpAddressesCmd cmd); + + /** + * Obtains a list of all guest OS. + * @return list of GuestOS + */ + List listGuestOSByCriteria(ListGuestOsCmd cmd); + + /** + * Obtains a list of all guest OS categories. + * @return list of GuestOSCategories + */ + List listGuestOSCategoriesByCriteria(ListGuestOsCategoriesCmd cmd); + + VirtualMachine stopSystemVM(StopSystemVmCmd cmd); + VirtualMachine startSystemVM(StartSystemVMCmd cmd); + VirtualMachine rebootSystemVM(RebootSystemVmCmd cmd); + /** + * Search for domains owned by the given domainId/domainName (those parameters are wrapped + * in a command object. + * @return list of domains owned by the given user + */ + List searchForDomains(ListDomainsCmd c); + + List searchForDomainChildren(ListDomainChildrenCmd cmd); + + /** + * create a new domain + * @param command - the create command defining the name to use and the id of the parent domain under which to create the new domain. + */ + Domain createDomain(CreateDomainCmd command); + + /** + * delete a domain with the given domainId + * @param cmd the command wrapping the delete parameters + * - domainId + * - ownerId + * - cleanup: whether or not to delete all accounts/VMs/sub-domains when deleting the domain + */ + boolean deleteDomain(DeleteDomainCmd cmd); + + /** + * update an existing domain + * @param cmd - the command containing domainId and new domainName + * @return Domain object if the command succeeded + * @throws InvalidParameterValueException, PermissionDeniedException + */ + Domain updateDomain(UpdateDomainCmd cmd); + + /** + * Searches for accounts by the specified search criteria + * Can search by: "id", "name", "domainid", "type" + * @param cmd + * @return List of Accounts + */ + List searchForAccounts(ListAccountsCmd cmd); + + /** + * Searches for alerts + * @param c + * @return List of Alerts + */ + List searchForAlerts(ListAlertsCmd cmd); + + /** + * list all the capacity rows in capacity operations table + * @param cmd + * @return List of capacities + */ + List listCapacities(ListCapacityCmd cmd); + + /** + * List all snapshots of a disk volume. Optionaly lists snapshots created by specified interval + * @param cmd the command containing the search criteria (order by, limit, etc.) + * @return list of snapshots + * @throws InvalidParameterValueException + * @throws PermissionDeniedException + */ + List listSnapshots(ListSnapshotsCmd cmd); + + /** + * List the permissions on a template. This will return a list of account names that have been granted permission to launch instances from the template. + * @param cmd the command wrapping the search criteria (template id) + * @return list of account names that have been granted permission to launch instances from the template + */ + List listTemplatePermissions(ListTemplateOrIsoPermissionsCmd cmd); + + /** + * List ISOs that match the specified criteria. + * @param cmd The command that wraps the (optional) templateId, name, keyword, templateFilter, bootable, account, and zoneId parameters. + * @return list of ISOs + */ + List listIsos(ListIsosCmd cmd); + + /** + * List templates that match the specified criteria. + * @param cmd The command that wraps the (optional) templateId, name, keyword, templateFilter, bootable, account, and zoneId parameters. + * @return list of ISOs + */ + List listTemplates(ListTemplatesCmd cmd); + + /** + * 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 + */ + List searchForDiskOfferings(ListDiskOfferingsCmd cmd); + + /** + * 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 + */ + List listLoadBalancerInstances(ListLoadBalancerRuleInstancesCmd cmd); + + /** + * 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 + * by id, name, public ip, and vm instance id + * @return list of load balancers that match the criteria + */ + List searchForLoadBalancers(ListLoadBalancerRulesCmd 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 + */ + List searchForStoragePools(ListStoragePoolsCmd cmd); + + /** + * 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 + */ + List searchForSystemVm(ListSystemVMsCmd cmd); + + /** + * Returns back a SHA1 signed response + * @param userId -- id for the user + * @return -- ArrayList of + */ + ArrayList getCloudIdentifierResponse(GetCloudIdentifierCmd cmd); + + public List getPreAllocatedLuns(ListPreallocatedLunsCmd cmd); + + boolean updateTemplatePermissions(UpdateTemplatePermissionsCmd cmd); + boolean updateTemplatePermissions(UpdateIsoPermissionsCmd cmd); + String[] createApiKeyAndSecretKey(RegisterCmd cmd); + + InstanceGroup updateVmGroup(UpdateVMGroupCmd cmd); + + List searchForVmGroups(ListVMGroupsCmd cmd); + + Map listCapabilities(ListCapabilitiesCmd cmd); + + /** + * 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), id (the id of the volume) + * @throws URISyntaxException + * @throws InternalErrorException + * @throws PermissionDeniedException + * + */ + Long extractVolume(ExtractVolumeCmd cmd) throws URISyntaxException; + + /** + * return an array of available hypervisors + * @param cmd + * @return an array of available hypervisors in the cloud + */ + String[] getHypervisors(ListHypervisorsCmd cmd); + + /** + * 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 + * @throws ServerApiException -- even if one of the console proxy patching fails, we throw back this exception + */ + String uploadCertificate(UploadCustomCertificateCmd cmd); + + public List searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd); + + public List searchForVpnUsers(ListVpnUsersCmd cmd); + + List searchForIpForwardingRules(ListIpForwardingRulesCmd cmd); + + String getVersion(); + + /** + * Searches for vlan by the specified search criteria + * Can search by: "id", "vlan", "name", "zoneID" + * @param cmd + * @return List of Vlans + */ + List 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 + */ + List searchForAsyncJobs(ListAsyncJobsCmd cmd); + + /** + * Generates a random password that will be used (initially) by newly created and started virtual machines + * @return a random password + */ + String generateRandomPassword(); + /** + * Unregisters a preallocated lun in our database + * @param cmd the api command wrapping the id of the lun + * @return true if unregistered; false if not. + * @throws IllegalArgumentException + */ + boolean unregisterPreallocatedLun(DeletePreallocatedLunCmd cmd) throws IllegalArgumentException; + + + +} diff --git a/core/src/com/cloud/storage/GuestOS.java b/api/src/com/cloud/storage/GuestOS.java similarity index 95% rename from core/src/com/cloud/storage/GuestOS.java rename to api/src/com/cloud/storage/GuestOS.java index fca72040929..7934280fcef 100644 --- a/core/src/com/cloud/storage/GuestOS.java +++ b/api/src/com/cloud/storage/GuestOS.java @@ -20,7 +20,8 @@ package com.cloud.storage; public interface GuestOS { - Long getId(); + long getId(); String getName(); String getDisplayName(); + long getCategoryId(); } diff --git a/core/src/com/cloud/event/EventState.java b/api/src/com/cloud/storage/GuestOsCategory.java similarity index 81% rename from core/src/com/cloud/event/EventState.java rename to api/src/com/cloud/storage/GuestOsCategory.java index e6c32b135e5..2a5b691facb 100644 --- a/core/src/com/cloud/event/EventState.java +++ b/api/src/com/cloud/storage/GuestOsCategory.java @@ -15,11 +15,17 @@ * along with this program. If not, see . * */ +package com.cloud.storage; -package com.cloud.event; - -public enum EventState { - Scheduled, - Started, - Completed; -} \ No newline at end of file +/** + * @author ahuang + * + */ +public interface GuestOsCategory { + long getId(); + + String getName(); + + void setName(String name); + +} diff --git a/core/src/com/cloud/storage/Snapshot.java b/api/src/com/cloud/storage/Snapshot.java similarity index 97% rename from core/src/com/cloud/storage/Snapshot.java rename to api/src/com/cloud/storage/Snapshot.java index 87ae90509f0..284c091b192 100644 --- a/core/src/com/cloud/storage/Snapshot.java +++ b/api/src/com/cloud/storage/Snapshot.java @@ -21,7 +21,7 @@ package com.cloud.storage; import java.util.Date; public interface Snapshot { - public enum SnapshotType { + public enum Type { MANUAL, RECURRING, TEMPLATE; diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java new file mode 100644 index 00000000000..f8fd6d290dc --- /dev/null +++ b/api/src/com/cloud/storage/StorageService.java @@ -0,0 +1,92 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.storage; + +import java.net.UnknownHostException; + +import com.cloud.api.ServerApiException; +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.DeleteVolumeCmd; +import com.cloud.api.commands.PreparePrimaryStorageForMaintenanceCmd; +import com.cloud.api.commands.UpdateStoragePoolCmd; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceInUseException; + +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. + * @return + * @throws ResourceInUseException + * @throws IllegalArgumentException + * @throws UnknownHostException + * @throws ResourceAllocationException + */ + StoragePool createPool(CreateStoragePoolCmd cmd) throws ResourceInUseException, IllegalArgumentException, UnknownHostException, ResourceAllocationException; + + /** + * 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) + * @return the volume object + * @throws InvalidParameterValueException + * @throws PermissionDeniedException + */ + Volume allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationException; + + /** + * Creates the volume based on the given criteria + * @param cmd the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, name) + * @return the volume object + */ + Volume createVolume(CreateVolumeCmd cmd); + + boolean deleteVolume(DeleteVolumeCmd cmd) throws InvalidParameterValueException; + /** + * Delete the storage pool + * @param cmd - the command specifying poolId + * @return success or failure + * @throws InvalidParameterValueException + */ + boolean deletePool(DeletePoolCmd cmd) throws InvalidParameterValueException; + /** + * Enable maintenance for primary storage + * @param cmd - the command specifying primaryStorageId + * @return the primary storage pool + * @throws ServerApiException + */ + public StoragePool preparePrimaryStorageForMaintenance(PreparePrimaryStorageForMaintenanceCmd cmd) throws ServerApiException; + + /** + * Complete maintenance for primary storage + * @param cmd - the command specifying primaryStorageId + * @return the primary storage pool + * @throws ServerApiException + */ + public StoragePool cancelPrimaryStorageForMaintenance(CancelPrimaryStorageMaintenanceCmd cmd) throws ServerApiException; + + public StoragePool updateStoragePool(UpdateStoragePoolCmd cmd) throws IllegalArgumentException; + + + + +} diff --git a/api/src/com/cloud/storage/Upload.java b/api/src/com/cloud/storage/Upload.java new file mode 100755 index 00000000000..a7b0693b05e --- /dev/null +++ b/api/src/com/cloud/storage/Upload.java @@ -0,0 +1,43 @@ +package com.cloud.storage; + +import java.util.Date; + +public interface Upload { + + 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} + public static enum Type {VOLUME, TEMPLATE, ISO} + public static enum Mode {FTP_UPLOAD, HTTP_DOWNLOAD} + + long getHostId(); + + long getId(); + + Date getCreated(); + + Date getLastUpdated(); + + String getErrorString(); + + String getJobId(); + + int getUploadPercent(); + + Status getUploadState(); + + long getTypeId(); + + Type getType(); + + Mode getMode(); + + String getUploadUrl(); + + void setId(Long id); + + void setCreated(Date created); + + String getInstallPath(); + + void setInstallPath(String installPath); + +} diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index dbcf926b93e..330b2820bb4 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Set; import com.cloud.acl.ControlledEntity; +import com.cloud.async.AsyncInstanceCreateStatus; import com.cloud.template.BasedOn; import com.cloud.utils.fsm.FiniteState; import com.cloud.utils.fsm.StateMachine; @@ -152,4 +153,12 @@ public interface Volume extends ControlledEntity, BasedOn { Date getAttached(); void setAttached(Date attached); + Long getDeviceId(); + + Date getCreated(); + AsyncInstanceCreateStatus getStatus(); + + boolean getDestroyed(); + + long getDiskOfferingId(); } diff --git a/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java b/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java new file mode 100644 index 00000000000..258dcdeb860 --- /dev/null +++ b/api/src/com/cloud/storage/snapshot/SnapshotPolicy.java @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.storage.snapshot; + +public interface SnapshotPolicy { + long getId(); + + long getVolumeId(); + + void setSchedule(String schedule); + + String getSchedule(); + + void setInterval(short interval); + + void setTimezone(String timezone); + + String getTimezone(); + + short getInterval(); + + void setMaxSnaps(int maxSnaps); + + int getMaxSnaps(); + + boolean isActive(); + + void setActive(boolean active); +} diff --git a/api/src/com/cloud/storage/snapshot/SnapshotSchedule.java b/api/src/com/cloud/storage/snapshot/SnapshotSchedule.java new file mode 100644 index 00000000000..c84d554afd1 --- /dev/null +++ b/api/src/com/cloud/storage/snapshot/SnapshotSchedule.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.storage.snapshot; + +import java.util.Date; + +public interface SnapshotSchedule { + long getId(); + + Long getVolumeId(); + + Long getPolicyId(); + + void setPolicyId(long policyId); + + /** + * @return the scheduledTimestamp + */ + Date getScheduledTimestamp(); + + void setScheduledTimestamp(Date scheduledTimestamp); + + Long getAsyncJobId(); + + void setAsyncJobId(long asyncJobId); + + Long getSnapshotId(); + + void setSnapshotId(Long snapshotId); + +} diff --git a/api/src/com/cloud/storage/snapshot/SnapshotService.java b/api/src/com/cloud/storage/snapshot/SnapshotService.java new file mode 100644 index 00000000000..52f7b43c089 --- /dev/null +++ b/api/src/com/cloud/storage/snapshot/SnapshotService.java @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.storage.snapshot; + +import java.util.List; + +import com.cloud.api.commands.CreateSnapshotCmd; +import com.cloud.api.commands.CreateSnapshotInternalCmd; +import com.cloud.api.commands.CreateSnapshotPolicyCmd; +import com.cloud.api.commands.DeleteSnapshotCmd; +import com.cloud.api.commands.DeleteSnapshotPoliciesCmd; +import com.cloud.api.commands.ListRecurringSnapshotScheduleCmd; +import com.cloud.api.commands.ListSnapshotPoliciesCmd; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.storage.Snapshot; + +public interface SnapshotService { + /** + * Create a snapshot of a volume + * @param cmd the API command wrapping the parameters for creating the snapshot (mainly volumeId) + * @return the Snapshot that was created + */ + Snapshot createSnapshot(CreateSnapshotCmd cmd) throws InvalidParameterValueException, ResourceAllocationException; + + /** + * An internal method for creating recurring snapshots. The command is not exposed through the API but is used to hook into the async framework. + * @param cmd the command specifying volumeId and policyId + * @return the created snapshot + * @throws ResourceAllocationException + */ + Snapshot createSnapshotInternal(CreateSnapshotInternalCmd cmd) throws ResourceAllocationException; + + /** + * Delete specified snapshot from the specified. + * If no other policies are assigned it calls destroy snapshot. + * This will be used for manual snapshots too. + */ + boolean deleteSnapshot(DeleteSnapshotCmd cmd); + + /** + * Creates a policy with specified schedule. maxSnaps specifies the number of most recent snapshots that are to be retained. + * If the number of snapshots go beyond maxSnaps the oldest snapshot is deleted + * @param cmd the command that + * @return the newly created snapshot policy if success, null otherwise + */ + SnapshotPolicy createPolicy(CreateSnapshotPolicyCmd cmd); + + /** + * Get the recurring snapshots scheduled for this volume currently along with the time at which they are scheduled + * @param cmd the command wrapping the volumeId (volume for which the snapshots are required) and policyId (to show snapshots for only this policy). + * @return The list of snapshot schedules. + */ + public List findRecurringSnapshotSchedule(ListRecurringSnapshotScheduleCmd cmd); + + /** + * list all snapshot policies assigned to the specified volume + * @param cmd the command that specifies the volume criteria + * @return list of snapshot policies + */ + List listPoliciesforVolume(ListSnapshotPoliciesCmd cmd); + + boolean deleteSnapshotPolicies(DeleteSnapshotPoliciesCmd cmd); + +} diff --git a/api/src/com/cloud/template/TemplateService.java b/api/src/com/cloud/template/TemplateService.java new file mode 100644 index 00000000000..14a43e00591 --- /dev/null +++ b/api/src/com/cloud/template/TemplateService.java @@ -0,0 +1,75 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.template; + +import java.net.URISyntaxException; + +import com.cloud.api.commands.AttachIsoCmd; +import com.cloud.api.commands.CopyIsoCmd; +import com.cloud.api.commands.CopyTemplateCmd; +import com.cloud.api.commands.DeleteIsoCmd; +import com.cloud.api.commands.DeleteTemplateCmd; +import com.cloud.api.commands.DetachIsoCmd; +import com.cloud.api.commands.ExtractIsoCmd; +import com.cloud.api.commands.ExtractTemplateCmd; +import com.cloud.api.commands.RegisterIsoCmd; +import com.cloud.api.commands.RegisterTemplateCmd; +import com.cloud.exception.InternalErrorException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.StorageUnavailableException; + +public interface TemplateService { + + VirtualMachineTemplate registerTemplate(RegisterTemplateCmd cmd) throws URISyntaxException, ResourceAllocationException; + VirtualMachineTemplate registerIso(RegisterIsoCmd cmd) throws IllegalArgumentException, ResourceAllocationException; + VirtualMachineTemplate copyIso(CopyIsoCmd cmd) throws StorageUnavailableException; + VirtualMachineTemplate copyTemplate(CopyTemplateCmd cmd) throws StorageUnavailableException; + boolean detachIso(DetachIsoCmd cmd); + boolean attachIso(AttachIsoCmd cmd); + /** + * Deletes a template + * @param cmd - the command specifying templateId + */ + boolean deleteTemplate(DeleteTemplateCmd cmd); + + /** + * Deletes a template + * @param cmd - the command specifying isoId + * @return true if deletion is successful, false otherwise + * @throws InvalidParameterValueException, InternalErrorException, PermissionDeniedException + */ + boolean deleteIso(DeleteIsoCmd cmd); + + /** + * Extracts an ISO + * @param cmd - the command specifying the mode and id of the ISO + * @return extractId. + * @throws InvalidParameterValueException, InternalErrorException, PermissionDeniedException + */ + Long extract(ExtractIsoCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, InternalErrorException; + + /** + * Extracts a Template + * @param cmd - the command specifying the mode and id of the template + * @return extractId. + * @throws InvalidParameterValueException, InternalErrorException, PermissionDeniedException + */ + Long extract(ExtractTemplateCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, InternalErrorException; +} diff --git a/api/src/com/cloud/template/VirtualMachineTemplate.java b/api/src/com/cloud/template/VirtualMachineTemplate.java index 5cb558ac9bf..658a9ee5dff 100755 --- a/api/src/com/cloud/template/VirtualMachineTemplate.java +++ b/api/src/com/cloud/template/VirtualMachineTemplate.java @@ -17,17 +17,32 @@ */ package com.cloud.template; +import java.util.Date; + import com.cloud.acl.ControlledEntity; +import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.Storage.TemplateType; public interface VirtualMachineTemplate extends ControlledEntity { public static enum BootloaderType { PyGrub, HVM, External, CD }; + public enum TemplateFilter { + featured, // returns templates that have been marked as featured and public + self, // returns templates that have been registered or created by the calling user + selfexecutable, // same as self, but only returns templates that are ready to be deployed with + sharedexecutable, // ready templates that have been granted to the calling user by another user + executable, // templates that are owned by the calling user, or public templates, that can be used to deploy a new VM + community, // returns templates that have been marked as public but not featured + all // all templates (only usable by ROOT admins) + } /** * @return id. */ - Long getId(); + long getId(); + + boolean isFeatured(); /** * @return public or private template @@ -42,4 +57,20 @@ public interface VirtualMachineTemplate extends ControlledEntity { ImageFormat getFormat(); boolean isRequiresHvm(); + + String getDisplayText(); + + boolean getEnablePassword(); + + boolean isCrossZones(); + + Date getCreated(); + + long getGuestOSId(); + + boolean isBootable(); + + TemplateType getTemplateType(); + + HypervisorType getHypervisorType(); } diff --git a/server/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java similarity index 94% rename from server/src/com/cloud/user/AccountService.java rename to api/src/com/cloud/user/AccountService.java index 02b6b6c72e7..a4103978da4 100644 --- a/server/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -32,12 +32,10 @@ import com.cloud.api.commands.UpdateAccountCmd; import com.cloud.api.commands.UpdateResourceLimitCmd; import com.cloud.api.commands.UpdateUserCmd; import com.cloud.configuration.ResourceLimit; -import com.cloud.configuration.ResourceLimitVO; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; -import com.cloud.utils.component.Manager; -public interface AccountService extends Manager { +public interface AccountService { /** * Creates a new user, stores the password as is so encrypted passwords are recommended. @@ -129,6 +127,6 @@ public interface AccountService extends Manager { * @throws InvalidParameterValueException * @throws PermissionDeniedException */ - List searchForLimits(ListResourceLimitsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + List searchForLimits(ListResourceLimitsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; } diff --git a/core/src/com/cloud/user/UserAccount.java b/api/src/com/cloud/user/UserAccount.java similarity index 100% rename from core/src/com/cloud/user/UserAccount.java rename to api/src/com/cloud/user/UserAccount.java diff --git a/core/src/com/cloud/user/UserContext.java b/api/src/com/cloud/user/UserContext.java similarity index 100% rename from core/src/com/cloud/user/UserContext.java rename to api/src/com/cloud/user/UserContext.java diff --git a/api/src/com/cloud/vm/InstanceGroup.java b/api/src/com/cloud/vm/InstanceGroup.java new file mode 100644 index 00000000000..a1ff22dfe2e --- /dev/null +++ b/api/src/com/cloud/vm/InstanceGroup.java @@ -0,0 +1,30 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import java.util.Date; + +import com.cloud.domain.PartOf; +import com.cloud.user.OwnedBy; + +public interface InstanceGroup extends OwnedBy, PartOf { + long getId(); + String getName(); + Date getCreated(); + +} diff --git a/server/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java similarity index 96% rename from server/src/com/cloud/vm/UserVmService.java rename to api/src/com/cloud/vm/UserVmService.java index 1c1a106f14b..1d32258c9d2 100755 --- a/server/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -40,8 +40,8 @@ import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.StorageUnavailableException; -import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume; +import com.cloud.template.VirtualMachineTemplate; import com.cloud.uservm.UserVm; import com.cloud.utils.exception.ExecutionException; @@ -100,7 +100,7 @@ public interface UserVmService { * @return the vm template object if successful, null otherwise * @throws InvalidParameterValueException, PermissionDeniedException */ - VMTemplateVO createPrivateTemplateRecord(CreateTemplateCmd cmd); + VirtualMachineTemplate createPrivateTemplateRecord(CreateTemplateCmd cmd); /** * Creates a private template from a snapshot of a VM @@ -108,7 +108,7 @@ public interface UserVmService { * @return a template if successfully created, null otherwise * @throws InvalidParameterValueException */ - VMTemplateVO createPrivateTemplate(CreateTemplateCmd cmd); + VirtualMachineTemplate createPrivateTemplate(CreateTemplateCmd cmd); /** * Creates a User VM in the database and returns the VM to the caller. @@ -140,7 +140,7 @@ public interface UserVmService { * @param name - name of the group * @param accountId - accountId */ - InstanceGroupVO createVmGroup(CreateVMGroupCmd cmd); + InstanceGroup createVmGroup(CreateVMGroupCmd cmd); boolean deleteVmGroup(DeleteVMGroupCmd cmd); diff --git a/core/src/com/cloud/agent/api/CreateZoneVlanCommand.java b/core/src/com/cloud/agent/api/CreateZoneVlanCommand.java index 81828387370..74cc15beb62 100755 --- a/core/src/com/cloud/agent/api/CreateZoneVlanCommand.java +++ b/core/src/com/cloud/agent/api/CreateZoneVlanCommand.java @@ -17,7 +17,7 @@ */ package com.cloud.agent.api; -import com.cloud.vm.DomainRouter; +import com.cloud.network.router.VirtualRouter; import com.cloud.vm.DomainRouterVO; @@ -38,7 +38,7 @@ public class CreateZoneVlanCommand extends Command { this.router = router; } - public DomainRouter getRouter() { + public VirtualRouter getRouter() { return router; } diff --git a/core/src/com/cloud/agent/api/StartCommand.java b/core/src/com/cloud/agent/api/StartCommand.java index 82f3daa1819..eb5c80e9765 100755 --- a/core/src/com/cloud/agent/api/StartCommand.java +++ b/core/src/com/cloud/agent/api/StartCommand.java @@ -20,10 +20,10 @@ package com.cloud.agent.api; import java.util.List; import java.util.Map; +import com.cloud.network.router.VirtualRouter; import com.cloud.offering.ServiceOffering; import com.cloud.storage.VolumeVO; import com.cloud.uservm.UserVm; -import com.cloud.vm.DomainRouter; import com.cloud.vm.UserVmVO; public class StartCommand extends AbstractStartCommand { @@ -48,13 +48,13 @@ public class StartCommand extends AbstractStartCommand { boolean bootFromISO; String guestOSDescription; - public StartCommand(UserVm vm, String vmName, ServiceOffering offering, int networkRate, int multicastRate, DomainRouter router, String storageHost, String imagePath, String guestNetworkId, int utilization, int cpuWeight, List vols, int bits, String isoPath, boolean bootFromISO, String guestOSDescription) { + public StartCommand(UserVm vm, String vmName, ServiceOffering offering, int networkRate, int multicastRate, VirtualRouter router, String storageHost, String imagePath, String guestNetworkId, int utilization, int cpuWeight, List vols, int bits, String isoPath, boolean bootFromISO, String guestOSDescription) { super(vmName, storageHost, vols); initialize(vm, offering, networkRate, multicastRate, router, imagePath, guestNetworkId, utilization, cpuWeight, bits, isoPath, bootFromISO, guestOSDescription); } private void initialize(UserVm vm, - ServiceOffering offering, int networkRate, int multicastRate, DomainRouter router, String imagePath, + ServiceOffering offering, int networkRate, int multicastRate, VirtualRouter router, String imagePath, String guestNetworkId, int utilization, int cpuWeight, int bits, String isoPath, boolean bootFromISO, String guestOSDescription) { id = vm.getId(); guestIpAddress = vm.getGuestIpAddress(); @@ -96,7 +96,7 @@ public class StartCommand extends AbstractStartCommand { } public StartCommand(UserVmVO vm, String vmName, ServiceOffering offering, int networkRate, int multicastRate, - DomainRouter router, String[] storageIps, String imagePath, + VirtualRouter router, String[] storageIps, String imagePath, String guestNetworkId, int utilization, int cpuWeight, List vols, boolean mirroredVols, int bits, String isoPath, boolean bootFromISO, String guestOSDescription) { super(vmName, storageIps, vols, mirroredVols); diff --git a/core/src/com/cloud/agent/api/StartRouterCommand.java b/core/src/com/cloud/agent/api/StartRouterCommand.java index 3afc6b4e0ec..fea4dbd85ac 100755 --- a/core/src/com/cloud/agent/api/StartRouterCommand.java +++ b/core/src/com/cloud/agent/api/StartRouterCommand.java @@ -19,9 +19,9 @@ package com.cloud.agent.api; import java.util.List; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.router.VirtualRouter.Role; import com.cloud.storage.VolumeVO; -import com.cloud.vm.DomainRouter; -import com.cloud.vm.DomainRouter.Role; import com.cloud.vm.DomainRouterVO; @@ -53,7 +53,7 @@ public class StartRouterCommand extends AbstractStartCommand { this.mgmt_host = mgmtHost; } - public DomainRouter getRouter() { + public VirtualRouter getRouter() { return router; } diff --git a/core/src/com/cloud/alert/AlertVO.java b/core/src/com/cloud/alert/AlertVO.java index 409bed65508..d8d45d0c809 100644 --- a/core/src/com/cloud/alert/AlertVO.java +++ b/core/src/com/cloud/alert/AlertVO.java @@ -18,26 +18,26 @@ package com.cloud.alert; -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; - +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + import com.cloud.utils.db.GenericDao; @Entity @Table(name="alert") -public class AlertVO { +public class AlertVO implements Alert{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id = null; + private long id; @Column(name="type") private short type; @@ -70,14 +70,11 @@ public class AlertVO { this.id = id; } - public Long getId() { + @Override + public long getId() { return id; } - - public void setId(Long id) { - this.id = id; - } - + @Override public short getType() { return type; } @@ -86,6 +83,7 @@ public class AlertVO { this.type = type; } + @Override public String getSubject() { return subject; } @@ -94,6 +92,7 @@ public class AlertVO { this.subject = subject; } + @Override public Long getPodId() { return podId; } @@ -102,6 +101,7 @@ public class AlertVO { this.podId = podId; } + @Override public long getDataCenterId() { return dataCenterId; } @@ -110,6 +110,7 @@ public class AlertVO { this.dataCenterId = dataCenterId; } + @Override public int getSentCount() { return sentCount; } @@ -118,6 +119,7 @@ public class AlertVO { this.sentCount = sentCount; } + @Override public Date getCreatedDate() { return createdDate; } @@ -126,6 +128,7 @@ public class AlertVO { this.createdDate = createdDate; } + @Override public Date getLastSent() { return lastSent; } @@ -134,6 +137,7 @@ public class AlertVO { this.lastSent = lastSent; } + @Override public Date getResolved() { return resolved; } diff --git a/core/src/com/cloud/async/AsyncJobVO.java b/core/src/com/cloud/async/AsyncJobVO.java index eecfb410da5..f2da44f9922 100644 --- a/core/src/com/cloud/async/AsyncJobVO.java +++ b/core/src/com/cloud/async/AsyncJobVO.java @@ -18,23 +18,23 @@ package com.cloud.async; -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; import javax.persistence.Transient; - + import com.cloud.utils.db.GenericDao; @Entity @Table(name="async_job") -public class AsyncJobVO { +public class AsyncJobVO implements AsyncJob { public static final int CALLBACK_POLLING = 0; public static final int CALLBACK_EMAIL = 1; @@ -133,6 +133,7 @@ public class AsyncJobVO { this.callbackAddress = callbackAddress; } + @Override public Long getId() { return id; } @@ -141,7 +142,8 @@ public class AsyncJobVO { this.id = id; } - public long getUserId() { + @Override + public long getUserId() { return userId; } @@ -149,7 +151,8 @@ public class AsyncJobVO { this.userId = userId; } - public long getAccountId() { + @Override + public long getAccountId() { return accountId; } @@ -157,7 +160,8 @@ public class AsyncJobVO { this.accountId = accountId; } - public String getCmd() { + @Override + public String getCmd() { return cmd; } @@ -165,7 +169,8 @@ public class AsyncJobVO { this.cmd = cmd; } - public int getCmdVersion() { + @Override + public int getCmdVersion() { return cmdVersion; } @@ -173,7 +178,8 @@ public class AsyncJobVO { cmdVersion = version; } - public String getCmdInfo() { + @Override + public String getCmdInfo() { return cmdInfo; } @@ -181,7 +187,8 @@ public class AsyncJobVO { this.cmdInfo = cmdInfo; } - public int getCallbackType() { + @Override + public int getCallbackType() { return callbackType; } @@ -189,7 +196,8 @@ public class AsyncJobVO { this.callbackType = callbackType; } - public String getCallbackAddress() { + @Override + public String getCallbackAddress() { return callbackAddress; } @@ -197,7 +205,8 @@ public class AsyncJobVO { this.callbackAddress = callbackAddress; } - public int getStatus() { + @Override + public int getStatus() { return status; } @@ -205,7 +214,8 @@ public class AsyncJobVO { this.status = status; } - public int getProcessStatus() { + @Override + public int getProcessStatus() { return processStatus; } @@ -213,7 +223,8 @@ public class AsyncJobVO { processStatus = status; } - public int getResultCode() { + @Override + public int getResultCode() { return resultCode; } @@ -221,7 +232,8 @@ public class AsyncJobVO { this.resultCode = resultCode; } - public String getResult() { + @Override + public String getResult() { return result; } @@ -229,7 +241,8 @@ public class AsyncJobVO { this.result = result; } - public Long getInitMsid() { + @Override + public Long getInitMsid() { return initMsid; } @@ -237,7 +250,8 @@ public class AsyncJobVO { this.initMsid = initMsid; } - public Long getCompleteMsid() { + @Override + public Long getCompleteMsid() { return completeMsid; } @@ -245,7 +259,8 @@ public class AsyncJobVO { this.completeMsid = completeMsid; } - public Date getCreated() { + @Override + public Date getCreated() { return created; } @@ -253,7 +268,8 @@ public class AsyncJobVO { this.created = created; } - public Date getLastUpdated() { + @Override + public Date getLastUpdated() { return lastUpdated; } @@ -261,7 +277,8 @@ public class AsyncJobVO { this.lastUpdated = lastUpdated; } - public Date getLastPolled() { + @Override + public Date getLastPolled() { return lastPolled; } @@ -269,7 +286,8 @@ public class AsyncJobVO { this.lastPolled = lastPolled; } - public Date getRemoved() { + @Override + public Date getRemoved() { return removed; } @@ -277,6 +295,7 @@ public class AsyncJobVO { this.removed = removed; } + @Override public String getInstanceType() { return instanceType; } @@ -285,7 +304,8 @@ public class AsyncJobVO { this.instanceType = instanceType; } - public Long getInstanceId() { + @Override + public Long getInstanceId() { return instanceId; } @@ -293,6 +313,7 @@ public class AsyncJobVO { this.instanceId = instanceId; } + @Override public String getSessionKey() { return sessionKey; } @@ -301,6 +322,7 @@ public class AsyncJobVO { this.sessionKey = sessionKey; } + @Override public String getCmdOriginator() { return cmdOriginator; } @@ -317,6 +339,7 @@ public class AsyncJobVO { this.syncSource = syncSource; } + @Override public boolean isFromPreviousSession() { return fromPreviousSession; } @@ -325,7 +348,8 @@ public class AsyncJobVO { this.fromPreviousSession = fromPreviousSession; } - public String toString() { + @Override + public String toString() { StringBuffer sb = new StringBuffer(); sb.append("AsyncJobVO {id:").append(getId()); sb.append(", userId: ").append(getUserId()); diff --git a/core/src/com/cloud/capacity/CapacityVO.java b/core/src/com/cloud/capacity/CapacityVO.java index 26aed06ffa4..eabf7a9bb6a 100644 --- a/core/src/com/cloud/capacity/CapacityVO.java +++ b/core/src/com/cloud/capacity/CapacityVO.java @@ -18,29 +18,20 @@ package com.cloud.capacity; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; @Entity @Table(name="op_host_capacity") -public class CapacityVO { - public static final short CAPACITY_TYPE_MEMORY = 0; - public static final short CAPACITY_TYPE_CPU = 1; - public static final short CAPACITY_TYPE_STORAGE = 2; - public static final short CAPACITY_TYPE_STORAGE_ALLOCATED = 3; - public static final short CAPACITY_TYPE_PUBLIC_IP = 4; - public static final short CAPACITY_TYPE_PRIVATE_IP = 5; - public static final short CAPACITY_TYPE_SECONDARY_STORAGE = 6; - - +public class CapacityVO implements Capacity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id = null; + private long id; @Column(name="host_id") private Long hostOrPoolId; @@ -71,10 +62,12 @@ public class CapacityVO { this.capacityType = capacityType; } - public Long getId() { + @Override + public long getId() { return id; } + @Override public Long getHostOrPoolId() { return hostOrPoolId; } @@ -82,6 +75,7 @@ public class CapacityVO { public void setHostId(Long hostId) { this.hostOrPoolId = hostId; } + @Override public long getDataCenterId() { return dataCenterId; } @@ -89,24 +83,28 @@ public class CapacityVO { this.dataCenterId = dataCenterId; } + @Override public Long getPodId() { return podId; } public void setPodId(long podId) { this.podId = new Long(podId); } + @Override public long getUsedCapacity() { return usedCapacity; } public void setUsedCapacity(long usedCapacity) { this.usedCapacity = usedCapacity; } + @Override public long getTotalCapacity() { return totalCapacity; } public void setTotalCapacity(long totalCapacity) { this.totalCapacity = totalCapacity; } + @Override public short getCapacityType() { return capacityType; } diff --git a/core/src/com/cloud/event/EventVO.java b/core/src/com/cloud/event/EventVO.java index 76919cbaebb..4efd8f1c8db 100644 --- a/core/src/com/cloud/event/EventVO.java +++ b/core/src/com/cloud/event/EventVO.java @@ -18,38 +18,38 @@ package com.cloud.event; -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; +import java.util.Date; + +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.SecondaryTable; -import javax.persistence.Table; -import javax.persistence.Transient; -import javax.persistence.PrimaryKeyJoinColumn; - +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.SecondaryTable; +import javax.persistence.Table; +import javax.persistence.Transient; + import com.cloud.utils.db.GenericDao; @Entity @Table(name="event") @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class EventVO { +public class EventVO implements Event { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id = (long)-1; + private long id = -1; @Column(name="type") private String type; @Enumerated(value=EnumType.STRING) @Column(name="state") - private EventState state = EventState.Completed; + private State state = State.Completed; @Column(name="description") private String description; @@ -91,75 +91,83 @@ public class EventVO { public EventVO() { } - public Long getId() { + public long getId() { return id; } - public void setId(Long id) { - this.id = id; - } - public String getType() { + @Override + public String getType() { return type; } public void setType(String type) { this.type = type; } - public EventState getState() { + @Override + public State getState() { return state; } - public void setState(EventState state) { + public void setState(State state) { this.state = state; } - public String getDescription() { + @Override + public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } - public Date getCreateDate() { + @Override + public Date getCreateDate() { return createDate; } public void setCreatedDate(Date createdDate) { createDate = createdDate; } - public long getUserId() { + @Override + public long getUserId() { return userId; } public void setUserId(long userId) { this.userId = userId; } + @Override public long getAccountId() { return accountId; } public void setAccountId(long accountId) { this.accountId = accountId; } + @Override public long getDomainId() { return domainId; } public void setDomainId(long domainId) { this.domainId = domainId; } - public String getAccountName() { + @Override + public String getAccountName() { return accountName; } public void setAccountName(String accountName) { this.accountName = accountName; } - public int getTotalSize() { + @Override + public int getTotalSize() { return totalSize; } public void setTotalSize(int totalSize) { this.totalSize = totalSize; } - public String getLevel() { + @Override + public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } - public long getStartId() { + @Override + public long getStartId() { return startId; } @@ -167,7 +175,8 @@ public class EventVO { this.startId = startId; } - public String getParameters() { + @Override + public String getParameters() { return parameters; } public void setParameters(String parameters) { diff --git a/core/src/com/cloud/event/dao/EventDaoImpl.java b/core/src/com/cloud/event/dao/EventDaoImpl.java index a50c37cbd4b..c508a003249 100644 --- a/core/src/com/cloud/event/dao/EventDaoImpl.java +++ b/core/src/com/cloud/event/dao/EventDaoImpl.java @@ -25,7 +25,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; -import com.cloud.event.EventState; +import com.cloud.event.Event.State; import com.cloud.event.EventVO; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; @@ -69,7 +69,7 @@ public class EventDaoImpl extends GenericDaoBase implements Event public List listStartedEvents(Date minTime, Date maxTime) { if (minTime == null || maxTime == null) return null; SearchCriteria sc = StartedEventsSearch.create(); - sc.setParameters("state", EventState.Completed); + sc.setParameters("state", State.Completed); sc.setParameters("startId", 0); sc.setParameters("createDate", minTime, maxTime); return listIncludingRemovedBy(sc, null); @@ -78,7 +78,7 @@ public class EventDaoImpl extends GenericDaoBase implements Event @Override public EventVO findCompletedEvent(long startId) { SearchCriteria sc = CompletedEventSearch.create(); - sc.setParameters("state", EventState.Completed); + sc.setParameters("state", State.Completed); sc.setParameters("startId", startId); return findOneIncludingRemovedBy(sc); } diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index e3dbcad4261..2e114e8cd68 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -157,6 +157,7 @@ import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; +import com.cloud.network.router.VirtualRouter; import com.cloud.resource.ServerResource; import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; @@ -177,7 +178,6 @@ import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.Script; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DiskProfile; -import com.cloud.vm.DomainRouter; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.State; import com.cloud.vm.VirtualMachine; @@ -3153,7 +3153,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR protected StartRouterAnswer execute(StartRouterCommand cmd) { final String vmName = cmd.getVmName(); - final DomainRouter router = cmd.getRouter(); + final VirtualRouter router = cmd.getRouter(); try { String tag = router.getVnet(); Network network = null; diff --git a/core/src/com/cloud/network/IPAddressVO.java b/core/src/com/cloud/network/IPAddressVO.java index c55764a2a0c..0592921893f 100644 --- a/core/src/com/cloud/network/IPAddressVO.java +++ b/core/src/com/cloud/network/IPAddressVO.java @@ -18,14 +18,14 @@ package com.cloud.network; -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; /** * A bean representing a public IP Address @@ -35,7 +35,7 @@ import javax.persistence.TemporalType; */ @Entity @Table(name=("user_ip_address")) -public class IPAddressVO { +public class IPAddressVO implements IpAddress { @Column(name="account_id") private Long accountId = null; @@ -72,59 +72,74 @@ public class IPAddressVO { this.sourceNat = sourceNat; } - public long getDataCenterId() { + @Override + public long getDataCenterId() { return dataCenterId; } - public String getAddress() { + @Override + public String getAddress() { return address; } - public Long getAccountId() { + @Override + public Long getAccountId() { return accountId; } + @Override public Long getDomainId() { return domainId; } - public Date getAllocated() { + @Override + public Date getAllocated() { return allocated; } - public boolean isSourceNat() { + @Override + public boolean isSourceNat() { return sourceNat; } - public void setAccountId(Long accountId) { + @Override + public void setAccountId(Long accountId) { this.accountId = accountId; } - public void setDomainId(Long domainId) { + @Override + public void setDomainId(Long domainId) { this.domainId = domainId; } - public void setSourceNat(boolean sourceNat) { + @Override + public void setSourceNat(boolean sourceNat) { this.sourceNat = sourceNat; } - public boolean getSourceNat() { + @Override + public boolean getSourceNat() { return this.sourceNat; } - public void setAllocated(Date allocated) { + @Override + public void setAllocated(Date allocated) { this.allocated = allocated; } - public long getVlanDbId() { + @Override + public long getVlanDbId() { return this.vlanDbId; } - public void setVlanDbId(long vlanDbId) { + @Override + public void setVlanDbId(long vlanDbId) { this.vlanDbId = vlanDbId; } - public boolean isOneToOneNat() { + @Override + public boolean isOneToOneNat() { return oneToOneNat; } - public void setOneToOneNat(boolean oneToOneNat) { + @Override + public void setOneToOneNat(boolean oneToOneNat) { this.oneToOneNat = oneToOneNat; } diff --git a/core/src/com/cloud/network/LoadBalancerVO.java b/core/src/com/cloud/network/LoadBalancerVO.java index d5a2500ae44..b929df23bbb 100644 --- a/core/src/com/cloud/network/LoadBalancerVO.java +++ b/core/src/com/cloud/network/LoadBalancerVO.java @@ -31,7 +31,7 @@ import javax.persistence.Table; @Table(name=("load_balancer")) @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class LoadBalancerVO { +public class LoadBalancerVO implements LoadBalancer { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -76,54 +76,68 @@ public class LoadBalancerVO { this.algorithm = algorithm; } + @Override public long getId() { return id; } + @Override public String getName() { return name; } + @Override public void setName(String name) { this.name = name; } + @Override public String getDescription() { return description; } + @Override public void setDescription(String description) { this.description = description; } + @Override public long getAccountId() { return accountId; } + @Override public String getIpAddress() { return ipAddress; } + @Override public String getPublicPort() { return publicPort; } + @Override public String getPrivatePort() { return privatePort; } + @Override public void setPrivatePort(String privatePort) { this.privatePort = privatePort; } + @Override public String getAlgorithm() { return algorithm; } + @Override public void setAlgorithm(String algorithm) { this.algorithm = algorithm; } + @Override public Long getDomainId() { return domainId; } + @Override public String getAccountName() { return accountName; } diff --git a/core/src/com/cloud/network/RemoteAccessVpnVO.java b/core/src/com/cloud/network/RemoteAccessVpnVO.java index 40fd4b01b02..93750fab13c 100644 --- a/core/src/com/cloud/network/RemoteAccessVpnVO.java +++ b/core/src/com/cloud/network/RemoteAccessVpnVO.java @@ -18,24 +18,24 @@ package com.cloud.network; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.PrimaryKeyJoinColumn; -import javax.persistence.SecondaryTable; -import javax.persistence.Table; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.SecondaryTable; +import javax.persistence.Table; @Entity @Table(name=("remote_access_vpn")) @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class RemoteAccessVpnVO { +public class RemoteAccessVpnVO implements RemoteAccessVpn { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id; + private long id; @Column(name="account_id") private long accountId; @@ -73,61 +73,75 @@ public class RemoteAccessVpnVO { } - public Long getId() { + @Override + public long getId() { return id; } + @Override public long getAccountId() { return accountId; } + @Override public String getAccountName() { return accountName; } - public String getVpnServerAddress() { + @Override + public String getVpnServerAddress() { return vpnServerAddress; } - public void setVpnServerAddress(String vpnServerAddress) { + @Override + public void setVpnServerAddress(String vpnServerAddress) { this.vpnServerAddress = vpnServerAddress; } - public String getIpRange() { + @Override + public String getIpRange() { return ipRange; } - public void setIpRange(String ipRange) { + @Override + public void setIpRange(String ipRange) { this.ipRange = ipRange; } - public String getIpsecPresharedKey() { + @Override + public String getIpsecPresharedKey() { return ipsecPresharedKey; } - public void setIpsecPresharedKey(String ipsecPresharedKey) { + @Override + public void setIpsecPresharedKey(String ipsecPresharedKey) { this.ipsecPresharedKey = ipsecPresharedKey; } - public void setId(Long id) { + @Override + public void setId(Long id) { this.id = id; } - public void setZoneId(long zoneId) { + @Override + public void setZoneId(long zoneId) { this.zoneId = zoneId; } - public long getZoneId() { + @Override + public long getZoneId() { return zoneId; } - public String getLocalIp() { + @Override + public String getLocalIp() { return localIp; } - public long getDomainId() { + @Override + public long getDomainId() { return domainId; } diff --git a/core/src/com/cloud/network/VpnUserVO.java b/core/src/com/cloud/network/VpnUserVO.java index 8067f6a0400..c21fb726b5f 100644 --- a/core/src/com/cloud/network/VpnUserVO.java +++ b/core/src/com/cloud/network/VpnUserVO.java @@ -18,24 +18,24 @@ package com.cloud.network; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.PrimaryKeyJoinColumn; -import javax.persistence.SecondaryTable; -import javax.persistence.Table; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.PrimaryKeyJoinColumn; +import javax.persistence.SecondaryTable; +import javax.persistence.Table; @Entity @Table(name=("vpn_users")) @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class VpnUserVO { +public class VpnUserVO implements VpnUser { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id; + private long id; @Column(name="account_id") private long accountId; @@ -60,19 +60,23 @@ public class VpnUserVO { this.password = password; } - public Long getId() { + @Override + public long getId() { return id; } + @Override public long getAccountId() { return accountId; } + @Override public String getAccountName() { return accountName; } - public String getUsername() { + @Override + public String getUsername() { return username; } @@ -80,7 +84,8 @@ public class VpnUserVO { this.username = userName; } - public String getPassword() { + @Override + public String getPassword() { return password; } @@ -93,7 +98,8 @@ public class VpnUserVO { } - public long getDomainId() { + @Override + public long getDomainId() { return domainId; } diff --git a/core/src/com/cloud/network/security/IngressRuleVO.java b/core/src/com/cloud/network/security/IngressRuleVO.java index 1f15f28200b..ee5b3cf4d3f 100644 --- a/core/src/com/cloud/network/security/IngressRuleVO.java +++ b/core/src/com/cloud/network/security/IngressRuleVO.java @@ -18,25 +18,25 @@ package com.cloud.network.security; -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 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 com.cloud.async.AsyncInstanceCreateStatus; -import com.google.gson.annotations.Expose; +import com.google.gson.annotations.Expose; @Entity @Table(name=("network_ingress_rule")) -public class IngressRuleVO { +public class IngressRuleVO implements IngressRule { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id; + private long id; @Column(name="network_group_id") private long networkGroupId; @@ -87,26 +87,32 @@ public class IngressRuleVO { this.allowedSourceIpCidr = allowedIpCidr; } - public Long getId() { + @Override + public long getId() { return id; } + @Override public long getNetworkGroupId() { return networkGroupId; } + @Override public int getStartPort() { return startPort; } + @Override public int getEndPort() { return endPort; } - public String getProtocol() { + @Override + public String getProtocol() { return protocol; } + @Override public AsyncInstanceCreateStatus getCreateStatus() { return createStatus; } @@ -115,19 +121,23 @@ public class IngressRuleVO { this.createStatus = createStatus; } - public Long getAllowedNetworkId() { + @Override + public Long getAllowedNetworkId() { return allowedNetworkId; } - public String getAllowedNetworkGroup() { + @Override + public String getAllowedNetworkGroup() { return allowedNetworkGroup; } + @Override public String getAllowedNetGrpAcct() { return allowedNetGrpAcct; } - public String getAllowedSourceIpCidr() { + @Override + public String getAllowedSourceIpCidr() { return allowedSourceIpCidr; } } diff --git a/core/src/com/cloud/network/security/NetworkGroupRulesVO.java b/core/src/com/cloud/network/security/NetworkGroupRulesVO.java index cffd84eed42..3e0e4060e8d 100644 --- a/core/src/com/cloud/network/security/NetworkGroupRulesVO.java +++ b/core/src/com/cloud/network/security/NetworkGroupRulesVO.java @@ -13,11 +13,11 @@ import javax.persistence.Table; @Table(name=("network_group")) @SecondaryTable(name="network_ingress_rule", join="left", pkJoinColumns={@PrimaryKeyJoinColumn(name="id", referencedColumnName="network_group_id")}) -public class NetworkGroupRulesVO { +public class NetworkGroupRulesVO implements NetworkGroupRules { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private Long id; + private long id; @Column(name="name") private String name; @@ -60,7 +60,7 @@ public class NetworkGroupRulesVO { public NetworkGroupRulesVO() { } - public NetworkGroupRulesVO(Long id, String name, String description, Long domainId, Long accountId, String accountName, Long ruleId, int startPort, int endPort, String protocol, Long allowedNetworkId, String allowedNetworkGroup, String allowedNetGrpAcct, String allowedSourceIpCidr) { + public NetworkGroupRulesVO(long id, String name, String description, Long domainId, Long accountId, String accountName, Long ruleId, int startPort, int endPort, String protocol, Long allowedNetworkId, String allowedNetworkGroup, String allowedNetGrpAcct, String allowedSourceIpCidr) { this.id = id; this.name = name; this.description = description; @@ -77,7 +77,7 @@ public class NetworkGroupRulesVO { this.allowedSourceIpCidr = allowedSourceIpCidr; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/network/security/NetworkGroupVO.java b/core/src/com/cloud/network/security/NetworkGroupVO.java index 7aa736d070d..c58006917e6 100644 --- a/core/src/com/cloud/network/security/NetworkGroupVO.java +++ b/core/src/com/cloud/network/security/NetworkGroupVO.java @@ -24,13 +24,10 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; - -import com.cloud.domain.PartOf; -import com.cloud.user.OwnedBy; @Entity @Table(name=("network_group")) -public class NetworkGroupVO implements PartOf, OwnedBy { +public class NetworkGroupVO implements NetworkGroup { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -61,6 +58,7 @@ public class NetworkGroupVO implements PartOf, OwnedBy { this.accountName = accountName; } + @Override public long getId() { return id; } diff --git a/core/src/com/cloud/storage/GuestOSCategoryVO.java b/core/src/com/cloud/storage/GuestOSCategoryVO.java index 56076386d64..ae0f0242565 100644 --- a/core/src/com/cloud/storage/GuestOSCategoryVO.java +++ b/core/src/com/cloud/storage/GuestOSCategoryVO.java @@ -26,23 +26,26 @@ import javax.persistence.Table; @Entity @Table(name="guest_os_category") -public class GuestOSCategoryVO { +public class GuestOSCategoryVO implements GuestOsCategory{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - Long id; + long id; @Column(name="name") String name; - public Long getId() { + @Override + public long getId() { return id; } + @Override public String getName() { return name; } + @Override public void setName(String name) { this.name = name; } diff --git a/core/src/com/cloud/storage/GuestOSVO.java b/core/src/com/cloud/storage/GuestOSVO.java index 520e5ba0ced..1e5db2f49ce 100644 --- a/core/src/com/cloud/storage/GuestOSVO.java +++ b/core/src/com/cloud/storage/GuestOSVO.java @@ -30,7 +30,7 @@ public class GuestOSVO implements GuestOS { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - Long id; + long id; @Column(name="category_id") private long categoryId; @@ -41,7 +41,8 @@ public class GuestOSVO implements GuestOS { @Column(name="display_name") String displayName; - public Long getId() { + @Override + public long getId() { return id; } @@ -53,6 +54,7 @@ public class GuestOSVO implements GuestOS { this.categoryId = categoryId; } + @Override public String getName() { return name; } @@ -61,6 +63,7 @@ public class GuestOSVO implements GuestOS { this.name = name; } + @Override public String getDisplayName() { return displayName; } diff --git a/core/src/com/cloud/storage/SnapshotPolicyVO.java b/core/src/com/cloud/storage/SnapshotPolicyVO.java index d58a898de9d..a7c226ddbb2 100644 --- a/core/src/com/cloud/storage/SnapshotPolicyVO.java +++ b/core/src/com/cloud/storage/SnapshotPolicyVO.java @@ -18,21 +18,23 @@ package com.cloud.storage; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +import com.cloud.storage.snapshot.SnapshotPolicy; @Entity @Table(name="snapshot_policy") -public class SnapshotPolicyVO { +public class SnapshotPolicyVO implements SnapshotPolicy { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - Long id; + long id; @Column(name="volume_id") long volumeId; @@ -63,7 +65,7 @@ public class SnapshotPolicyVO { this.active = true; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/storage/SnapshotScheduleVO.java b/core/src/com/cloud/storage/SnapshotScheduleVO.java index 62d77e2617a..8dfc538f2c2 100644 --- a/core/src/com/cloud/storage/SnapshotScheduleVO.java +++ b/core/src/com/cloud/storage/SnapshotScheduleVO.java @@ -18,20 +18,22 @@ package com.cloud.storage; -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import com.cloud.storage.snapshot.SnapshotSchedule; @Entity @Table(name="snapshot_schedule") -public class SnapshotScheduleVO { +public class SnapshotScheduleVO implements SnapshotSchedule { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @@ -65,7 +67,7 @@ public class SnapshotScheduleVO { this.asyncJobId = null; } - public Long getId() { + public long getId() { return id; } diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 3fb643590de..20c68d18957 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -169,23 +169,23 @@ public class SnapshotVO implements Snapshot { this.prevSnapshotId = prevSnapshotId; } - public static SnapshotType getSnapshotType(Long policyId) { + public static Type getSnapshotType(Long policyId) { if (policyId.equals(MANUAL_POLICY_ID)) { - return SnapshotType.MANUAL; + return Type.MANUAL; } else { - return SnapshotType.RECURRING; + return Type.RECURRING; } } - public static SnapshotType getSnapshotType(String snapshotType) { - if (SnapshotType.MANUAL.equals(snapshotType)) { - return SnapshotType.MANUAL; + public static Type getSnapshotType(String snapshotType) { + if (Type.MANUAL.equals(snapshotType)) { + return Type.MANUAL; } - if (SnapshotType.RECURRING.equals(snapshotType)) { - return SnapshotType.RECURRING; + if (Type.RECURRING.equals(snapshotType)) { + return Type.RECURRING; } - if (SnapshotType.TEMPLATE.equals(snapshotType)) { - return SnapshotType.TEMPLATE; + if (Type.TEMPLATE.equals(snapshotType)) { + return Type.TEMPLATE; } return null; } diff --git a/core/src/com/cloud/storage/Upload.java b/core/src/com/cloud/storage/Upload.java deleted file mode 100755 index 8b902db7a65..00000000000 --- a/core/src/com/cloud/storage/Upload.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.cloud.storage; - -public interface Upload { - - 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} - public static enum Type {VOLUME, TEMPLATE, ISO} - public static enum Mode {FTP_UPLOAD, HTTP_DOWNLOAD} -} diff --git a/core/src/com/cloud/storage/UploadVO.java b/core/src/com/cloud/storage/UploadVO.java index 92db23d0192..a26268b88ac 100755 --- a/core/src/com/cloud/storage/UploadVO.java +++ b/core/src/com/cloud/storage/UploadVO.java @@ -31,6 +31,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDaoBase; /** @@ -43,7 +44,7 @@ import com.cloud.utils.db.GenericDaoBase; public class UploadVO implements Upload { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) - Long id; + long id; @Column(name="host_id") private long hostId; @@ -85,7 +86,8 @@ public class UploadVO implements Upload { @Column (name="install_path") private String installPath; - public long getHostId() { + @Override + public long getHostId() { return hostId; } @@ -93,15 +95,18 @@ public class UploadVO implements Upload { this.hostId = hostId; } - public Long getId() { + @Override + public long getId() { return id; } - public Date getCreated() { + @Override + public Date getCreated() { return created; } - public Date getLastUpdated() { + @Override + public Date getLastUpdated() { return lastUpdated; } @@ -152,7 +157,8 @@ public class UploadVO implements Upload { this.errorString = errorString; } - public String getErrorString() { + @Override + public String getErrorString() { return errorString; } @@ -160,7 +166,8 @@ public class UploadVO implements Upload { this.jobId = jobId; } - public String getJobId() { + @Override + public String getJobId() { return jobId; } @@ -168,25 +175,18 @@ public class UploadVO implements Upload { public boolean equals(Object obj) { if (obj instanceof UploadVO) { UploadVO other = (UploadVO)obj; - if (id == null && other.getId() == null) { - return (this.typeId==other.getTypeId() && this.hostId==other.getHostId() && this.type == other.getType()); - } else if (id == null && other.getId() != null) { - return false; - } else if (id != null && other.getId() == null) { - return false; - } else { - return (this.id.equals(other.getId())); - } + return (this.typeId==other.getTypeId() && this.hostId==other.getHostId() && this.type == other.getType()); } return false; } @Override public int hashCode() { - return id.hashCode(); + return NumbersUtil.hash(id); } - public int getUploadPercent() { + @Override + public int getUploadPercent() { return uploadPercent; } @@ -194,7 +194,8 @@ public class UploadVO implements Upload { this.uploadPercent = uploadPercent; } - public Status getUploadState() { + @Override + public Status getUploadState() { return uploadState; } @@ -202,7 +203,8 @@ public class UploadVO implements Upload { this.uploadState = uploadState; } - public long getTypeId() { + @Override + public long getTypeId() { return typeId; } @@ -210,7 +212,8 @@ public class UploadVO implements Upload { this.typeId = typeId; } - public Type getType() { + @Override + public Type getType() { return type; } @@ -218,14 +221,16 @@ public class UploadVO implements Upload { this.type = type; } - public Mode getMode() { + @Override + public Mode getMode() { return mode; } - public void setMode(Mode mode) { + public void setMode(Mode mode) { this.mode = mode; } + @Override public String getUploadUrl() { return uploadUrl; } @@ -234,20 +239,23 @@ public class UploadVO implements Upload { this.uploadUrl = uploadUrl; } - public void setId(Long id) { + @Override + public void setId(Long id) { this.id = id; } - public void setCreated(Date created) { + @Override + public void setCreated(Date created) { this.created = created; } + @Override public String getInstallPath() { return installPath; } + @Override public void setInstallPath(String installPath) { this.installPath = installPath; } - } diff --git a/core/src/com/cloud/storage/VMTemplateVO.java b/core/src/com/cloud/storage/VMTemplateVO.java index 87ee98bc1e3..7219689e16b 100644 --- a/core/src/com/cloud/storage/VMTemplateVO.java +++ b/core/src/com/cloud/storage/VMTemplateVO.java @@ -146,11 +146,13 @@ public class VMTemplateVO implements VirtualMachineTemplate { this.hypervisorType = hyperType.toString(); } - public boolean getEnablePassword() { + @Override + public boolean getEnablePassword() { return enablePassword; } - public Storage.ImageFormat getFormat() { + @Override + public Storage.ImageFormat getFormat() { return format; } @@ -173,11 +175,12 @@ public class VMTemplateVO implements VirtualMachineTemplate { } @Override - public Long getId() { + public long getId() { return id; } - public TemplateType getTemplateType() { + @Override + public TemplateType getTemplateType() { return templateType; } @@ -227,7 +230,8 @@ public class VMTemplateVO implements VirtualMachineTemplate { this.featured = featured; } - public Date getCreated() { + @Override + public Date getCreated() { return created; } @@ -235,7 +239,8 @@ public class VMTemplateVO implements VirtualMachineTemplate { return url; } - public boolean isRequiresHvm() { + @Override + public boolean isRequiresHvm() { return requiresHvm; } @@ -252,6 +257,7 @@ public class VMTemplateVO implements VirtualMachineTemplate { return checksum; } + @Override public String getDisplayText() { return displayText; } @@ -260,7 +266,8 @@ public class VMTemplateVO implements VirtualMachineTemplate { this.displayText = displayText; } - public long getGuestOSId() { + @Override + public long getGuestOSId() { return guestOSId; } @@ -268,7 +275,8 @@ public class VMTemplateVO implements VirtualMachineTemplate { this.guestOSId = guestOSId; } - public boolean isBootable() { + @Override + public boolean isBootable() { return bootable; } @@ -288,11 +296,13 @@ public class VMTemplateVO implements VirtualMachineTemplate { this.crossZones = crossZones; } - public boolean isCrossZones() { + @Override + public boolean isCrossZones() { return crossZones; } - public HypervisorType getHypervisorType() { + @Override + public HypervisorType getHypervisorType() { return HypervisorType.getType(hypervisorType); } diff --git a/core/src/com/cloud/storage/dao/VMTemplateDao.java b/core/src/com/cloud/storage/dao/VMTemplateDao.java index 298c6a3849c..d3499984e36 100644 --- a/core/src/com/cloud/storage/dao/VMTemplateDao.java +++ b/core/src/com/cloud/storage/dao/VMTemplateDao.java @@ -23,6 +23,7 @@ import java.util.List; import com.cloud.domain.DomainVO; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.VMTemplateVO; +import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; import com.cloud.utils.db.GenericDao; @@ -31,15 +32,6 @@ import com.cloud.utils.db.GenericDao; */ public interface VMTemplateDao extends GenericDao { - public enum TemplateFilter { - featured, // returns templates that have been marked as featured and public - self, // returns templates that have been registered or created by the calling user - selfexecutable, // same as self, but only returns templates that are ready to be deployed with - sharedexecutable, // ready templates that have been granted to the calling user by another user - executable, // templates that are owned by the calling user, or public templates, that can be used to deploy a new VM - community, // returns templates that have been marked as public but not featured - all // all templates (only usable by ROOT admins) - } public List listByPublic(); //finds by the column "unique_name" diff --git a/core/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/core/src/com/cloud/storage/dao/VMTemplateDaoImpl.java index baba58e9a66..bdd423a38e8 100755 --- a/core/src/com/cloud/storage/dao/VMTemplateDaoImpl.java +++ b/core/src/com/cloud/storage/dao/VMTemplateDaoImpl.java @@ -37,6 +37,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateZoneVO; +import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; import com.cloud.utils.component.Inject; import com.cloud.utils.db.DB; @@ -76,6 +77,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem protected VMTemplateDaoImpl() { } + @Override public List listByPublic() { SearchCriteria sc = PublicSearch.create(); sc.setParameters("public", 1); diff --git a/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java b/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java new file mode 100644 index 00000000000..13a4148e716 --- /dev/null +++ b/core/src/com/cloud/storage/snapshot/SnapshotSchedule.java @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.storage.snapshot; + +import java.util.Date; + +public interface SnapshotSchedule { + long getId(); + + Long getVolumeId(); + + Long getPolicyId(); + + void setPolicyId(long policyId); + + /** + * @return the scheduledTimestamp + */ + Date getScheduledTimestamp(); + + void setScheduledTimestamp(Date scheduledTimestamp); + + Long getAsyncJobId(); + + void setAsyncJobId(long asyncJobId); + + Long getSnapshotId(); + + void setSnapshotId(Long snapshotId); +} diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java index d1b05e11473..011bec304e4 100755 --- a/core/src/com/cloud/vm/DomainRouterVO.java +++ b/core/src/com/cloud/vm/DomainRouterVO.java @@ -25,6 +25,7 @@ import javax.persistence.Enumerated; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Table; +import com.cloud.network.router.VirtualRouter; import com.cloud.utils.net.NetUtils; /** @@ -34,7 +35,7 @@ import com.cloud.utils.net.NetUtils; @Table(name="domain_router") @PrimaryKeyJoinColumn(name="id") @DiscriminatorValue(value="DomainRouter") -public class DomainRouterVO extends VMInstanceVO implements DomainRouter { +public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { @Column(name="ram_size", nullable=false) private int ramSize; diff --git a/core/src/com/cloud/vm/InstanceGroupVO.java b/core/src/com/cloud/vm/InstanceGroupVO.java index 1f7dde80430..14ec1a50507 100644 --- a/core/src/com/cloud/vm/InstanceGroupVO.java +++ b/core/src/com/cloud/vm/InstanceGroupVO.java @@ -29,14 +29,13 @@ import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SecondaryTable; import javax.persistence.Table; -import com.cloud.user.OwnedBy; import com.cloud.utils.db.GenericDao; @Entity @Table(name="instance_group") @SecondaryTable(name="account", pkJoinColumns={@PrimaryKeyJoinColumn(name="account_id", referencedColumnName="id")}) -public class InstanceGroupVO implements OwnedBy{ +public class InstanceGroupVO implements InstanceGroup { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -66,14 +65,17 @@ public class InstanceGroupVO implements OwnedBy{ super(); } + @Override public long getId() { return id; } + @Override public String getName() { return name; } + @Override public long getAccountId() { return accountId; } diff --git a/core/src/com/cloud/vm/dao/DomainRouterDao.java b/core/src/com/cloud/vm/dao/DomainRouterDao.java index 0e29b029458..f5cc5901752 100755 --- a/core/src/com/cloud/vm/dao/DomainRouterDao.java +++ b/core/src/com/cloud/vm/dao/DomainRouterDao.java @@ -19,8 +19,8 @@ package com.cloud.vm.dao; import java.util.List; +import com.cloud.network.router.VirtualRouter.Role; import com.cloud.utils.db.GenericDao; -import com.cloud.vm.DomainRouter.Role; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.VirtualMachine; diff --git a/core/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/core/src/com/cloud/vm/dao/DomainRouterDaoImpl.java index bf307cac57c..50a43e5ae07 100755 --- a/core/src/com/cloud/vm/dao/DomainRouterDaoImpl.java +++ b/core/src/com/cloud/vm/dao/DomainRouterDaoImpl.java @@ -28,6 +28,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; +import com.cloud.network.router.VirtualRouter.Role; import com.cloud.utils.db.Attribute; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; @@ -35,7 +36,6 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.db.UpdateBuilder; import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.vm.DomainRouter.Role; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.State; import com.cloud.vm.VirtualMachine; diff --git a/server/src/com/cloud/agent/AgentManager.java b/server/src/com/cloud/agent/AgentManager.java index bc575c6a314..71d06cb86aa 100755 --- a/server/src/com/cloud/agent/AgentManager.java +++ b/server/src/com/cloud/agent/AgentManager.java @@ -23,13 +23,6 @@ import java.util.Set; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.manager.Commands; -import com.cloud.api.commands.AddHostCmd; -import com.cloud.api.commands.AddSecondaryStorageCmd; -import com.cloud.api.commands.CancelMaintenanceCmd; -import com.cloud.api.commands.DeleteHostCmd; -import com.cloud.api.commands.PrepareForMaintenanceCmd; -import com.cloud.api.commands.ReconnectHostCmd; -import com.cloud.api.commands.UpdateHostCmd; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.PodCluster; @@ -166,14 +159,6 @@ public interface AgentManager extends Manager { List listByDataCenter(long dcId); List listByPod(long podId); - /** - * Updates a host - * @param cmd - the command specifying hostId - * @return hostObject - * @throws InvalidParameterValueException - */ - HostVO updateHost(UpdateHostCmd cmd) throws InvalidParameterValueException; - /** * Deletes a host * @@ -182,15 +167,6 @@ public interface AgentManager extends Manager { */ boolean deleteHost(long hostId); - /** - * Deletes a host - * - * @param cmd - the command specifying hostId - * @param true if deleted, false otherwise - * @throws InvalidParameterValueException - */ - boolean deleteHost(DeleteHostCmd cmd) throws InvalidParameterValueException; - /** * Find a pod based on the user id, template, and data center. * @@ -210,7 +186,6 @@ public interface AgentManager extends Manager { * @return true if it was able to put the agent into maintenance mode. false if not. */ boolean maintain(long hostId) throws AgentUnavailableException; - HostVO maintain(PrepareForMaintenanceCmd cmd) throws InvalidParameterValueException; boolean maintenanceFailed(long hostId); @@ -221,7 +196,6 @@ public interface AgentManager extends Manager { * @return true if it's done. false if not. */ boolean cancelMaintenance(long hostId); - HostVO cancelMaintenance(CancelMaintenanceCmd cmd) throws InvalidParameterValueException; /** * Check to see if a virtual machine can be upgraded to the given service offering @@ -234,11 +208,8 @@ public interface AgentManager extends Manager { public boolean executeUserRequest(long hostId, Event event) throws AgentUnavailableException; public boolean reconnect(final long hostId) throws AgentUnavailableException; - public HostVO reconnectHost(ReconnectHostCmd cmd) throws AgentUnavailableException; public List discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; - public List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; - public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; Answer easySend(Long hostId, Command cmd, int timeout); } diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index eb4911f9066..22ae9083083 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -120,6 +120,7 @@ import com.cloud.network.NetworkManager; import com.cloud.network.dao.IPAddressDao; import com.cloud.offering.ServiceOffering; import com.cloud.resource.Discoverer; +import com.cloud.resource.ResourceService; import com.cloud.resource.ServerResource; import com.cloud.server.ManagementServer; import com.cloud.service.ServiceOfferingVO; @@ -145,6 +146,7 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; 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.SearchCriteria; @@ -184,8 +186,8 @@ import com.cloud.vm.dao.VMInstanceDao; * router.stats.interval | interval to report router statistics | * seconds | 300s || * } **/ -@Local(value = { AgentManager.class }) -public class AgentManagerImpl implements AgentManager, HandlerFactory { +@Local(value = { AgentManager.class, ResourceService.class }) +public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceService, Manager { private static final Logger s_logger = Logger.getLogger(AgentManagerImpl.class); protected ConcurrentHashMap _agents = new ConcurrentHashMap(10007); @@ -504,7 +506,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } @Override - public List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { + public List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { Long dcId = cmd.getZoneId(); Long podId = cmd.getPodId(); Long clusterId = cmd.getClusterId(); @@ -520,7 +522,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } @Override - public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { + public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { Long dcId = cmd.getZoneId(); String url = cmd.getUrl(); return discoverHosts(dcId, null, null, null, url, null, null); @@ -1390,7 +1392,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } @Override - public HostVO reconnectHost(ReconnectHostCmd cmd) throws AgentUnavailableException { + public Host reconnectHost(ReconnectHostCmd cmd) throws AgentUnavailableException { Long hostId = cmd.getId(); HostVO host = _hostDao.findById(hostId); @@ -1457,7 +1459,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } @Override - public HostVO cancelMaintenance(CancelMaintenanceCmd cmd) throws InvalidParameterValueException{ + public Host cancelMaintenance(CancelMaintenanceCmd cmd) throws InvalidParameterValueException{ Long hostId = cmd.getId(); //verify input parameters @@ -1563,7 +1565,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } @Override - public HostVO maintain(PrepareForMaintenanceCmd cmd) throws InvalidParameterValueException { + public Host maintain(PrepareForMaintenanceCmd cmd) throws InvalidParameterValueException { Long hostId = cmd.getId(); HostVO host = _hostDao.findById(hostId); @@ -1870,7 +1872,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { } @Override - public HostVO updateHost(UpdateHostCmd cmd) throws InvalidParameterValueException{ + public Host updateHost(UpdateHostCmd cmd) throws InvalidParameterValueException{ Long hostId = cmd.getId(); Long guestOSCategoryId = cmd.getOsCategoryId(); diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index b58624530ef..640314b05af 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -20,12 +20,15 @@ import com.cloud.dc.dao.VlanDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.host.Host; import com.cloud.host.HostStats; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.IPAddressVO; import com.cloud.network.LoadBalancerVO; +import com.cloud.network.Network; +import com.cloud.network.NetworkManager; import com.cloud.network.NetworkRuleConfigVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.LoadBalancerDao; @@ -73,9 +76,11 @@ import com.cloud.utils.DateUtil; import com.cloud.utils.component.ComponentLocator; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.InstanceGroupVO; +import com.cloud.vm.Nic; import com.cloud.vm.UserVmManager; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; import com.cloud.vm.VmStats; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.UserVmDao; @@ -84,11 +89,12 @@ public class ApiDBUtils { private static ManagementServer _ms; private static AccountManager _accountMgr; private static AgentManager _agentMgr; - private static AsyncJobManager _asyncMgr; + public static AsyncJobManager _asyncMgr; private static NetworkGroupManager _networkGroupMgr; private static SnapshotManager _snapMgr; private static StorageManager _storageMgr; private static UserVmManager _userVmMgr; + private static NetworkManager _networkMgr; private static StatsCollector _statsCollector; private static AccountDao _accountDao; @@ -128,6 +134,7 @@ public class ApiDBUtils { _snapMgr = locator.getManager(SnapshotManager.class); _storageMgr = locator.getManager(StorageManager.class); _userVmMgr = locator.getManager(UserVmManager.class); + _networkMgr = locator.getManager(NetworkManager.class); _accountDao = locator.getDao(AccountDao.class); _accountVlanMapDao = locator.getDao(AccountVlanMapDao.class); @@ -227,7 +234,7 @@ public class ApiDBUtils { String intervalTypes = ""; SnapshotVO snapshot = _snapshotDao.findById(snapshotId); - if (snapshot.getSnapshotType() == Snapshot.SnapshotType.MANUAL.ordinal()) { + if (snapshot.getSnapshotType() == Snapshot.Type.MANUAL.ordinal()) { return "MANUAL"; } @@ -249,7 +256,7 @@ public class ApiDBUtils { return _storageMgr.getStoragePoolTags(poolId); } - public static boolean isLocalStorageActiveOnHost(HostVO host) { + public static boolean isLocalStorageActiveOnHost(Host host) { return _storageMgr.isLocalStorageActiveOnHost(host); } @@ -459,4 +466,17 @@ public class ApiDBUtils { return _storageMgr.volumeOnSharedStoragePool(volume); } + + public static List getNics(VirtualMachine vm) { + return _networkMgr.getNics(vm); + } + + public static Network getNetwork(long id) { + return _networkMgr.getNetworkConfiguration(id); + } + + public static void synchronizeCommand(Object job, String syncObjType, long syncObjId) { + _asyncMgr.syncAsyncJobExecution((AsyncJobVO)job, syncObjType, syncObjId); + } + } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index db07ed7ce6e..dd388237c72 100644 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -18,82 +18,123 @@ package com.cloud.api; import java.text.DecimalFormat; +import java.util.ArrayList; 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.Set; +import java.util.StringTokenizer; import org.apache.log4j.Logger; +import com.cloud.api.commands.QueryAsyncJobResultCmd; import com.cloud.api.response.AccountResponse; +import com.cloud.api.response.ApiResponseSerializer; +import com.cloud.api.response.AsyncJobResponse; +import com.cloud.api.response.CapacityResponse; import com.cloud.api.response.ClusterResponse; import com.cloud.api.response.ConfigurationResponse; +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.FirewallRuleResponse; import com.cloud.api.response.HostResponse; import com.cloud.api.response.IPAddressResponse; +import com.cloud.api.response.IngressRuleResponse; import com.cloud.api.response.InstanceGroupResponse; import com.cloud.api.response.IpForwardingRuleResponse; +import com.cloud.api.response.ListResponse; import com.cloud.api.response.LoadBalancerResponse; +import com.cloud.api.response.NetworkGroupResponse; import com.cloud.api.response.PodResponse; import com.cloud.api.response.PreallocatedLunResponse; +import com.cloud.api.response.RemoteAccessVpnResponse; import com.cloud.api.response.ResourceLimitResponse; import com.cloud.api.response.ServiceOfferingResponse; import com.cloud.api.response.SnapshotPolicyResponse; import com.cloud.api.response.SnapshotResponse; import com.cloud.api.response.StoragePoolResponse; import com.cloud.api.response.SystemVmResponse; +import com.cloud.api.response.TemplatePermissionsResponse; +import com.cloud.api.response.TemplateResponse; import com.cloud.api.response.UserResponse; import com.cloud.api.response.UserVmResponse; import com.cloud.api.response.VlanIpRangeResponse; import com.cloud.api.response.VolumeResponse; +import com.cloud.api.response.VpnUsersResponse; import com.cloud.api.response.ZoneResponse; +import com.cloud.async.AsyncJob; +import com.cloud.async.AsyncJobResult; import com.cloud.async.AsyncJobVO; -import com.cloud.configuration.ConfigurationVO; +import com.cloud.async.executor.IngressRuleResultObject; +import com.cloud.async.executor.NetworkGroupResultObject; +import com.cloud.capacity.Capacity; +import com.cloud.capacity.CapacityVO; +import com.cloud.configuration.Configuration; import com.cloud.configuration.ResourceCount.ResourceType; import com.cloud.configuration.ResourceLimit; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; +import com.cloud.dc.Pod; +import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.dc.VlanVO; -import com.cloud.domain.DomainVO; +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; -import com.cloud.host.Status.Event; -import com.cloud.network.FirewallRuleVO; -import com.cloud.network.IPAddressVO; -import com.cloud.network.LoadBalancerVO; -import com.cloud.network.Networks.TrafficType; +import com.cloud.network.IpAddress; +import com.cloud.network.LoadBalancer; import com.cloud.network.Network; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.VpnUser; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.security.NetworkGroup; +import com.cloud.network.security.NetworkGroupRules; +import com.cloud.offering.DiskOffering; import com.cloud.offering.NetworkOffering.GuestIpType; import com.cloud.offering.ServiceOffering; +import com.cloud.org.Cluster; import com.cloud.server.Criteria; -import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.DiskOfferingVO; +import com.cloud.storage.GuestOS; import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.Snapshot; -import com.cloud.storage.Snapshot.SnapshotType; -import com.cloud.storage.SnapshotPolicyVO; +import com.cloud.storage.Snapshot.Type; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; +import com.cloud.storage.UploadVO; +import com.cloud.storage.VMTemplateHostVO; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume; import com.cloud.storage.VolumeVO; import com.cloud.storage.preallocatedlun.PreallocatedLunVO; +import com.cloud.storage.snapshot.SnapshotPolicy; +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.uservm.UserVm; import com.cloud.vm.ConsoleProxyVO; -import com.cloud.vm.DomainRouter; +import com.cloud.vm.InstanceGroup; import com.cloud.vm.InstanceGroupVO; import com.cloud.vm.Nic; import com.cloud.vm.SecondaryStorageVmVO; @@ -104,11 +145,12 @@ import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VmStats; -public class ApiResponseHelper { - - public static final Logger s_logger = Logger.getLogger(ApiResponseHelper.class.getName()); - - public static UserResponse createUserResponse (UserAccount user) { +public class ApiResponseHelper implements ResponseGenerator { + + public final Logger s_logger = Logger.getLogger(ApiResponseHelper.class); + + @Override + public UserResponse createUserResponse(UserAccount user) { UserResponse userResponse = new UserResponse(); userResponse.setAccountName(user.getAccountName()); userResponse.setAccountType(user.getType()); @@ -125,1181 +167,2106 @@ public class ApiResponseHelper { userResponse.setApiKey(user.getApiKey()); userResponse.setSecretKey(user.getSecretKey()); userResponse.setObjectName("user"); - + return userResponse; } - - public static AccountResponse createAccountResponse (Account account) { - boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN); - AccountResponse accountResponse = new AccountResponse(); - accountResponse.setId(account.getId()); - accountResponse.setName(account.getAccountName()); - accountResponse.setAccountType(account.getType()); - accountResponse.setDomainId(account.getDomainId()); - accountResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); - accountResponse.setState(account.getState()); - //get network stat - List stats = ApiDBUtils.listUserStatsBy(account.getId()); - if (stats == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats"); - } + @Override + public AccountResponse createAccountResponse(Account account) { + boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN); + AccountResponse accountResponse = new AccountResponse(); + accountResponse.setId(account.getId()); + accountResponse.setName(account.getAccountName()); + accountResponse.setAccountType(account.getType()); + accountResponse.setDomainId(account.getDomainId()); + accountResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); + accountResponse.setState(account.getState()); - long bytesSent = 0; - long bytesReceived = 0; - 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 network stat + List stats = ApiDBUtils.listUserStatsBy(account.getId()); + if (stats == null) { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats"); + } - // 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()); - String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal); - 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; + long bytesSent = 0; + long bytesReceived = 0; + 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); - Long[] accountIds = new Long[1]; - accountIds[0] = account.getId(); + // Get resource limits and counts - Criteria c1 = new Criteria(); - c1.addCriteria(Criteria.ACCOUNTID, accountIds); - List virtualMachines = ApiDBUtils.searchForUserVMs(c1); + 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); - //get Running/Stopped VMs - for (Iterator iter = virtualMachines.iterator(); iter.hasNext();) { - // count how many stopped/running vms we have - UserVm vm = iter.next(); + 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()); + String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal); + accountResponse.setIpLimit(ipLimitDisplay); + accountResponse.setIpTotal(ipTotal); + accountResponse.setIpAvailable(ipAvail); - if (vm.getState() == State.Stopped) { - vmStopped++; - } else if (vm.getState() == State.Running) { - vmRunning++; - } - } + 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); - accountResponse.setVmStopped(vmStopped); - accountResponse.setVmRunning(vmRunning); - accountResponse.setObjectName("account"); - - return accountResponse; + 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; + + Long[] accountIds = new Long[1]; + accountIds[0] = account.getId(); + + Criteria c1 = new Criteria(); + c1.addCriteria(Criteria.ACCOUNTID, accountIds); + List virtualMachines = ApiDBUtils.searchForUserVMs(c1); + + // get Running/Stopped VMs + for (Iterator iter = virtualMachines.iterator(); iter.hasNext();) { + // count how many stopped/running vms we have + UserVm 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"); + + return accountResponse; + } + + @Override + public DomainResponse createDomainResponse(Domain domain) { + DomainResponse domainResponse = new DomainResponse(); + domainResponse.setDomainName(domain.getName()); + domainResponse.setId(domain.getId()); + domainResponse.setLevel(domain.getLevel()); + domainResponse.setParentDomainId(domain.getParent()); + if (domain.getParent() != null) { + domainResponse.setParentDomainName(ApiDBUtils.findDomainById(domain.getParent()).getName()); + } + if (domain.getChildCount() > 0) { + domainResponse.setHasChild(true); + } + domainResponse.setObjectName("domain"); + return domainResponse; + } + + @Override + public DiskOfferingResponse createDiskOfferingResponse(DiskOffering offering) { + DiskOfferingResponse diskOfferingResponse = new DiskOfferingResponse(); + diskOfferingResponse.setId(offering.getId()); + diskOfferingResponse.setName(offering.getName()); + diskOfferingResponse.setDisplayText(offering.getDisplayText()); + diskOfferingResponse.setCreated(offering.getCreated()); + diskOfferingResponse.setDiskSize(offering.getDiskSize()); + if (offering.getDomainId() != null) { + diskOfferingResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName()); + diskOfferingResponse.setDomainId(offering.getDomainId()); + } + diskOfferingResponse.setTags(offering.getTags()); + diskOfferingResponse.setCustomized(offering.isCustomized()); + diskOfferingResponse.setObjectName("diskoffering"); + return diskOfferingResponse; + } + + @Override + public ResourceLimitResponse createResourceLimitResponse(ResourceLimit limit) { + ResourceLimitResponse resourceLimitResponse = new ResourceLimitResponse(); + if (limit.getDomainId() != null) { + resourceLimitResponse.setDomainId(limit.getDomainId()); + resourceLimitResponse.setDomainName(ApiDBUtils.findDomainById(limit.getDomainId()).getName()); + } + + if (limit.getAccountId() != null) { + Account accountTemp = ApiDBUtils.findAccountById(limit.getAccountId()); + if (accountTemp != null) { + resourceLimitResponse.setAccountName(accountTemp.getAccountName()); + resourceLimitResponse.setDomainId(accountTemp.getDomainId()); + resourceLimitResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + } + resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().ordinal()).toString()); + resourceLimitResponse.setMax(limit.getMax()); + resourceLimitResponse.setObjectName("resourcelimit"); + + return resourceLimitResponse; + } + + @Override + public ServiceOfferingResponse createServiceOfferingResponse(ServiceOffering offering) { + ServiceOfferingResponse offeringResponse = new ServiceOfferingResponse(); + offeringResponse.setId(offering.getId()); + offeringResponse.setName(offering.getName()); + offeringResponse.setDisplayText(offering.getDisplayText()); + offeringResponse.setCpuNumber(offering.getCpu()); + offeringResponse.setCpuSpeed(offering.getSpeed()); + offeringResponse.setMemory(offering.getRamSize()); + offeringResponse.setCreated(offering.getCreated()); + offeringResponse.setStorageType(offering.getUseLocalStorage() ? "local" : "shared"); + offeringResponse.setOfferHa(offering.getOfferHA()); + offeringResponse.setUseVirtualNetwork(offering.getGuestIpType().equals(GuestIpType.Virtualized)); + offeringResponse.setTags(offering.getTags()); + offeringResponse.setObjectName("serviceoffering"); + + return offeringResponse; + } + + @Override + public ConfigurationResponse createConfigurationResponse(Configuration cfg) { + ConfigurationResponse cfgResponse = new ConfigurationResponse(); + cfgResponse.setCategory(cfg.getCategory()); + cfgResponse.setDescription(cfg.getDescription()); + cfgResponse.setName(cfg.getName()); + cfgResponse.setValue(cfg.getValue()); + cfgResponse.setObjectName("configuration"); + + return cfgResponse; + } + + @Override + public SnapshotResponse createSnapshotResponse(Snapshot snapshot) { + SnapshotResponse snapshotResponse = new SnapshotResponse(); + snapshotResponse.setId(snapshot.getId()); + + Account acct = ApiDBUtils.findAccountById(Long.valueOf(snapshot.getAccountId())); + if (acct != null) { + snapshotResponse.setAccountName(acct.getAccountName()); + snapshotResponse.setDomainId(acct.getDomainId()); + snapshotResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); + } + + VolumeVO volume = ApiDBUtils.findVolumeById(snapshot.getVolumeId()); + String snapshotTypeStr = Type.values()[snapshot.getSnapshotType()].name(); + snapshotResponse.setSnapshotType(snapshotTypeStr); + snapshotResponse.setVolumeId(snapshot.getVolumeId()); + snapshotResponse.setVolumeName(volume.getName()); + snapshotResponse.setVolumeType(volume.getVolumeType().name()); + snapshotResponse.setCreated(snapshot.getCreated()); + snapshotResponse.setName(snapshot.getName()); + snapshotResponse.setIntervalType(ApiDBUtils.getSnapshotIntervalTypes(snapshot.getId())); + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("snapshot", snapshot.getId()); + if (asyncJob != null) { + snapshotResponse.setJobId(asyncJob.getId()); + snapshotResponse.setJobStatus(asyncJob.getStatus()); + } + snapshotResponse.setObjectName("snapshot"); + return snapshotResponse; + } + + @Override + public SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy) { + SnapshotPolicyResponse policyResponse = new SnapshotPolicyResponse(); + policyResponse.setId(policy.getId()); + policyResponse.setVolumeId(policy.getVolumeId()); + policyResponse.setSchedule(policy.getSchedule()); + policyResponse.setIntervalType(policy.getInterval()); + policyResponse.setMaxSnaps(policy.getMaxSnaps()); + policyResponse.setTimezone(policy.getTimezone()); + policyResponse.setObjectName("snapshotpolicy"); + + return policyResponse; + } + + @Override + public UserVmResponse createUserVmResponse(UserVm userVm) { + if (userVm.getPrivateIpAddress() == null) { + return createUserVm2Response(userVm); + } + UserVmResponse userVmResponse = new UserVmResponse(); + Account acct = ApiDBUtils.findAccountById(Long.valueOf(userVm.getAccountId())); + // FIXME - this check should be done in searchForUserVm method in + // ManagementServerImpl; + // otherwise the number of vms returned is not going to match pageSize + // request parameter + if ((acct != null) && (acct.getRemoved() == null)) { + userVmResponse.setAccountName(acct.getAccountName()); + userVmResponse.setDomainId(acct.getDomainId()); + userVmResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); + } else { + return null; // the account has been deleted, skip this VM in the + // response + } + + userVmResponse.setId(userVm.getId()); + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_instance", userVm.getId()); + if (asyncJob != null) { + userVmResponse.setJobId(asyncJob.getId()); + userVmResponse.setJobStatus(asyncJob.getStatus()); + } + + userVmResponse.setName(userVm.getHostName()); + userVmResponse.setCreated(userVm.getCreated()); + userVmResponse.setIpAddress(userVm.getPrivateIpAddress()); + if (userVm.getState() != null) { + userVmResponse.setState(userVm.getState().toString()); + } + + userVmResponse.setHaEnable(userVm.isHaEnabled()); + + if (userVm.getDisplayName() != null) { + userVmResponse.setDisplayName(userVm.getDisplayName()); + } else { + userVmResponse.setDisplayName(userVm.getHostName()); + } + + InstanceGroupVO group = ApiDBUtils.findInstanceGroupForVM(userVm.getId()); + if (group != null) { + userVmResponse.setGroup(group.getName()); + userVmResponse.setGroupId(group.getId()); + } + + // Data Center Info + userVmResponse.setZoneId(userVm.getDataCenterId()); + userVmResponse.setZoneName(ApiDBUtils.findZoneById(userVm.getDataCenterId()).getName()); + + Account account = UserContext.current().getAccount(); + // if user is an admin, display host id + if (((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) && (userVm.getHostId() != null)) { + userVmResponse.setHostId(userVm.getHostId()); + userVmResponse.setHostName(ApiDBUtils.findHostById(userVm.getHostId()).getName()); + } + + // Template Info + VMTemplateVO template = ApiDBUtils.findTemplateById(userVm.getTemplateId()); + 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 (userVm.getPassword() != null) { + userVmResponse.setPassword(userVm.getPassword()); + } + + // ISO Info + if (userVm.getIsoId() != null) { + VMTemplateVO iso = ApiDBUtils.findTemplateById(userVm.getIsoId().longValue()); + if (iso != null) { + userVmResponse.setIsoId(userVm.getIsoId()); + userVmResponse.setIsoName(iso.getName()); + } + } + + // Service Offering Info + ServiceOffering offering = ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId()); + userVmResponse.setServiceOfferingId(userVm.getServiceOfferingId()); + userVmResponse.setServiceOfferingName(offering.getName()); + userVmResponse.setCpuNumber(offering.getCpu()); + userVmResponse.setCpuSpeed(offering.getSpeed()); + userVmResponse.setMemory(offering.getRamSize()); + userVmResponse.setForVirtualNetwork(offering.getGuestIpType().equals(GuestIpType.Virtualized)); + + 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); + } + + // 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); + + long networkKbRead = (long) vmStats.getNetworkReadKBs(); + userVmResponse.setNetworkKbsRead(networkKbRead); + + long networkKbWrite = (long) vmStats.getNetworkWriteKBs(); + userVmResponse.setNetworkKbsWrite(networkKbWrite); + } + + userVmResponse.setGuestOsId(userVm.getGuestOSId()); + // network groups + userVmResponse.setNetworkGroupList(ApiDBUtils.getNetworkGroupsNamesForVm(userVm.getId())); + userVmResponse.setObjectName("virtualmachine"); + return userVmResponse; + } + + @Override + public SystemVmResponse createSystemVmResponse(VirtualMachine systemVM) { + if (systemVM.getPrivateIpAddress() == null) { + return createSystemVm2Response(systemVM); + } + SystemVmResponse vmResponse = new SystemVmResponse(); + if (systemVM instanceof SystemVm) { + SystemVm vm = (SystemVm) systemVM; + + vmResponse.setId(vm.getId()); + vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); + + String instanceType = "console_proxy"; + if (systemVM instanceof SecondaryStorageVmVO) { + instanceType = "sec_storage_vm"; // FIXME: this should be a + // constant so that the async + // jobs get updated with the + // correct instance type, they + // are using + // different instance types at + // the moment + } + + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob(instanceType, vm.getId()); + if (asyncJob != null) { + vmResponse.setJobId(asyncJob.getId()); + vmResponse.setJobStatus(asyncJob.getStatus()); + } + + vmResponse.setZoneId(vm.getDataCenterId()); + vmResponse.setZoneName(ApiDBUtils.findZoneById(vm.getDataCenterId()).getName()); + vmResponse.setDns1(vm.getDns1()); + vmResponse.setDns2(vm.getDns2()); + vmResponse.setNetworkDomain(vm.getDomain()); + vmResponse.setGateway(vm.getGateway()); + vmResponse.setName(vm.getHostName()); + vmResponse.setPodId(vm.getPodId()); + if (vm.getHostId() != null) { + vmResponse.setHostId(vm.getHostId()); + vmResponse.setHostName(ApiDBUtils.findHostById(vm.getHostId()).getName()); + } + vmResponse.setPrivateIp(vm.getPrivateIpAddress()); + vmResponse.setPrivateMacAddress(vm.getPrivateMacAddress()); + vmResponse.setPrivateNetmask(vm.getPrivateNetmask()); + vmResponse.setPublicIp(vm.getPublicIpAddress()); + vmResponse.setPublicMacAddress(vm.getPublicMacAddress()); + vmResponse.setPublicNetmask(vm.getPublicNetmask()); + vmResponse.setTemplateId(vm.getTemplateId()); + vmResponse.setCreated(vm.getCreated()); + if (vm.getState() != null) { + vmResponse.setState(vm.getState().toString()); + } + } + + // for console proxies, add the active sessions + if (systemVM instanceof ConsoleProxyVO) { + ConsoleProxyVO proxy = (ConsoleProxyVO) systemVM; + vmResponse.setActiveViewerSessions(proxy.getActiveSession()); + } + vmResponse.setObjectName("systemvm"); + return vmResponse; + } + + @Override + public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) { + if (router.getPrivateIpAddress() == null) { + return createDomainRouter2Response(router); + } + DomainRouterResponse routerResponse = new DomainRouterResponse(); + routerResponse.setId(router.getId()); + + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("domain_router", router.getId()); + if (asyncJob != null) { + routerResponse.setJobId(asyncJob.getId()); + routerResponse.setJobStatus(asyncJob.getStatus()); + } + + routerResponse.setZoneId(router.getDataCenterId()); + routerResponse.setZoneName(ApiDBUtils.findZoneById(router.getDataCenterId()).getName()); + routerResponse.setDns1(router.getDns1()); + routerResponse.setDns2(router.getDns2()); + routerResponse.setNetworkDomain(router.getDomain()); + routerResponse.setGateway(router.getGateway()); + routerResponse.setName(router.getHostName()); + routerResponse.setPodId(router.getPodId()); + + if (router.getHostId() != null) { + routerResponse.setHostId(router.getHostId()); + routerResponse.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName()); + } + + routerResponse.setPrivateIp(router.getPrivateIpAddress()); + routerResponse.setPrivateMacAddress(router.getPrivateMacAddress()); + routerResponse.setPrivateNetmask(router.getPrivateNetmask()); + routerResponse.setPublicIp(router.getPublicIpAddress()); + routerResponse.setPublicMacAddress(router.getPublicMacAddress()); + routerResponse.setPublicNetmask(router.getPublicNetmask()); + routerResponse.setGuestIpAddress(router.getGuestIpAddress()); + routerResponse.setGuestMacAddress(router.getGuestMacAddress()); + routerResponse.setGuestNetmask(router.getGuestNetmask()); + routerResponse.setTemplateId(router.getTemplateId()); + routerResponse.setCreated(router.getCreated()); + routerResponse.setState(router.getState()); + + Account accountTemp = ApiDBUtils.findAccountById(router.getAccountId()); + if (accountTemp != null) { + routerResponse.setAccountName(accountTemp.getAccountName()); + routerResponse.setDomainId(accountTemp.getDomainId()); + routerResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + routerResponse.setObjectName("domainrouter"); + return routerResponse; + } + + @Override + public HostResponse createHostResponse(Host host) { + HostResponse hostResponse = new HostResponse(); + hostResponse.setId(host.getId()); + hostResponse.setCapabilities(host.getCapabilities()); + hostResponse.setClusterId(host.getClusterId()); + hostResponse.setCpuNumber(host.getCpus()); + hostResponse.setZoneId(host.getDataCenterId()); + 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()); + hostResponse.setRemoved(host.getRemoved()); + hostResponse.setCpuSpeed(host.getSpeed()); + hostResponse.setState(host.getStatus()); + hostResponse.setIpAddress(host.getPrivateIpAddress()); + hostResponse.setVersion(host.getVersion()); + hostResponse.setCreated(host.getCreated()); + + GuestOSCategoryVO guestOSCategory = ApiDBUtils.getHostGuestOSCategory(host.getId()); + if (guestOSCategory != null) { + hostResponse.setOsCategoryId(guestOSCategory.getId()); + hostResponse.setOsCategoryName(guestOSCategory.getName()); + } + hostResponse.setZoneName(ApiDBUtils.findZoneById(host.getDataCenterId()).getName()); + + if (host.getPodId() != null) { + hostResponse.setPodName(ApiDBUtils.findPodById(host.getPodId()).getName()); + } + + DecimalFormat decimalFormat = new DecimalFormat("#.##"); + + // calculate cpu allocated by vm + if ((host.getCpus() != null) && (host.getSpeed() != null)) { + int cpu = 0; + String cpuAlloc = null; + List instances = ApiDBUtils.listUserVMsByHostId(host.getId()); + for (UserVmVO vm : instances) { + ServiceOffering so = ApiDBUtils.findServiceOfferingById(vm.getServiceOfferingId()); + cpu += so.getCpu() * so.getSpeed(); + } + cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%"; + hostResponse.setCpuAllocated(cpuAlloc); + } + + // calculate cpu utilized + 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.setAverageLoad((long) hostStats.getAverageLoad()); + hostResponse.setNetworkKbsRead((long) hostStats.getNetworkReadKBs()); + hostResponse.setNetworkKbsWrite((long) hostStats.getNetworkWriteKBs()); + } + + if (host.getType() == Host.Type.Routing) { + hostResponse.setMemoryTotal(host.getTotalMemory()); + + // calculate memory allocated by systemVM and userVm + long mem = ApiDBUtils.getMemoryUsagebyHost(host.getId()); + hostResponse.setMemoryAllocated(mem); + hostResponse.setMemoryUsed(mem); + } else if (host.getType().toString().equals("Storage")) { + hostResponse.setDiskSizeTotal(host.getTotalSize()); + hostResponse.setDiskSizeAllocated(0L); + } + + if (host.getClusterId() != null) { + ClusterVO cluster = ApiDBUtils.findClusterById(host.getClusterId()); + hostResponse.setClusterName(cluster.getName()); + } + + hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host)); + + 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.setObjectName("host"); + + return hostResponse; + } + + @Override + public VlanIpRangeResponse createVlanIpRangeResponse(Vlan vlan) { + Long accountId = ApiDBUtils.getAccountIdForVlan(vlan.getId()); + Long podId = ApiDBUtils.getPodIdForVlan(vlan.getId()); + + VlanIpRangeResponse vlanResponse = new VlanIpRangeResponse(); + vlanResponse.setId(vlan.getId()); + vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork)); + vlanResponse.setVlan(vlan.getVlanId()); + vlanResponse.setZoneId(vlan.getDataCenterId()); + + if (accountId != null) { + Account account = ApiDBUtils.findAccountById(accountId); + vlanResponse.setAccountName(account.getAccountName()); + vlanResponse.setDomainId(account.getDomainId()); + vlanResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); + } + + if (podId != null) { + HostPodVO pod = ApiDBUtils.findPodById(podId); + vlanResponse.setPodId(podId); + vlanResponse.setPodName(pod.getName()); + } + + vlanResponse.setGateway(vlan.getVlanGateway()); + vlanResponse.setNetmask(vlan.getVlanNetmask()); + vlanResponse.setDescription(vlan.getIpRange()); + vlanResponse.setObjectName("vlan"); + + return vlanResponse; + } + + @Override + public IPAddressResponse createIPAddressResponse(IpAddress ipAddress) { + VlanVO vlan = ApiDBUtils.findVlanById(ipAddress.getVlanDbId()); + boolean forVirtualNetworks = vlan.getVlanType().equals(VlanType.VirtualNetwork); + + IPAddressResponse ipResponse = new IPAddressResponse(); + ipResponse.setIpAddress(ipAddress.getAddress()); + if (ipAddress.getAllocated() != null) { + ipResponse.setAllocated(ipAddress.getAllocated()); + } + ipResponse.setZoneId(ipAddress.getDataCenterId()); + ipResponse.setZoneName(ApiDBUtils.findZoneById(ipAddress.getDataCenterId()).getName()); + ipResponse.setSourceNat(ipAddress.isSourceNat()); + + // get account information + Account accountTemp = ApiDBUtils.findAccountById(ipAddress.getAccountId()); + if (accountTemp != null) { + ipResponse.setAccountName(accountTemp.getAccountName()); + ipResponse.setDomainId(accountTemp.getDomainId()); + ipResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + + ipResponse.setForVirtualNetwork(forVirtualNetworks); + ipResponse.setStaticNat(ipAddress.isOneToOneNat()); + + // show this info to admin only + Account account = UserContext.current().getAccount(); + if ((account == null) || account.getType() == Account.ACCOUNT_TYPE_ADMIN) { + ipResponse.setVlanId(ipAddress.getVlanDbId()); + ipResponse.setVlanName(ApiDBUtils.findVlanById(ipAddress.getVlanDbId()).getVlanId()); + } + ipResponse.setObjectName("ipaddress"); + return ipResponse; + } + + @Override + public LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer) { + LoadBalancerResponse lbResponse = new LoadBalancerResponse(); + lbResponse.setId(loadBalancer.getId()); + lbResponse.setName(loadBalancer.getName()); + lbResponse.setDescription(loadBalancer.getDescription()); + lbResponse.setPublicIp(loadBalancer.getIpAddress()); + lbResponse.setPublicPort(loadBalancer.getPublicPort()); + lbResponse.setPrivatePort(loadBalancer.getPrivatePort()); + lbResponse.setAlgorithm(loadBalancer.getAlgorithm()); + + Account accountTemp = ApiDBUtils.findAccountById(loadBalancer.getAccountId()); + if (accountTemp != null) { + lbResponse.setAccountName(accountTemp.getAccountName()); + lbResponse.setDomainId(accountTemp.getDomainId()); + lbResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + lbResponse.setObjectName("loadbalancer"); + return lbResponse; + } + + @Override + public PodResponse createPodResponse(Pod pod) { + String[] ipRange = new String[2]; + if (pod.getDescription() != null && pod.getDescription().length() > 0) { + ipRange = pod.getDescription().split("-"); + } else { + ipRange[0] = pod.getDescription(); + } + + PodResponse podResponse = new PodResponse(); + podResponse.setId(pod.getId()); + podResponse.setName(pod.getName()); + podResponse.setZoneId(pod.getDataCenterId()); + podResponse.setZoneName(PodZoneConfig.getZoneName(pod.getDataCenterId())); + podResponse.setCidr(pod.getCidrAddress() + "/" + pod.getCidrSize()); + podResponse.setStartIp(ipRange[0]); + podResponse.setEndIp(((ipRange.length > 1) && (ipRange[1] != null)) ? ipRange[1] : ""); + podResponse.setGateway(pod.getGateway()); + podResponse.setObjectName("pod"); + return podResponse; + } + + @Override + public ZoneResponse createZoneResponse(DataCenter dataCenter) { + Account account = UserContext.current().getAccount(); + ZoneResponse zoneResponse = new ZoneResponse(); + zoneResponse.setId(dataCenter.getId()); + zoneResponse.setName(dataCenter.getName()); + + if ((dataCenter.getDescription() != null) && !dataCenter.getDescription().equalsIgnoreCase("null")) { + zoneResponse.setDescription(dataCenter.getDescription()); + } + + if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) { + zoneResponse.setDns1(dataCenter.getDns1()); + zoneResponse.setDns2(dataCenter.getDns2()); + zoneResponse.setInternalDns1(dataCenter.getInternalDns1()); + zoneResponse.setInternalDns2(dataCenter.getInternalDns2()); + zoneResponse.setVlan(dataCenter.getVnet()); + zoneResponse.setGuestCidrAddress(dataCenter.getGuestNetworkCidr()); + } + + zoneResponse.setDomain(dataCenter.getDomain()); + zoneResponse.setDomainId(dataCenter.getDomainId()); + zoneResponse.setType(dataCenter.getNetworkType().toString()); + zoneResponse.setObjectName("zone"); + return zoneResponse; + } + + @Override + public VolumeResponse createVolumeResponse(Volume volume) { + VolumeResponse volResponse = new VolumeResponse(); + volResponse.setId(volume.getId()); + + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("volume", volume.getId()); + if (asyncJob != null) { + volResponse.setJobId(asyncJob.getId()); + volResponse.setJobStatus(asyncJob.getStatus()); + } + + if (volume.getName() != null) { + volResponse.setName(volume.getName()); + } else { + volResponse.setName(""); + } + + volResponse.setZoneId(volume.getDataCenterId()); + volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName()); + + volResponse.setVolumeType(volume.getVolumeType().toString()); + volResponse.setDeviceId(volume.getDeviceId()); + + Long instanceId = volume.getInstanceId(); + if (instanceId != null) { + VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); + volResponse.setVirtualMachineId(vm.getId()); + volResponse.setVirtualMachineName(vm.getHostName()); + volResponse.setVirtualMachineDisplayName(vm.getHostName()); + volResponse.setVirtualMachineState(vm.getState().toString()); + } + + // Show the virtual size of the volume + volResponse.setSize(volume.getSize()); + + volResponse.setCreated(volume.getCreated()); + volResponse.setState(volume.getStatus().toString()); + + Account accountTemp = ApiDBUtils.findAccountById(volume.getAccountId()); + if (accountTemp != null) { + volResponse.setAccountName(accountTemp.getAccountName()); + volResponse.setDomainId(accountTemp.getDomainId()); + volResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + + String storageType; + try { + if (volume.getPoolId() == null) { + if (volume.getState() == Volume.State.Allocated) { + /* set it as shared, so the UI can attach it to VM */ + storageType = "shared"; + } else { + storageType = "unknown"; + } + } else { + storageType = ApiDBUtils.volumeIsOnSharedStorage(volume.getId()) ? "shared" : "local"; + } + } catch (InvalidParameterValueException e) { + s_logger.error(e.getMessage(), e); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Volume " + volume.getName() + " does not have a valid ID"); + } + + volResponse.setStorageType(storageType); + if (volume.getVolumeType().equals(Volume.VolumeType.ROOT)) { + volResponse.setServiceOfferingId(volume.getDiskOfferingId()); + } else { + volResponse.setDiskOfferingId(volume.getDiskOfferingId()); + } + + DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId()); + if (volume.getVolumeType().equals(Volume.VolumeType.ROOT)) { + volResponse.setServiceOfferingName(diskOffering.getName()); + volResponse.setServiceOfferingDisplayText(diskOffering.getDisplayText()); + } else { + volResponse.setDiskOfferingName(diskOffering.getName()); + volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText()); + } + + 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()); + } + volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); + volResponse.setAttached(volume.getAttached()); + volResponse.setDestroyed(volume.getDestroyed()); + volResponse.setObjectName("volume"); + return volResponse; + } + + @Override + public InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group) { + InstanceGroupResponse groupResponse = new InstanceGroupResponse(); + groupResponse.setId(group.getId()); + groupResponse.setName(group.getName()); + groupResponse.setCreated(group.getCreated()); + + Account accountTemp = ApiDBUtils.findAccountById(group.getAccountId()); + if (accountTemp != null) { + groupResponse.setAccountName(accountTemp.getAccountName()); + groupResponse.setDomainId(accountTemp.getDomainId()); + groupResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + groupResponse.setObjectName("instancegroup"); + return groupResponse; + } + + @Override + public PreallocatedLunResponse createPreallocatedLunResponse(Object result) { + PreallocatedLunVO preallocatedLun = (PreallocatedLunVO)result; + PreallocatedLunResponse preallocLunResponse = new PreallocatedLunResponse(); + preallocLunResponse.setId(preallocatedLun.getId()); + preallocLunResponse.setVolumeId(preallocatedLun.getVolumeId()); + preallocLunResponse.setZoneId(preallocatedLun.getDataCenterId()); + preallocLunResponse.setLun(preallocatedLun.getLun()); + preallocLunResponse.setPortal(preallocatedLun.getPortal()); + preallocLunResponse.setSize(preallocatedLun.getSize()); + preallocLunResponse.setTaken(preallocatedLun.getTaken()); + preallocLunResponse.setTargetIqn(preallocatedLun.getTargetIqn()); + preallocLunResponse.setObjectName("preallocatedlun"); + return preallocLunResponse; + } + + @Override + public StoragePoolResponse createStoragePoolResponse(StoragePool pool) { + StoragePoolResponse poolResponse = new StoragePoolResponse(); + poolResponse.setId(pool.getId()); + 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()); + if (pool.getPoolType() != null) { + poolResponse.setType(pool.getPoolType().toString()); + } + if (pool.getPodId() != null) { + poolResponse.setPodId(pool.getPodId()); + poolResponse.setPodName(ApiDBUtils.findPodById(pool.getPodId()).getName()); + } + if (pool.getCreated() != null) { + poolResponse.setCreated(pool.getCreated()); + } + + StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId()); + long capacity = pool.getCapacityBytes(); + long available = pool.getAvailableBytes(); + long used = capacity - available; + + if (stats != null) { + used = stats.getByteUsed(); + available = capacity - used; + } + + poolResponse.setDiskSizeTotal(pool.getCapacityBytes()); + poolResponse.setDiskSizeAllocated(used); + + if (pool.getClusterId() != null) { + ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId()); + poolResponse.setClusterId(cluster.getId()); + poolResponse.setClusterName(cluster.getName()); + } + poolResponse.setTags(ApiDBUtils.getStoragePoolTags(pool.getId())); + poolResponse.setObjectName("storagepool"); + return poolResponse; + } + + @Override + public ClusterResponse createClusterResponse(Cluster cluster) { + ClusterResponse clusterResponse = new ClusterResponse(); + clusterResponse.setId(cluster.getId()); + clusterResponse.setName(cluster.getName()); + clusterResponse.setPodId(cluster.getPodId()); + clusterResponse.setZoneId(cluster.getDataCenterId()); + HostPodVO pod = ApiDBUtils.findPodById(cluster.getPodId()); + clusterResponse.setPodName(pod.getName()); + DataCenterVO zone = ApiDBUtils.findZoneById(cluster.getDataCenterId()); + clusterResponse.setZoneName(zone.getName()); + clusterResponse.setObjectName("cluster"); + return clusterResponse; + } + + @Override + public FirewallRuleResponse createFirewallRuleResponse(FirewallRule fwRule) { + FirewallRuleResponse response = new FirewallRuleResponse(); + response.setId(fwRule.getId()); + response.setPrivatePort(fwRule.getPrivatePort()); + response.setProtocol(fwRule.getProtocol()); + response.setPublicPort(fwRule.getPublicPort()); + response.setPublicIpAddress(fwRule.getPublicIpAddress()); + if (fwRule.getPublicIpAddress() != null && fwRule.getPrivateIpAddress() != null) { + UserVm vm = ApiDBUtils.findUserVmByPublicIpAndGuestIp(fwRule.getPublicIpAddress(), fwRule.getPrivateIpAddress()); + response.setVirtualMachineId(vm.getId()); + response.setVirtualMachineName(vm.getHostName()); + response.setVirtualMachineDisplayName(vm.getDisplayName()); + } + response.setObjectName("portforwardingrule"); + return response; + } + + @Override + public IpForwardingRuleResponse createIpForwardingRuleResponse(FirewallRule fwRule) { + IpForwardingRuleResponse response = new IpForwardingRuleResponse(); + response.setId(fwRule.getId()); + response.setPrivatePort(fwRule.getPrivatePort()); + response.setProtocol(fwRule.getProtocol()); + response.setPublicPort(fwRule.getPublicPort()); + response.setPublicIpAddress(fwRule.getPublicIpAddress()); + if (fwRule.getPublicIpAddress() != null && fwRule.getPrivateIpAddress() != null) { + UserVm vm = ApiDBUtils.findUserVmByPublicIpAndGuestIp(fwRule.getPublicIpAddress(), fwRule.getPrivateIpAddress()); + response.setVirtualMachineId(vm.getId()); + response.setVirtualMachineName(vm.getHostName()); + response.setVirtualMachineDisplayName(vm.getDisplayName()); + } + response.setObjectName("ipforwardingrule"); + return response; + } + + @Override + public UserVmResponse createUserVm2Response(UserVm userVm) { + UserVmResponse userVmResponse = new UserVmResponse(); + Account acct = ApiDBUtils.findAccountById(Long.valueOf(userVm.getAccountId())); + // FIXME - this check should be done in searchForUserVm method in + // ManagementServerImpl; + // otherwise the number of vms returned is not going to match pageSize + // request parameter + if ((acct != null) && (acct.getRemoved() == null)) { + userVmResponse.setAccountName(acct.getAccountName()); + userVmResponse.setDomainId(acct.getDomainId()); + userVmResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); + } else { + return null; // the account has been deleted, skip this VM in the + // response + } + + userVmResponse.setId(userVm.getId()); + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_instance", userVm.getId()); + if (asyncJob != null) { + userVmResponse.setJobId(asyncJob.getId()); + userVmResponse.setJobStatus(asyncJob.getStatus()); + } + + userVmResponse.setName(userVm.getHostName()); + userVmResponse.setCreated(userVm.getCreated()); + + if (userVm.getState() != null) { + userVmResponse.setState(userVm.getState().toString()); + } + + userVmResponse.setHaEnable(userVm.isHaEnabled()); + + if (userVm.getDisplayName() != null) { + userVmResponse.setDisplayName(userVm.getDisplayName()); + } else { + userVmResponse.setDisplayName(userVm.getHostName()); + } + + InstanceGroupVO group = ApiDBUtils.findInstanceGroupForVM(userVm.getId()); + if (group != null) { + userVmResponse.setGroup(group.getName()); + userVmResponse.setGroupId(group.getId()); + } + + // Data Center Info + userVmResponse.setZoneId(userVm.getDataCenterId()); + userVmResponse.setZoneName(ApiDBUtils.findZoneById(userVm.getDataCenterId()).getName()); + + Account account = UserContext.current().getAccount(); + // if user is an admin, display host id + if (((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) && (userVm.getHostId() != null)) { + userVmResponse.setHostId(userVm.getHostId()); + userVmResponse.setHostName(ApiDBUtils.findHostById(userVm.getHostId()).getName()); + } + + // Template Info + VMTemplateVO template = ApiDBUtils.findTemplateById(userVm.getTemplateId()); + 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 (userVm.getPassword() != null) { + userVmResponse.setPassword(userVm.getPassword()); + } + + // ISO Info + if (userVm.getIsoId() != null) { + VMTemplateVO iso = ApiDBUtils.findTemplateById(userVm.getIsoId().longValue()); + if (iso != null) { + userVmResponse.setIsoId(userVm.getIsoId()); + userVmResponse.setIsoName(iso.getName()); + } + } + + // Service Offering Info + ServiceOffering offering = ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId()); + userVmResponse.setServiceOfferingId(userVm.getServiceOfferingId()); + userVmResponse.setServiceOfferingName(offering.getName()); + userVmResponse.setCpuNumber(offering.getCpu()); + userVmResponse.setCpuSpeed(offering.getSpeed()); + userVmResponse.setMemory(offering.getRamSize()); + + 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); + } + + // 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); + + long networkKbRead = (long) vmStats.getNetworkReadKBs(); + userVmResponse.setNetworkKbsRead(networkKbRead); + + long networkKbWrite = (long) vmStats.getNetworkWriteKBs(); + userVmResponse.setNetworkKbsWrite(networkKbWrite); + } + + userVmResponse.setGuestOsId(userVm.getGuestOSId()); + // network groups + userVmResponse.setNetworkGroupList(ApiDBUtils.getNetworkGroupsNamesForVm(userVm.getId())); + + List nics = ApiDBUtils.getNics(userVm); + for (Nic singleNic : nics) { + long configId = singleNic.getNetworkId(); + Network networkConf = ApiDBUtils.getNetwork(configId); + if (networkConf.getTrafficType() == TrafficType.Guest) { + userVmResponse.setIpAddress(singleNic.getIp4Address()); + } + } + + userVmResponse.setObjectName("virtualmachine"); + return userVmResponse; + } + + @Override + public DomainRouterResponse createDomainRouter2Response(VirtualRouter router) { + DomainRouterResponse routerResponse = new DomainRouterResponse(); + routerResponse.setId(router.getId()); + routerResponse.setZoneId(router.getDataCenterId()); + routerResponse.setName(router.getHostName()); + routerResponse.setPodId(router.getPodId()); + routerResponse.setTemplateId(router.getTemplateId()); + routerResponse.setCreated(router.getCreated()); + routerResponse.setState(router.getState()); + routerResponse.setNetworkDomain(router.getDomain()); + + if (router.getHostId() != null) { + routerResponse.setHostId(router.getHostId()); + routerResponse.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName()); + } + + Account accountTemp = ApiDBUtils.findAccountById(router.getAccountId()); + if (accountTemp != null) { + routerResponse.setAccountName(accountTemp.getAccountName()); + routerResponse.setDomainId(accountTemp.getDomainId()); + routerResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("domain_router", router.getId()); + if (asyncJob != null) { + routerResponse.setJobId(asyncJob.getId()); + routerResponse.setJobStatus(asyncJob.getStatus()); + } + + List nics = ApiDBUtils.getNics(router); + for (Nic singleNic : nics) { + long configId = singleNic.getNetworkId(); + Network networkConf = ApiDBUtils.getNetwork(configId); + + if (networkConf.getTrafficType() == TrafficType.Guest) { + routerResponse.setGuestIpAddress(singleNic.getIp4Address()); + routerResponse.setGuestMacAddress(singleNic.getMacAddress()); + routerResponse.setGuestNetmask(singleNic.getNetmask()); + } + + if (networkConf.getTrafficType() == TrafficType.Control) { + routerResponse.setPrivateIp(singleNic.getIp4Address()); + routerResponse.setPrivateMacAddress(singleNic.getMacAddress()); + routerResponse.setPrivateNetmask(singleNic.getNetmask()); + } + + if (networkConf.getTrafficType() == TrafficType.Public) { + routerResponse.setPublicIp(singleNic.getIp4Address()); + routerResponse.setPublicMacAddress(singleNic.getMacAddress()); + routerResponse.setPublicNetmask(singleNic.getNetmask()); + routerResponse.setGateway(singleNic.getGateway()); + } + + DataCenter zone = ApiDBUtils.findZoneById(router.getDataCenterId()); + if (zone != null) { + routerResponse.setZoneName(zone.getName()); + routerResponse.setDns1(zone.getDns1()); + routerResponse.setDns2(zone.getDns2()); + } + } + + routerResponse.setObjectName("domainrouter"); + return routerResponse; + } + + @Override + public SystemVmResponse createSystemVm2Response(VirtualMachine systemVM) { + SystemVmResponse vmResponse = new SystemVmResponse(); + if (systemVM instanceof SystemVm) { + SystemVm vm = (SystemVm) systemVM; + + vmResponse.setId(vm.getId()); + vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); + vmResponse.setZoneId(vm.getDataCenterId()); + + vmResponse.setNetworkDomain(vm.getDomain()); + vmResponse.setName(vm.getHostName()); + vmResponse.setPodId(vm.getPodId()); + vmResponse.setTemplateId(vm.getTemplateId()); + vmResponse.setCreated(vm.getCreated()); + + if (vm.getHostId() != null) { + vmResponse.setHostId(vm.getHostId()); + vmResponse.setHostName(ApiDBUtils.findHostById(vm.getHostId()).getName()); + } + + if (vm.getState() != null) { + vmResponse.setState(vm.getState().toString()); + } + + String instanceType = "console_proxy"; + if (systemVM instanceof SecondaryStorageVmVO) { + instanceType = "sec_storage_vm"; // FIXME: this should be a + // constant so that the async + // jobs get updated with the + // correct instance type, they + // are using + // different instance types at + // the moment + } + + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob(instanceType, vm.getId()); + if (asyncJob != null) { + vmResponse.setJobId(asyncJob.getId()); + vmResponse.setJobStatus(asyncJob.getStatus()); + } + + // for console proxies, add the active sessions + if (systemVM instanceof ConsoleProxyVO) { + ConsoleProxyVO proxy = (ConsoleProxyVO) systemVM; + vmResponse.setActiveViewerSessions(proxy.getActiveSession()); + } + + DataCenter zone = ApiDBUtils.findZoneById(vm.getDataCenterId()); + if (zone != null) { + vmResponse.setZoneName(zone.getName()); + vmResponse.setDns1(zone.getDns1()); + vmResponse.setDns2(zone.getDns2()); + } + + List nics = ApiDBUtils.getNics(systemVM); + for (Nic singleNic : nics) { + long configId = singleNic.getNetworkId(); + Network networkConf = ApiDBUtils.getNetwork(configId); + + if (networkConf.getTrafficType() == TrafficType.Management) { + vmResponse.setPrivateIp(singleNic.getIp4Address()); + vmResponse.setPrivateMacAddress(singleNic.getMacAddress()); + vmResponse.setPrivateNetmask(singleNic.getNetmask()); + } + + if (networkConf.getTrafficType() == TrafficType.Public) { + vmResponse.setPublicIp(singleNic.getIp4Address()); + vmResponse.setPublicMacAddress(singleNic.getMacAddress()); + vmResponse.setPublicNetmask(singleNic.getNetmask()); + vmResponse.setGateway(singleNic.getGateway()); + } + } + } + + vmResponse.setObjectName("systemvm"); + return vmResponse; + } + + @Override + public void synchronizeCommand(Object job, String syncObjType, long syncObjId) { + ApiDBUtils.synchronizeCommand(job, syncObjType, syncObjId); + } + + @Override + public User findUserById(long userId) { + return ApiDBUtils.findUserById(userId); + } + + @Override + public UserVm findUserVmById(long vmId) { + return ApiDBUtils.findUserVmById(vmId); + + } + + @Override + public Volume findVolumeById(long volumeId) { + return ApiDBUtils.findVolumeById(volumeId); + } + + @Override + public Account findAccountByNameDomain(String accountName, long domainId) { + return ApiDBUtils.findAccountByNameDomain(accountName, domainId); + } + + @Override + public VirtualMachineTemplate findTemplateById(long templateId) { + return ApiDBUtils.findTemplateById(templateId); + } + + @Override + public VpnUsersResponse createVpnUserResponse(VpnUser vpnUser) { + VpnUsersResponse vpnResponse = new VpnUsersResponse(); + vpnResponse.setId(vpnUser.getId()); + vpnResponse.setUserName(vpnUser.getUsername()); + vpnResponse.setAccountName(vpnUser.getAccountName()); + + Account accountTemp = ApiDBUtils.findAccountById(vpnUser.getAccountId()); + if (accountTemp != null) { + vpnResponse.setDomainId(accountTemp.getDomainId()); + vpnResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + + vpnResponse.setObjectName("vpnuser"); + return vpnResponse; + } + + @Override + public RemoteAccessVpnResponse createRemoteAccessVpnResponse(RemoteAccessVpn vpn) { + RemoteAccessVpnResponse vpnResponse = new RemoteAccessVpnResponse(); + vpnResponse.setId(vpn.getId()); + vpnResponse.setPublicIp(vpn.getVpnServerAddress()); + vpnResponse.setIpRange(vpn.getIpRange()); + vpnResponse.setPresharedKey(vpn.getIpsecPresharedKey()); + vpnResponse.setAccountName(vpn.getAccountName()); + + Account accountTemp = ApiDBUtils.findAccountById(vpn.getAccountId()); + if (accountTemp != null) { + vpnResponse.setDomainId(accountTemp.getDomainId()); + vpnResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); + } + + vpnResponse.setObjectName("remoteaccessvpn"); + return vpnResponse; + } + + @Override + public TemplateResponse createIsoResponse(VirtualMachineTemplate result) { + TemplateResponse response = new TemplateResponse(); + response.setId(result.getId()); + 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()); + response.setBootable(result.isBootable()); + response.setObjectName("iso"); + return response; + } + + @Override + public void createTemplateResponse(List responses, VirtualMachineTemplate template, boolean onlyReady, Long zoneId, boolean isAdmin, Account account) { + List templateHostRefsForTemplate = ApiDBUtils.listTemplateHostBy(template.getId(), zoneId); + + for (VMTemplateHostVO templateHostRef : templateHostRefsForTemplate) { + if (onlyReady && templateHostRef.getDownloadState() != Status.DOWNLOADED) { + continue; + } + + TemplateResponse templateResponse = new TemplateResponse(); + templateResponse.setId(template.getId()); + templateResponse.setName(template.getName()); + templateResponse.setDisplayText(template.getDisplayText()); + templateResponse.setPublic(template.isPublicTemplate()); + templateResponse.setCreated(templateHostRef.getCreated()); + + templateResponse.setReady(templateHostRef.getDownloadState()==Status.DOWNLOADED); + templateResponse.setFeatured(template.isFeatured()); + templateResponse.setPasswordEnabled(template.getEnablePassword()); + templateResponse.setCrossZones(template.isCrossZones()); + templateResponse.setFormat(template.getFormat()); + if (template.getTemplateType() != null) { + templateResponse.setTemplateType(template.getTemplateType().toString()); + } + templateResponse.setHypervisor(template.getHypervisorType().toString()); + + GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); + if (os != null) { + templateResponse.setOsTypeId(os.getId()); + templateResponse.setOsTypeName(os.getDisplayName()); + } else { + templateResponse.setOsTypeId(-1L); + templateResponse.setOsTypeName(""); + } + + // add account ID and name + Account owner = ApiDBUtils.findAccountById(template.getAccountId()); + if (owner != null) { + templateResponse.setAccount(owner.getAccountName()); + templateResponse.setDomainId(owner.getDomainId()); + templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); + } + + HostVO host = ApiDBUtils.findHostById(templateHostRef.getHostId()); + DataCenterVO datacenter = ApiDBUtils.findZoneById(host.getDataCenterId()); + + // Add the zone ID + templateResponse.setZoneId(host.getDataCenterId()); + templateResponse.setZoneName(datacenter.getName()); + + // If the user is an admin, add the template download status + if (isAdmin || account.getId() == template.getAccountId()) { + // add download status + if (templateHostRef.getDownloadState()!=Status.DOWNLOADED) { + String templateStatus = "Processing"; + if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { + if (templateHostRef.getDownloadPercent() == 100) { + templateStatus = "Installing Template"; + } else { + templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded"; + } + } else { + templateStatus = templateHostRef.getErrorString(); + } + templateResponse.setStatus(templateStatus); + } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { + templateResponse.setStatus("Download Complete"); + } else { + templateResponse.setStatus("Successfully Installed"); + } + } + + long templateSize = templateHostRef.getSize(); + if (templateSize > 0) { + templateResponse.setSize(templateSize); + } + + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_template", template.getId()); + if (asyncJob != null) { + templateResponse.setJobId(asyncJob.getId()); + templateResponse.setJobStatus(asyncJob.getStatus()); + } + + templateResponse.setObjectName("template"); + responses.add(templateResponse); + } + } + + @Override + public ListResponse createTemplateResponse2(VirtualMachineTemplate template, Long zoneId) { + ListResponse response = new ListResponse(); + List responses = new ArrayList(); + List zones = null; + + if ((zoneId != null) && (zoneId != -1)) { + zones = new ArrayList(); + zones.add(ApiDBUtils.findZoneById(zoneId)); + } else { + zones = ApiDBUtils.listZones(); + } + + for (DataCenterVO zone : zones) { + TemplateResponse templateResponse = new TemplateResponse(); + templateResponse.setId(template.getId()); + templateResponse.setName(template.getName()); + templateResponse.setDisplayText(template.getDisplayText()); + templateResponse.setPublic(template.isPublicTemplate()); + templateResponse.setCrossZones(template.isCrossZones()); + + VMTemplateHostVO isoHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), zone.getId()); + if (isoHostRef != null) { + templateResponse.setCreated(isoHostRef.getCreated()); + templateResponse.setReady(isoHostRef.getDownloadState() == Status.DOWNLOADED); + } + + templateResponse.setFeatured(template.isFeatured()); + templateResponse.setPasswordEnabled(template.getEnablePassword()); + templateResponse.setFormat(template.getFormat()); + templateResponse.setStatus("Processing"); + + GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); + if (os != null) { + templateResponse.setOsTypeId(os.getId()); + templateResponse.setOsTypeName(os.getDisplayName()); + } else { + templateResponse.setOsTypeId(-1L); + templateResponse.setOsTypeName(""); + } + + Account owner = ApiDBUtils.findAccountById(template.getAccountId()); + if (owner != null) { + templateResponse.setAccountId(owner.getId()); + templateResponse.setAccount(owner.getAccountName()); + templateResponse.setDomainId(owner.getDomainId()); + } + + templateResponse.setZoneId(zone.getId()); + templateResponse.setZoneName(zone.getName()); + templateResponse.setHypervisor(template.getHypervisorType().toString()); + templateResponse.setObjectName("template"); + + responses.add(templateResponse); + } + response.setResponses(responses); + return response; + } + + @Override + public ListResponse createIsoResponses(VirtualMachineTemplate template, Long zoneId) { + ListResponse response = new ListResponse(); + List responses = new ArrayList(); + List zones = null; + + if ((zoneId != null) && (zoneId != -1)) { + zones = new ArrayList(); + zones.add(ApiDBUtils.findZoneById(zoneId)); + } else { + zones = ApiDBUtils.listZones(); + } + + for (DataCenterVO zone : zones) { + TemplateResponse templateResponse = new TemplateResponse(); + templateResponse.setId(template.getId()); + templateResponse.setName(template.getName()); + templateResponse.setDisplayText(template.getDisplayText()); + templateResponse.setPublic(template.isPublicTemplate()); + + VMTemplateHostVO isoHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), zone.getId()); + if (isoHostRef != null) { + templateResponse.setCreated(isoHostRef.getCreated()); + templateResponse.setReady(isoHostRef.getDownloadState() == Status.DOWNLOADED); + } + + templateResponse.setFeatured(template.isFeatured()); + templateResponse.setBootable(template.isBootable()); + templateResponse.setOsTypeId(template.getGuestOSId()); + templateResponse.setOsTypeName(ApiDBUtils.findGuestOSById(template.getGuestOSId()).getDisplayName()); + + Account owner = ApiDBUtils.findAccountById(template.getAccountId()); + if (owner != null) { + templateResponse.setAccountId(owner.getId()); + templateResponse.setAccount(owner.getAccountName()); + templateResponse.setDomainId(owner.getDomainId()); + } + + templateResponse.setZoneId(zone.getId()); + templateResponse.setZoneName(zone.getName()); + templateResponse.setObjectName("iso"); + + responses.add(templateResponse); + } + response.setResponses(responses); + return response; + } + + @Override + public ListResponse createNetworkGroupResponses(List networkGroups) { + List groupResultObjs = NetworkGroupResultObject.transposeNetworkGroups(networkGroups); + + ListResponse response = new ListResponse(); + List netGrpResponses = new ArrayList(); + for (NetworkGroupResultObject networkGroup : groupResultObjs) { + NetworkGroupResponse netGrpResponse = new NetworkGroupResponse(); + netGrpResponse.setId(networkGroup.getId()); + netGrpResponse.setName(networkGroup.getName()); + netGrpResponse.setDescription(networkGroup.getDescription()); + netGrpResponse.setAccountName(networkGroup.getAccountName()); + netGrpResponse.setDomainId(networkGroup.getDomainId()); + netGrpResponse.setDomainName(ApiDBUtils.findDomainById(networkGroup.getDomainId()).getName()); + + List ingressRules = networkGroup.getIngressRules(); + if ((ingressRules != null) && !ingressRules.isEmpty()) { + List ingressRulesResponse = new ArrayList(); + + for (IngressRuleResultObject ingressRule : ingressRules) { + IngressRuleResponse ingressData = new IngressRuleResponse(); + + ingressData.setRuleId(ingressRule.getId()); + ingressData.setProtocol(ingressRule.getProtocol()); + if ("icmp".equalsIgnoreCase(ingressRule.getProtocol())) { + ingressData.setIcmpType(ingressRule.getStartPort()); + ingressData.setIcmpCode(ingressRule.getEndPort()); + } else { + ingressData.setStartPort(ingressRule.getStartPort()); + ingressData.setEndPort(ingressRule.getEndPort()); + } + + if (ingressRule.getAllowedNetworkGroup() != null) { + ingressData.setNetworkGroupName(ingressRule.getAllowedNetworkGroup()); + ingressData.setAccountName(ingressRule.getAllowedNetGroupAcct()); + } else { + ingressData.setCidr(ingressRule.getAllowedSourceIpCidr()); + } + + ingressData.setObjectName("ingressrule"); + ingressRulesResponse.add(ingressData); + } + netGrpResponse.setIngressRules(ingressRulesResponse); + } + netGrpResponse.setObjectName("securitygroup"); + netGrpResponses.add(netGrpResponse); + } + + response.setResponses(netGrpResponses); + return response; + } + + @Override + public NetworkGroupResponse createNetworkGroupResponse(NetworkGroup group) { + NetworkGroupResponse response = new NetworkGroupResponse(); + response.setAccountName(group.getAccountName()); + response.setDescription(group.getDescription()); + response.setDomainId(group.getDomainId()); + response.setDomainName(ApiDBUtils.findDomainById(group.getDomainId()).getName()); + response.setId(group.getId()); + response.setName(group.getName()); + + response.setObjectName("securitygroup"); + return response; + + } + + @Override + public ExtractResponse createExtractResponse(long uploadId, long id, long zoneId, long accountId, String mode) { + UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId); + ExtractResponse response = new ExtractResponse(); + response.setObjectName("template"); + response.setId(id); + response.setName(ApiDBUtils.findTemplateById(id).getName()); + response.setZoneId(zoneId); + response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName()); + response.setMode(mode); + response.setUploadId(uploadId); + response.setState(uploadInfo.getUploadState().toString()); + response.setAccountId(accountId); + //FIX ME - Need to set the url once the gson jar is upgraded since it is throwing an error right now. + //response.setUrl(uploadInfo.getUploadUrl()); + response.setUrl(uploadInfo.getUploadUrl().replaceAll("/", "%2F")); + return response; + + } + + @Override + public TemplateResponse createTemplateResponse(VirtualMachineTemplate template, long destZoneId) { + TemplateResponse templateResponse = new TemplateResponse(); + if (template != null) { + templateResponse.setId(template.getId()); + templateResponse.setName(template.getName()); + templateResponse.setDisplayText(template.getDisplayText()); + templateResponse.setPublic(template.isPublicTemplate()); + templateResponse.setBootable(template.isBootable()); + templateResponse.setFeatured(template.isFeatured()); + templateResponse.setCrossZones(template.isCrossZones()); + templateResponse.setCreated(template.getCreated()); + templateResponse.setFormat(template.getFormat()); + templateResponse.setPasswordEnabled(template.getEnablePassword()); + templateResponse.setZoneId(destZoneId); + templateResponse.setZoneName(ApiDBUtils.findZoneById(destZoneId).getName()); + + GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); + if (os != null) { + templateResponse.setOsTypeId(os.getId()); + templateResponse.setOsTypeName(os.getDisplayName()); + } else { + templateResponse.setOsTypeId(-1L); + templateResponse.setOsTypeName(""); + } + + // add account ID and name + Account owner = ApiDBUtils.findAccountById(template.getAccountId()); + if (owner != null) { + templateResponse.setAccount(owner.getAccountName()); + templateResponse.setDomainId(owner.getDomainId()); + templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); + } + + //set status + Account account = UserContext.current().getAccount(); + boolean isAdmin = false; + if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN) || (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN)) { + isAdmin = true; + } + + //Return download status for admin users + VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), destZoneId); + + if (isAdmin || template.getAccountId() == account.getId()) { + if (templateHostRef.getDownloadState()!=Status.DOWNLOADED) { + String templateStatus = "Processing"; + if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { + if (templateHostRef.getDownloadPercent() == 100) { + templateStatus = "Installing Template"; + } else { + templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded"; + } + } else { + templateStatus = templateHostRef.getErrorString(); + } + templateResponse.setStatus(templateStatus); + } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { + templateResponse.setStatus("Download Complete"); + } else { + templateResponse.setStatus("Successfully Installed"); + } + } + + templateResponse.setReady(templateHostRef != null && templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED); + + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy template"); + } + + templateResponse.setObjectName("template"); + return templateResponse; + } + + @Override + public TemplateResponse createIsoResponse3(VirtualMachineTemplate iso, long destZoneId) { + TemplateResponse isoResponse = new TemplateResponse(); + if (iso != null) { + isoResponse.setId(iso.getId()); + isoResponse.setName(iso.getName()); + isoResponse.setDisplayText(iso.getDisplayText()); + isoResponse.setPublic(iso.isPublicTemplate()); + isoResponse.setBootable(iso.isBootable()); + isoResponse.setFeatured(iso.isFeatured()); + isoResponse.setCrossZones(iso.isCrossZones()); + isoResponse.setCreated(iso.getCreated()); + isoResponse.setZoneId(destZoneId); + isoResponse.setZoneName(ApiDBUtils.findZoneById(destZoneId).getName()); + + GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); + if (os != null) { + isoResponse.setOsTypeId(os.getId()); + isoResponse.setOsTypeName(os.getDisplayName()); + } else { + isoResponse.setOsTypeId(-1L); + isoResponse.setOsTypeName(""); + } + + // add account ID and name + Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); + if (owner != null) { + isoResponse.setAccount(owner.getAccountName()); + isoResponse.setDomainId(owner.getDomainId()); + isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); + } + + //set status + Account account = UserContext.current().getAccount(); + boolean isAdmin = false; + if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN) || (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN)) { + isAdmin = true; + } + + //Return download status for admin users + VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(iso.getId(), destZoneId); + + if (isAdmin || iso.getAccountId() == account.getId()) { + if (templateHostRef.getDownloadState()!=Status.DOWNLOADED) { + String templateStatus = "Processing"; + if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { + if (templateHostRef.getDownloadPercent() == 100) { + templateStatus = "Installing Template"; + } else { + templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded"; + } + } else { + templateStatus = templateHostRef.getErrorString(); + } + isoResponse.setStatus(templateStatus); + } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { + isoResponse.setStatus("Download Complete"); + } else { + isoResponse.setStatus("Successfully Installed"); + } + } + + isoResponse.setReady(templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED); + + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy iso"); + } + + isoResponse.setObjectName("iso"); + return isoResponse; + } + + @Override + public String toSerializedString(CreateCmdResponse response, String responseType) { + return ApiResponseSerializer.toSerializedString(response, responseType); + } + + @Override + public AsyncJobResponse createAsyncJobResponse(AsyncJob job) { + AsyncJobResponse jobResponse = new AsyncJobResponse(); + jobResponse.setAccountId(job.getAccountId()); + jobResponse.setCmd(job.getCmd()); + jobResponse.setCreated(job.getCreated()); + jobResponse.setId(job.getId()); + jobResponse.setJobInstanceId(job.getInstanceId()); + jobResponse.setJobInstanceType(job.getInstanceType()); + jobResponse.setJobProcStatus(job.getProcessStatus()); + jobResponse.setJobResult((ResponseObject)ApiSerializerHelper.fromSerializedString(job.getResult())); + jobResponse.setJobResultCode(job.getResultCode()); + jobResponse.setJobStatus(job.getStatus()); + jobResponse.setUserId(job.getUserId()); + + jobResponse.setObjectName("asyncjobs"); + return jobResponse; + } + + @Override + public TemplateResponse createTemplateResponse(VirtualMachineTemplate template, Long snapshotId, long volumeId) { + TemplateResponse response = new TemplateResponse(); + response.setId(template.getId()); + response.setName(template.getName()); + response.setDisplayText(template.getDisplayText()); + response.setPublic(template.isPublicTemplate()); + response.setPasswordEnabled(template.getEnablePassword()); + response.setCrossZones(template.isCrossZones()); + + Volume volume = null; + if (snapshotId != null) { + Snapshot snapshot = ApiDBUtils.findSnapshotById(snapshotId); + volume = ApiDBUtils.findVolumeById(snapshot.getVolumeId()); + } else { + volume = ApiDBUtils.findVolumeById(volumeId); + } + + VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), volume.getDataCenterId()); + response.setCreated(templateHostRef.getCreated()); + response.setReady(templateHostRef != null && templateHostRef.getDownloadState() == Status.DOWNLOADED); + + GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); + if (os != null) { + response.setOsTypeId(os.getId()); + response.setOsTypeName(os.getDisplayName()); + } else { + response.setOsTypeId(-1L); + response.setOsTypeName(""); + } + + Account owner = ApiDBUtils.findAccountById(template.getAccountId()); + if (owner != null) { + response.setAccount(owner.getAccountName()); + response.setDomainId(owner.getDomainId()); + response.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); + } + + DataCenter zone = ApiDBUtils.findZoneById(volume.getDataCenterId()); + if (zone != null) { + response.setZoneId(zone.getId()); + response.setZoneName(zone.getName()); + } + + response.setObjectName("template"); + return response; + + } + + @Override + public EventResponse createEventResponse(Event event) { + EventResponse responseEvent = new EventResponse(); + responseEvent.setAccountName(event.getAccountName()); + responseEvent.setCreated(event.getCreateDate()); + responseEvent.setDescription(event.getDescription()); + responseEvent.setDomainId(event.getDomainId()); + responseEvent.setEventType(event.getType()); + responseEvent.setId(event.getId()); + responseEvent.setLevel(event.getLevel()); + responseEvent.setParentId(event.getStartId()); + responseEvent.setState(event.getState()); + responseEvent.setDomainName(ApiDBUtils.findDomainById(event.getDomainId()).getName()); + User user = ApiDBUtils.findUserById(event.getUserId()); + if (user != null) { + responseEvent.setUsername(user.getUsername()); + } + + responseEvent.setObjectName("event"); + return responseEvent; + } + + @Override + public ListResponse createIsoResponse(List isos, Long zoneId, boolean onlyReady, boolean isAdmin, Account account) { + Map> isoHostsMap = new HashMap>(); + for (VirtualMachineTemplate iso : isos) { + // TODO: implement + List isoHosts = ApiDBUtils.listTemplateHostBy(iso.getId(), zoneId); + if (iso.getName().equals("xs-tools.iso")) { + List xstoolsZones = new ArrayList(); + // the xs-tools.iso is a special case since it will be available on every computing host in the zone and we want to return it once per zone + List xstoolsHosts = new ArrayList(); + for (VMTemplateHostVO isoHost : isoHosts) { + // TODO: implement + HostVO host = ApiDBUtils.findHostById(isoHost.getHostId()); + if (!xstoolsZones.contains(Long.valueOf(host.getDataCenterId()))) { + xstoolsZones.add(Long.valueOf(host.getDataCenterId())); + xstoolsHosts.add(isoHost); + } + } + isoHostsMap.put(iso.getId(), xstoolsHosts); + } else { + isoHostsMap.put(iso.getId(), isoHosts); + } + } + + ListResponse response = new ListResponse(); + List isoResponses = new ArrayList(); + for (VirtualMachineTemplate iso : isos) { + List isoHosts = isoHostsMap.get(iso.getId()); + for (VMTemplateHostVO isoHost : isoHosts) { + if (onlyReady && isoHost.getDownloadState() != Status.DOWNLOADED) { + continue; + } + + TemplateResponse isoResponse = new TemplateResponse(); + isoResponse.setId(iso.getId()); + isoResponse.setName(iso.getName()); + isoResponse.setDisplayText(iso.getDisplayText()); + isoResponse.setPublic(iso.isPublicTemplate()); + isoResponse.setCreated(isoHost.getCreated()); + isoResponse.setReady(isoHost.getDownloadState() == Status.DOWNLOADED); + isoResponse.setBootable(iso.isBootable()); + isoResponse.setFeatured(iso.isFeatured()); + isoResponse.setCrossZones(iso.isCrossZones()); + isoResponse.setPublic(iso.isPublicTemplate()); + + // TODO: implement + GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); + if (os != null) { + isoResponse.setOsTypeId(os.getId()); + isoResponse.setOsTypeName(os.getDisplayName()); + } else { + isoResponse.setOsTypeId(-1L); + isoResponse.setOsTypeName(""); + } + + // add account ID and name + Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); + if (owner != null) { + isoResponse.setAccount(owner.getAccountName()); + isoResponse.setDomainId(owner.getDomainId()); + // TODO: implement + isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); + } + + // Add the zone ID + // TODO: implement + HostVO host = ApiDBUtils.findHostById(isoHost.getHostId()); + DataCenterVO datacenter = ApiDBUtils.findZoneById(host.getDataCenterId()); + isoResponse.setZoneId(host.getDataCenterId()); + isoResponse.setZoneName(datacenter.getName()); + + // If the user is an admin, add the template download status + if (isAdmin || account.getId() == iso.getAccountId()) { + // add download status + if (isoHost.getDownloadState()!=Status.DOWNLOADED) { + String isoStatus = "Processing"; + if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { + isoStatus = "Download Complete"; + } else if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { + if (isoHost.getDownloadPercent() == 100) { + isoStatus = "Installing ISO"; + } else { + isoStatus = isoHost.getDownloadPercent() + "% Downloaded"; + } + } else { + isoStatus = isoHost.getErrorString(); + } + isoResponse.setStatus(isoStatus); + } else { + isoResponse.setStatus("Successfully Installed"); + } + } + + long isoSize = isoHost.getSize(); + if (isoSize > 0) { + isoResponse.setSize(isoSize); + } + + AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_template", iso.getId()); + if(asyncJob != null) { + isoResponse.setJobId(asyncJob.getId()); + isoResponse.setJobStatus(asyncJob.getStatus()); + } + + isoResponse.setObjectName("iso"); + isoResponses.add(isoResponse); + } + } + + response.setResponses(isoResponses); + + return response; + } + + private List sumCapacities(List hostCapacities) { + Map totalCapacityMap = new HashMap(); + Map usedCapacityMap = new HashMap(); + + Set poolIdsToIgnore = new HashSet(); + Criteria c = new Criteria(); + // TODO: implement + List allStoragePools = ApiDBUtils.searchForStoragePools(c); + for (StoragePoolVO pool : allStoragePools) { + StoragePoolType poolType = pool.getPoolType(); + if (!(poolType.equals(StoragePoolType.NetworkFilesystem) || poolType.equals(StoragePoolType.IscsiLUN))) { + poolIdsToIgnore.add(pool.getId()); + } + } + + // collect all the capacity types, sum allocated/used and sum total...get one capacity number for each + for (Capacity capacity : hostCapacities) { + if (poolIdsToIgnore.contains(capacity.getHostOrPoolId())) { + continue; + } + + String key = capacity.getCapacityType() + "_" + capacity.getDataCenterId(); + String keyForPodTotal = key + "_-1"; + + boolean sumPodCapacity = false; + if (capacity.getPodId() != null) { + key += "_" + capacity.getPodId(); + sumPodCapacity = true; + } + + Long totalCapacity = totalCapacityMap.get(key); + Long usedCapacity = usedCapacityMap.get(key); + + if (totalCapacity == null) { + totalCapacity = new Long(capacity.getTotalCapacity()); + } else { + totalCapacity = new Long(capacity.getTotalCapacity() + totalCapacity.longValue()); + } + + if (usedCapacity == null) { + usedCapacity = new Long(capacity.getUsedCapacity()); + } else { + usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity.longValue()); + } + + totalCapacityMap.put(key, totalCapacity); + usedCapacityMap.put(key, usedCapacity); + + if (sumPodCapacity) { + totalCapacity = totalCapacityMap.get(keyForPodTotal); + usedCapacity = usedCapacityMap.get(keyForPodTotal); + + if (totalCapacity == null) { + totalCapacity = new Long(capacity.getTotalCapacity()); + } else { + totalCapacity = new Long(capacity.getTotalCapacity() + totalCapacity.longValue()); + } + + if (usedCapacity == null) { + usedCapacity = new Long(capacity.getUsedCapacity()); + } else { + usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity.longValue()); + } + + totalCapacityMap.put(keyForPodTotal, totalCapacity); + usedCapacityMap.put(keyForPodTotal, usedCapacity); + } + } + + List summedCapacities = new ArrayList(); + for (String key : totalCapacityMap.keySet()) { + CapacityVO summedCapacity = new CapacityVO(); + + StringTokenizer st = new StringTokenizer(key, "_"); + summedCapacity.setCapacityType(Short.parseShort(st.nextToken())); + summedCapacity.setDataCenterId(Long.parseLong(st.nextToken())); + if (st.hasMoreTokens()) { + summedCapacity.setPodId(Long.parseLong(st.nextToken())); + } + + summedCapacity.setTotalCapacity(totalCapacityMap.get(key)); + summedCapacity.setUsedCapacity(usedCapacityMap.get(key)); + + summedCapacities.add(summedCapacity); + } + return summedCapacities; + } + + + @Override + public List createCapacityResponse(List result, DecimalFormat format) { + List capacityResponses = new ArrayList(); + List summedCapacities = sumCapacities(result); + for (CapacityVO summedCapacity : summedCapacities) { + CapacityResponse capacityResponse = new CapacityResponse(); + capacityResponse.setCapacityTotal(summedCapacity.getTotalCapacity()); + capacityResponse.setCapacityType(summedCapacity.getCapacityType()); + capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity()); + if (summedCapacity.getPodId() != null) { + capacityResponse.setPodId(summedCapacity.getPodId()); + if (summedCapacity.getPodId() > 0) { + capacityResponse.setPodName(ApiDBUtils.findPodById(summedCapacity.getPodId()).getName()); + } else { + capacityResponse.setPodName("All"); + } + } + capacityResponse.setZoneId(summedCapacity.getDataCenterId()); + capacityResponse.setZoneName(ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()).getName()); + if (summedCapacity.getTotalCapacity() != 0) { + float computed = ((float)summedCapacity.getUsedCapacity() / (float)summedCapacity.getTotalCapacity() * 100f); + capacityResponse.setPercentUsed(format.format((float)summedCapacity.getUsedCapacity() / (float)summedCapacity.getTotalCapacity() * 100f)); + } else { + capacityResponse.setPercentUsed(format.format(0L)); + } + + capacityResponse.setObjectName("capacity"); + capacityResponses.add(capacityResponse); + } + + return capacityResponses; + } + + @Override + public TemplatePermissionsResponse createTemplatePermissionsResponse(List accountNames, long id, boolean isAdmin) { + Long templateOwnerDomain = null; + VirtualMachineTemplate template = ApiDBUtils.findTemplateById(id); + if (isAdmin) { + // FIXME: we have just template id and need to get template owner from that + Account templateOwner = ApiDBUtils.findAccountById(template.getAccountId()); + if (templateOwner != null) { + templateOwnerDomain = templateOwner.getDomainId(); + } + } + + TemplatePermissionsResponse response = new TemplatePermissionsResponse(); + response.setId(template.getId()); + response.setPublicTemplate(template.isPublicTemplate()); + if (isAdmin && (templateOwnerDomain != null)) { + response.setDomainId(templateOwnerDomain); + } + + response.setAccountNames(accountNames); + response.setObjectName("templatepermission"); + return response; + } + + @Override + public AsyncJobResponse queryJobResult(QueryAsyncJobResultCmd cmd) { + AsyncJobResult result = ApiDBUtils._asyncMgr.queryAsyncJobResult(cmd); + AsyncJobResponse response = new AsyncJobResponse(); + response.setId(result.getJobId()); + response.setJobStatus(result.getJobStatus()); + response.setJobProcStatus(result.getProcessStatus()); + response.setJobResultCode(result.getResultCode()); + response.setJobResult((ResponseObject)ApiSerializerHelper.fromSerializedString(result.getResult())); + + Object resultObject = result.getResultObject(); + if (resultObject != null) { + Class clz = resultObject.getClass(); + if(clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) { + response.setJobResultType("text"); + } else { + response.setJobResultType("object"); + } + } + + return response; } - - public static DomainResponse createDomainResponse (DomainVO domain) { - DomainResponse domainResponse = new DomainResponse(); - domainResponse.setDomainName(domain.getName()); - domainResponse.setId(domain.getId()); - domainResponse.setLevel(domain.getLevel()); - domainResponse.setParentDomainId(domain.getParent()); - if (domain.getParent() != null) { - domainResponse.setParentDomainName(ApiDBUtils.findDomainById(domain.getParent()).getName()); - } - if (domain.getChildCount() > 0) { - domainResponse.setHasChild(true); - } - domainResponse.setObjectName("domain"); - return domainResponse; - } - - public static DiskOfferingResponse createDiskOfferingResponse (DiskOfferingVO offering) { - DiskOfferingResponse diskOfferingResponse = new DiskOfferingResponse(); - diskOfferingResponse.setId(offering.getId()); - diskOfferingResponse.setName(offering.getName()); - diskOfferingResponse.setDisplayText(offering.getDisplayText()); - diskOfferingResponse.setCreated(offering.getCreated()); - diskOfferingResponse.setDiskSize(offering.getDiskSize()); - if(offering.getDomainId() != null){ - diskOfferingResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName()); - diskOfferingResponse.setDomainId(offering.getDomainId()); - } - diskOfferingResponse.setTags(offering.getTags()); - diskOfferingResponse.setCustomized(offering.isCustomized()); - diskOfferingResponse.setObjectName("diskoffering"); - return diskOfferingResponse; - } - - public static ResourceLimitResponse createResourceLimitResponse (ResourceLimit limit) { - ResourceLimitResponse resourceLimitResponse = new ResourceLimitResponse(); - if (limit.getDomainId() != null) { - resourceLimitResponse.setDomainId(limit.getDomainId()); - resourceLimitResponse.setDomainName(ApiDBUtils.findDomainById(limit.getDomainId()).getName()); - } - - if (limit.getAccountId() != null) { - Account accountTemp = ApiDBUtils.findAccountById(limit.getAccountId()); - if (accountTemp != null) { - resourceLimitResponse.setAccountName(accountTemp.getAccountName()); - resourceLimitResponse.setDomainId(accountTemp.getDomainId()); - resourceLimitResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - } - resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().ordinal()).toString()); - resourceLimitResponse.setMax(limit.getMax()); - resourceLimitResponse.setObjectName("resourcelimit"); - - return resourceLimitResponse; - } - - - public static ServiceOfferingResponse createServiceOfferingResponse (ServiceOfferingVO offering) { - ServiceOfferingResponse offeringResponse = new ServiceOfferingResponse(); - offeringResponse.setId(offering.getId()); - offeringResponse.setName(offering.getName()); - offeringResponse.setDisplayText(offering.getDisplayText()); - offeringResponse.setCpuNumber(offering.getCpu()); - offeringResponse.setCpuSpeed(offering.getSpeed()); - offeringResponse.setMemory(offering.getRamSize()); - offeringResponse.setCreated(offering.getCreated()); - offeringResponse.setStorageType(offering.getUseLocalStorage() ? "local" : "shared"); - offeringResponse.setOfferHa(offering.getOfferHA()); - offeringResponse.setUseVirtualNetwork(offering.getGuestIpType().equals(GuestIpType.Virtualized)); - offeringResponse.setTags(offering.getTags()); - offeringResponse.setObjectName("serviceoffering"); - - return offeringResponse; - } - - public static ConfigurationResponse createConfigurationResponse (ConfigurationVO cfg) { - ConfigurationResponse cfgResponse = new ConfigurationResponse(); - cfgResponse.setCategory(cfg.getCategory()); - cfgResponse.setDescription(cfg.getDescription()); - cfgResponse.setName(cfg.getName()); - cfgResponse.setValue(cfg.getValue()); - cfgResponse.setObjectName("configuration"); - - return cfgResponse; - } - - public static SnapshotResponse createSnapshotResponse (Snapshot snapshot) { - SnapshotResponse snapshotResponse = new SnapshotResponse(); - snapshotResponse.setId(snapshot.getId()); - - Account acct = ApiDBUtils.findAccountById(Long.valueOf(snapshot.getAccountId())); - if (acct != null) { - snapshotResponse.setAccountName(acct.getAccountName()); - snapshotResponse.setDomainId(acct.getDomainId()); - snapshotResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); - } - - VolumeVO volume = ApiDBUtils.findVolumeById(snapshot.getVolumeId()); - String snapshotTypeStr = SnapshotType.values()[snapshot.getSnapshotType()].name(); - snapshotResponse.setSnapshotType(snapshotTypeStr); - snapshotResponse.setVolumeId(snapshot.getVolumeId()); - snapshotResponse.setVolumeName(volume.getName()); - snapshotResponse.setVolumeType(volume.getVolumeType().name()); - snapshotResponse.setCreated(snapshot.getCreated()); - snapshotResponse.setName(snapshot.getName()); - snapshotResponse.setIntervalType(ApiDBUtils.getSnapshotIntervalTypes(snapshot.getId())); - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("snapshot", snapshot.getId()); - if (asyncJob != null) { - snapshotResponse.setJobId(asyncJob.getId()); - snapshotResponse.setJobStatus(asyncJob.getStatus()); - } - snapshotResponse.setObjectName("snapshot"); - return snapshotResponse; - } - - - public static SnapshotPolicyResponse createSnapshotPolicyResponse (SnapshotPolicyVO policy) { - SnapshotPolicyResponse policyResponse = new SnapshotPolicyResponse(); - policyResponse.setId(policy.getId()); - policyResponse.setVolumeId(policy.getVolumeId()); - policyResponse.setSchedule(policy.getSchedule()); - policyResponse.setIntervalType(policy.getInterval()); - policyResponse.setMaxSnaps(policy.getMaxSnaps()); - policyResponse.setTimezone(policy.getTimezone()); - policyResponse.setObjectName("snapshotpolicy"); - - return policyResponse; - } - - public static UserVmResponse createUserVmResponse (UserVm userVm) { - if (userVm.getPrivateIpAddress() == null) { - return createUserVm2Response(userVm); - } - UserVmResponse userVmResponse = new UserVmResponse(); - Account acct = ApiDBUtils.findAccountById(Long.valueOf(userVm.getAccountId())); - //FIXME - this check should be done in searchForUserVm method in ManagementServerImpl; - //otherwise the number of vms returned is not going to match pageSize request parameter - if ((acct != null) && (acct.getRemoved() == null)) { - userVmResponse.setAccountName(acct.getAccountName()); - userVmResponse.setDomainId(acct.getDomainId()); - userVmResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); - } else { - return null; // the account has been deleted, skip this VM in the response - } - - userVmResponse.setId(userVm.getId()); - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_instance", userVm.getId()); - if (asyncJob != null) { - userVmResponse.setJobId(asyncJob.getId()); - userVmResponse.setJobStatus(asyncJob.getStatus()); - } - - userVmResponse.setName(userVm.getHostName()); - userVmResponse.setCreated(userVm.getCreated()); - userVmResponse.setIpAddress(userVm.getPrivateIpAddress()); - if (userVm.getState() != null) { - userVmResponse.setState(userVm.getState().toString()); - } - - userVmResponse.setHaEnable(userVm.isHaEnabled()); - - if (userVm.getDisplayName() != null) { - userVmResponse.setDisplayName(userVm.getDisplayName()); - } else { - userVmResponse.setDisplayName(userVm.getHostName()); - } - - InstanceGroupVO group = ApiDBUtils.findInstanceGroupForVM(userVm.getId()); - if (group != null) { - userVmResponse.setGroup(group.getName()); - userVmResponse.setGroupId(group.getId()); - } - - // Data Center Info - userVmResponse.setZoneId(userVm.getDataCenterId()); - userVmResponse.setZoneName(ApiDBUtils.findZoneById(userVm.getDataCenterId()).getName()); - - Account account = UserContext.current().getAccount(); - //if user is an admin, display host id - if (((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) && (userVm.getHostId() != null)) { - userVmResponse.setHostId(userVm.getHostId()); - userVmResponse.setHostName(ApiDBUtils.findHostById(userVm.getHostId()).getName()); - } - - // Template Info - VMTemplateVO template = ApiDBUtils.findTemplateById(userVm.getTemplateId()); - 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 (userVm.getPassword() != null) { - userVmResponse.setPassword(userVm.getPassword()); - } - - // ISO Info - if (userVm.getIsoId() != null) { - VMTemplateVO iso = ApiDBUtils.findTemplateById(userVm.getIsoId().longValue()); - if (iso != null) { - userVmResponse.setIsoId(userVm.getIsoId()); - userVmResponse.setIsoName(iso.getName()); - } - } - - // Service Offering Info - ServiceOffering offering = ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId()); - userVmResponse.setServiceOfferingId(userVm.getServiceOfferingId()); - userVmResponse.setServiceOfferingName(offering.getName()); - userVmResponse.setCpuNumber(offering.getCpu()); - userVmResponse.setCpuSpeed(offering.getSpeed()); - userVmResponse.setMemory(offering.getRamSize()); - userVmResponse.setForVirtualNetwork(offering.getGuestIpType().equals(GuestIpType.Virtualized)); - - 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); - } - - //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); - - long networkKbRead = (long)vmStats.getNetworkReadKBs(); - userVmResponse.setNetworkKbsRead(networkKbRead); - - long networkKbWrite = (long)vmStats.getNetworkWriteKBs(); - userVmResponse.setNetworkKbsWrite(networkKbWrite); - } - - userVmResponse.setGuestOsId(userVm.getGuestOSId()); - //network groups - userVmResponse.setNetworkGroupList(ApiDBUtils.getNetworkGroupsNamesForVm(userVm.getId())); - userVmResponse.setObjectName("virtualmachine"); - return userVmResponse; - } - - public static SystemVmResponse createSystemVmResponse (VirtualMachine systemVM) { - if (systemVM.getPrivateIpAddress() == null) { - return createSystemVm2Response(systemVM); - } - SystemVmResponse vmResponse = new SystemVmResponse(); - if (systemVM instanceof SystemVm) { - SystemVm vm = (SystemVm)systemVM; - - vmResponse.setId(vm.getId()); - vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); - - String instanceType = "console_proxy"; - if (systemVM instanceof SecondaryStorageVmVO) { - instanceType = "sec_storage_vm"; // FIXME: this should be a constant so that the async jobs get updated with the correct instance type, they are using - // different instance types at the moment - } - - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob(instanceType, vm.getId()); - if (asyncJob != null) { - vmResponse.setJobId(asyncJob.getId()); - vmResponse.setJobStatus(asyncJob.getStatus()); - } - - vmResponse.setZoneId(vm.getDataCenterId()); - vmResponse.setZoneName(ApiDBUtils.findZoneById(vm.getDataCenterId()).getName()); - vmResponse.setDns1(vm.getDns1()); - vmResponse.setDns2(vm.getDns2()); - vmResponse.setNetworkDomain(vm.getDomain()); - vmResponse.setGateway(vm.getGateway()); - vmResponse.setName(vm.getHostName()); - vmResponse.setPodId(vm.getPodId()); - if (vm.getHostId() != null) { - vmResponse.setHostId(vm.getHostId()); - vmResponse.setHostName(ApiDBUtils.findHostById(vm.getHostId()).getName()); - } - vmResponse.setPrivateIp(vm.getPrivateIpAddress()); - vmResponse.setPrivateMacAddress(vm.getPrivateMacAddress()); - vmResponse.setPrivateNetmask(vm.getPrivateNetmask()); - vmResponse.setPublicIp(vm.getPublicIpAddress()); - vmResponse.setPublicMacAddress(vm.getPublicMacAddress()); - vmResponse.setPublicNetmask(vm.getPublicNetmask()); - vmResponse.setTemplateId(vm.getTemplateId()); - vmResponse.setCreated(vm.getCreated()); - if (vm.getState() != null) { - vmResponse.setState(vm.getState().toString()); - } - } - - // for console proxies, add the active sessions - if (systemVM instanceof ConsoleProxyVO) { - ConsoleProxyVO proxy = (ConsoleProxyVO)systemVM; - vmResponse.setActiveViewerSessions(proxy.getActiveSession()); - } - vmResponse.setObjectName("systemvm"); - return vmResponse; - } - - - public static DomainRouterResponse createDomainRouterResponse (DomainRouter router) { - if (router.getPrivateIpAddress() == null) { - return createDomainRouter2Response(router); - } - DomainRouterResponse routerResponse = new DomainRouterResponse(); - routerResponse.setId(router.getId()); - - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("domain_router", router.getId()); - if (asyncJob != null) { - routerResponse.setJobId(asyncJob.getId()); - routerResponse.setJobStatus(asyncJob.getStatus()); - } - - routerResponse.setZoneId(router.getDataCenterId()); - routerResponse.setZoneName(ApiDBUtils.findZoneById(router.getDataCenterId()).getName()); - routerResponse.setDns1(router.getDns1()); - routerResponse.setDns2(router.getDns2()); - routerResponse.setNetworkDomain(router.getDomain()); - routerResponse.setGateway(router.getGateway()); - routerResponse.setName(router.getHostName()); - routerResponse.setPodId(router.getPodId()); - - if (router.getHostId() != null) { - routerResponse.setHostId(router.getHostId()); - routerResponse.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName()); - } - - routerResponse.setPrivateIp(router.getPrivateIpAddress()); - routerResponse.setPrivateMacAddress(router.getPrivateMacAddress()); - routerResponse.setPrivateNetmask(router.getPrivateNetmask()); - routerResponse.setPublicIp(router.getPublicIpAddress()); - routerResponse.setPublicMacAddress(router.getPublicMacAddress()); - routerResponse.setPublicNetmask(router.getPublicNetmask()); - routerResponse.setGuestIpAddress(router.getGuestIpAddress()); - routerResponse.setGuestMacAddress(router.getGuestMacAddress()); - routerResponse.setGuestNetmask(router.getGuestNetmask()); - routerResponse.setTemplateId(router.getTemplateId()); - routerResponse.setCreated(router.getCreated()); - routerResponse.setState(router.getState()); - - Account accountTemp = ApiDBUtils.findAccountById(router.getAccountId()); - if (accountTemp != null) { - routerResponse.setAccountName(accountTemp.getAccountName()); - routerResponse.setDomainId(accountTemp.getDomainId()); - routerResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - routerResponse.setObjectName("domainrouter"); - return routerResponse; - } - - public static HostResponse createHostResponse (HostVO host) { - HostResponse hostResponse = new HostResponse(); - hostResponse.setId(host.getId()); - hostResponse.setCapabilities(host.getCapabilities()); - hostResponse.setClusterId(host.getClusterId()); - hostResponse.setCpuNumber(host.getCpus()); - hostResponse.setZoneId(host.getDataCenterId()); - 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()); - hostResponse.setRemoved(host.getRemoved()); - hostResponse.setCpuSpeed(host.getSpeed()); - hostResponse.setState(host.getStatus()); - hostResponse.setIpAddress(host.getPrivateIpAddress()); - hostResponse.setVersion(host.getVersion()); - hostResponse.setCreated(host.getCreated()); - - GuestOSCategoryVO guestOSCategory = ApiDBUtils.getHostGuestOSCategory(host.getId()); - if (guestOSCategory != null) { - hostResponse.setOsCategoryId(guestOSCategory.getId()); - hostResponse.setOsCategoryName(guestOSCategory.getName()); - } - hostResponse.setZoneName(ApiDBUtils.findZoneById(host.getDataCenterId()).getName()); - - if (host.getPodId() != null) { - hostResponse.setPodName(ApiDBUtils.findPodById(host.getPodId()).getName()); - } - - DecimalFormat decimalFormat = new DecimalFormat("#.##"); - - // calculate cpu allocated by vm - if ((host.getCpus() != null) && (host.getSpeed() != null)) { - int cpu = 0; - String cpuAlloc = null; - List instances = ApiDBUtils.listUserVMsByHostId(host.getId()); - for (UserVmVO vm : instances) { - ServiceOffering so = ApiDBUtils.findServiceOfferingById(vm.getServiceOfferingId()); - cpu += so.getCpu() * so.getSpeed(); - } - cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%"; - hostResponse.setCpuAllocated(cpuAlloc); - } - - // calculate cpu utilized - 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.setAverageLoad((long)hostStats.getAverageLoad()); - hostResponse.setNetworkKbsRead((long)hostStats.getNetworkReadKBs()); - hostResponse.setNetworkKbsWrite((long)hostStats.getNetworkWriteKBs()); - } - - if (host.getType() == Host.Type.Routing) { - hostResponse.setMemoryTotal(host.getTotalMemory()); - - // calculate memory allocated by systemVM and userVm - long mem = ApiDBUtils.getMemoryUsagebyHost(host.getId()); - hostResponse.setMemoryAllocated(mem); - hostResponse.setMemoryUsed(mem); - } else if (host.getType().toString().equals("Storage")) { - hostResponse.setDiskSizeTotal(host.getTotalSize()); - hostResponse.setDiskSizeAllocated(0L); - } - - if (host.getClusterId() != null) { - ClusterVO cluster = ApiDBUtils.findClusterById(host.getClusterId()); - hostResponse.setClusterName(cluster.getName()); - } - - hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host)); - - Set possibleEvents = host.getStatus().getPossibleEvents(); - if ((possibleEvents != null) && !possibleEvents.isEmpty()) { - String events = ""; - Iterator iter = possibleEvents.iterator(); - while (iter.hasNext()) { - Event event = iter.next(); - events += event.toString(); - if (iter.hasNext()) { - events += "; "; - } - } - hostResponse.setEvents(events); - } - hostResponse.setObjectName("host"); - - return hostResponse; - } - - public static VlanIpRangeResponse createVlanIpRangeResponse (VlanVO vlan) { - Long accountId = ApiDBUtils.getAccountIdForVlan(vlan.getId()); - Long podId = ApiDBUtils.getPodIdForVlan(vlan.getId()); - - VlanIpRangeResponse vlanResponse = new VlanIpRangeResponse(); - vlanResponse.setId(vlan.getId()); - vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork)); - vlanResponse.setVlan(vlan.getVlanId()); - vlanResponse.setZoneId(vlan.getDataCenterId()); - - if (accountId != null) { - Account account = ApiDBUtils.findAccountById(accountId); - vlanResponse.setAccountName(account.getAccountName()); - vlanResponse.setDomainId(account.getDomainId()); - vlanResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName()); - } - - if (podId != null) { - HostPodVO pod = ApiDBUtils.findPodById(podId); - vlanResponse.setPodId(podId); - vlanResponse.setPodName(pod.getName()); - } - - vlanResponse.setGateway(vlan.getVlanGateway()); - vlanResponse.setNetmask(vlan.getVlanNetmask()); - vlanResponse.setDescription(vlan.getIpRange()); - vlanResponse.setObjectName("vlan"); - - return vlanResponse; - } - - public static IPAddressResponse createIPAddressResponse (IPAddressVO ipAddress) { - VlanVO vlan = ApiDBUtils.findVlanById(ipAddress.getVlanDbId()); - boolean forVirtualNetworks = vlan.getVlanType().equals(VlanType.VirtualNetwork); - - IPAddressResponse ipResponse = new IPAddressResponse(); - ipResponse.setIpAddress(ipAddress.getAddress()); - if (ipAddress.getAllocated() != null) { - ipResponse.setAllocated(ipAddress.getAllocated()); - } - ipResponse.setZoneId(ipAddress.getDataCenterId()); - ipResponse.setZoneName(ApiDBUtils.findZoneById(ipAddress.getDataCenterId()).getName()); - ipResponse.setSourceNat(ipAddress.isSourceNat()); - - //get account information - Account accountTemp = ApiDBUtils.findAccountById(ipAddress.getAccountId()); - if (accountTemp !=null){ - ipResponse.setAccountName(accountTemp.getAccountName()); - ipResponse.setDomainId(accountTemp.getDomainId()); - ipResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - - ipResponse.setForVirtualNetwork(forVirtualNetworks); - ipResponse.setStaticNat(ipAddress.isOneToOneNat()); - - //show this info to admin only - Account account = UserContext.current().getAccount(); - if ((account == null) || account.getType() == Account.ACCOUNT_TYPE_ADMIN) { - ipResponse.setVlanId(ipAddress.getVlanDbId()); - ipResponse.setVlanName(ApiDBUtils.findVlanById(ipAddress.getVlanDbId()).getVlanId()); - } - ipResponse.setObjectName("ipaddress"); - return ipResponse; - } - - public static LoadBalancerResponse createLoadBalancerResponse (LoadBalancerVO loadBalancer) { - LoadBalancerResponse lbResponse = new LoadBalancerResponse(); - lbResponse.setId(loadBalancer.getId()); - lbResponse.setName(loadBalancer.getName()); - lbResponse.setDescription(loadBalancer.getDescription()); - lbResponse.setPublicIp(loadBalancer.getIpAddress()); - lbResponse.setPublicPort(loadBalancer.getPublicPort()); - lbResponse.setPrivatePort(loadBalancer.getPrivatePort()); - lbResponse.setAlgorithm(loadBalancer.getAlgorithm()); - - Account accountTemp = ApiDBUtils.findAccountById(loadBalancer.getAccountId()); - if (accountTemp != null) { - lbResponse.setAccountName(accountTemp.getAccountName()); - lbResponse.setDomainId(accountTemp.getDomainId()); - lbResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - lbResponse.setObjectName("loadbalancer"); - return lbResponse; - } - - public static PodResponse createPodResponse (HostPodVO pod) { - String[] ipRange = new String[2]; - if (pod.getDescription() != null && pod.getDescription().length() > 0) { - ipRange = pod.getDescription().split("-"); - } else { - ipRange[0] = pod.getDescription(); - } - - PodResponse podResponse = new PodResponse(); - podResponse.setId(pod.getId()); - podResponse.setName(pod.getName()); - podResponse.setZoneId(pod.getDataCenterId()); - podResponse.setZoneName(PodZoneConfig.getZoneName(pod.getDataCenterId())); - podResponse.setCidr(pod.getCidrAddress() +"/" + pod.getCidrSize()); - podResponse.setStartIp(ipRange[0]); - podResponse.setEndIp(((ipRange.length > 1) && (ipRange[1] != null)) ? ipRange[1] : ""); - podResponse.setGateway(pod.getGateway()); - podResponse.setObjectName("pod"); - return podResponse; - } - - public static ZoneResponse createZoneResponse (DataCenterVO dataCenter) { - Account account = UserContext.current().getAccount(); - ZoneResponse zoneResponse = new ZoneResponse(); - zoneResponse.setId(dataCenter.getId()); - zoneResponse.setName(dataCenter.getName()); - - if ((dataCenter.getDescription() != null) && !dataCenter.getDescription().equalsIgnoreCase("null")) { - zoneResponse.setDescription(dataCenter.getDescription()); - } - - if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) { - zoneResponse.setDns1(dataCenter.getDns1()); - zoneResponse.setDns2(dataCenter.getDns2()); - zoneResponse.setInternalDns1(dataCenter.getInternalDns1()); - zoneResponse.setInternalDns2(dataCenter.getInternalDns2()); - zoneResponse.setVlan(dataCenter.getVnet()); - zoneResponse.setGuestCidrAddress(dataCenter.getGuestNetworkCidr()); - } - - zoneResponse.setDomain(dataCenter.getDomain()); - zoneResponse.setDomainId(dataCenter.getDomainId()); - zoneResponse.setType(dataCenter.getNetworkType().toString()); - zoneResponse.setObjectName("zone"); - return zoneResponse; - } - - public static VolumeResponse createVolumeResponse(VolumeVO volume) { - VolumeResponse volResponse = new VolumeResponse(); - volResponse.setId(volume.getId()); - - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("volume", volume.getId()); - if (asyncJob != null) { - volResponse.setJobId(asyncJob.getId()); - volResponse.setJobStatus(asyncJob.getStatus()); - } - - if (volume.getName() != null) { - volResponse.setName(volume.getName()); - } else { - volResponse.setName(""); - } - - volResponse.setZoneId(volume.getDataCenterId()); - volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName()); - - volResponse.setVolumeType(volume.getVolumeType().toString()); - volResponse.setDeviceId(volume.getDeviceId()); - - Long instanceId = volume.getInstanceId(); - if (instanceId != null) { - VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId); - volResponse.setVirtualMachineId(vm.getId()); - volResponse.setVirtualMachineName(vm.getHostName()); - volResponse.setVirtualMachineDisplayName(vm.getHostName()); - volResponse.setVirtualMachineState(vm.getState().toString()); - } - - // Show the virtual size of the volume - volResponse.setSize(volume.getSize()); - - volResponse.setCreated(volume.getCreated()); - volResponse.setState(volume.getStatus().toString()); - - Account accountTemp = ApiDBUtils.findAccountById(volume.getAccountId()); - if (accountTemp != null) { - volResponse.setAccountName(accountTemp.getAccountName()); - volResponse.setDomainId(accountTemp.getDomainId()); - volResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - - String storageType; - try { - if(volume.getPoolId() == null){ - if (volume.getState() == Volume.State.Allocated) { - /*set it as shared, so the UI can attach it to VM*/ - storageType = "shared"; - } else { - storageType = "unknown"; - } - } else { - storageType = ApiDBUtils.volumeIsOnSharedStorage(volume.getId()) ? "shared" : "local"; - } - } catch (InvalidParameterValueException e) { - s_logger.error(e.getMessage(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Volume " + volume.getName() + " does not have a valid ID"); - } - - volResponse.setStorageType(storageType); - if(volume.getVolumeType().equals(Volume.VolumeType.ROOT)){ - volResponse.setServiceOfferingId(volume.getDiskOfferingId()); - }else{ - volResponse.setDiskOfferingId(volume.getDiskOfferingId()); - } - - DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId()); - if(volume.getVolumeType().equals(Volume.VolumeType.ROOT)){ - volResponse.setServiceOfferingName(diskOffering.getName()); - volResponse.setServiceOfferingDisplayText(diskOffering.getDisplayText()); - }else{ - volResponse.setDiskOfferingName(diskOffering.getName()); - volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText()); - } - - 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()); - } - volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString()); - volResponse.setAttached(volume.getAttached()); - volResponse.setDestroyed(volume.getDestroyed()); - volResponse.setObjectName("volume"); - return volResponse; - } - - - public static InstanceGroupResponse createInstanceGroupResponse(InstanceGroupVO group) { - InstanceGroupResponse groupResponse = new InstanceGroupResponse(); - groupResponse.setId(group.getId()); - groupResponse.setName(group.getName()); - groupResponse.setCreated(group.getCreated()); - - Account accountTemp = ApiDBUtils.findAccountById(group.getAccountId()); - if (accountTemp != null) { - groupResponse.setAccountName(accountTemp.getAccountName()); - groupResponse.setDomainId(accountTemp.getDomainId()); - groupResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - groupResponse.setObjectName("instancegroup"); - return groupResponse; - } - - public static PreallocatedLunResponse createPreallocatedLunResponse(PreallocatedLunVO preallocatedLun) { - PreallocatedLunResponse preallocLunResponse = new PreallocatedLunResponse(); - preallocLunResponse.setId(preallocatedLun.getId()); - preallocLunResponse.setVolumeId(preallocatedLun.getVolumeId()); - preallocLunResponse.setZoneId(preallocatedLun.getDataCenterId()); - preallocLunResponse.setLun(preallocatedLun.getLun()); - preallocLunResponse.setPortal(preallocatedLun.getPortal()); - preallocLunResponse.setSize(preallocatedLun.getSize()); - preallocLunResponse.setTaken(preallocatedLun.getTaken()); - preallocLunResponse.setTargetIqn(preallocatedLun.getTargetIqn()); - preallocLunResponse.setObjectName("preallocatedlun"); - return preallocLunResponse; - } - - public static StoragePoolResponse createStoragePoolResponse(StoragePoolVO pool) { - StoragePoolResponse poolResponse = new StoragePoolResponse(); - poolResponse.setId(pool.getId()); - 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()); - if (pool.getPoolType() != null) { - poolResponse.setType(pool.getPoolType().toString()); - } - if (pool.getPodId() != null) { - poolResponse.setPodId(pool.getPodId()); - poolResponse.setPodName(ApiDBUtils.findPodById(pool.getPodId()).getName()); - } - if (pool.getCreated() != null) { - poolResponse.setCreated(pool.getCreated()); - } - - StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId()); - long capacity = pool.getCapacityBytes(); - long available = pool.getAvailableBytes() ; - long used = capacity - available; - - if (stats != null) { - used = stats.getByteUsed(); - available = capacity - used; - } - - poolResponse.setDiskSizeTotal(pool.getCapacityBytes()); - poolResponse.setDiskSizeAllocated(used); - - if (pool.getClusterId() != null) { - ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId()); - poolResponse.setClusterId(cluster.getId()); - poolResponse.setClusterName(cluster.getName()); - } - poolResponse.setTags(ApiDBUtils.getStoragePoolTags(pool.getId())); - poolResponse.setObjectName("storagepool"); - return poolResponse; - } - - - public static ClusterResponse createClusterResponse(ClusterVO cluster) { - ClusterResponse clusterResponse = new ClusterResponse(); - clusterResponse.setId(cluster.getId()); - clusterResponse.setName(cluster.getName()); - clusterResponse.setPodId(cluster.getPodId()); - clusterResponse.setZoneId(cluster.getDataCenterId()); - HostPodVO pod = ApiDBUtils.findPodById(cluster.getPodId()); - clusterResponse.setPodName(pod.getName()); - DataCenterVO zone = ApiDBUtils.findZoneById(cluster.getDataCenterId()); - clusterResponse.setZoneName(zone.getName()); - clusterResponse.setObjectName("cluster"); - return clusterResponse; - } - - public static FirewallRuleResponse createFirewallRuleResponse(FirewallRuleVO fwRule) { - FirewallRuleResponse response = new FirewallRuleResponse(); - response.setId(fwRule.getId()); - response.setPrivatePort(fwRule.getPrivatePort()); - response.setProtocol(fwRule.getProtocol()); - response.setPublicPort(fwRule.getPublicPort()); - response.setPublicIpAddress(fwRule.getPublicIpAddress()); - if (fwRule.getPublicIpAddress() != null && fwRule.getPrivateIpAddress() != null) { - UserVm vm = ApiDBUtils.findUserVmByPublicIpAndGuestIp(fwRule.getPublicIpAddress(), fwRule.getPrivateIpAddress()); - response.setVirtualMachineId(vm.getId()); - response.setVirtualMachineName(vm.getHostName()); - response.setVirtualMachineDisplayName(vm.getDisplayName()); - } - response.setObjectName("portforwardingrule"); - return response; - } - - public static IpForwardingRuleResponse createIpForwardingRuleResponse(FirewallRuleVO fwRule) { - IpForwardingRuleResponse response = new IpForwardingRuleResponse(); - response.setId(fwRule.getId()); - response.setPrivatePort(fwRule.getPrivatePort()); - response.setProtocol(fwRule.getProtocol()); - response.setPublicPort(fwRule.getPublicPort()); - response.setPublicIpAddress(fwRule.getPublicIpAddress()); - if (fwRule.getPublicIpAddress() != null && fwRule.getPrivateIpAddress() != null) { - UserVm vm = ApiDBUtils.findUserVmByPublicIpAndGuestIp(fwRule.getPublicIpAddress(), fwRule.getPrivateIpAddress()); - response.setVirtualMachineId(vm.getId()); - response.setVirtualMachineName(vm.getHostName()); - response.setVirtualMachineDisplayName(vm.getDisplayName()); - } - response.setObjectName("ipforwardingrule"); - return response; - } - - - public static UserVmResponse createUserVm2Response (UserVm userVm) { - UserVmResponse userVmResponse = new UserVmResponse(); - Account acct = ApiDBUtils.findAccountById(Long.valueOf(userVm.getAccountId())); - //FIXME - this check should be done in searchForUserVm method in ManagementServerImpl; - //otherwise the number of vms returned is not going to match pageSize request parameter - if ((acct != null) && (acct.getRemoved() == null)) { - userVmResponse.setAccountName(acct.getAccountName()); - userVmResponse.setDomainId(acct.getDomainId()); - userVmResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); - } else { - return null; // the account has been deleted, skip this VM in the response - } - - userVmResponse.setId(userVm.getId()); - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("vm_instance", userVm.getId()); - if (asyncJob != null) { - userVmResponse.setJobId(asyncJob.getId()); - userVmResponse.setJobStatus(asyncJob.getStatus()); - } - - userVmResponse.setName(userVm.getHostName()); - userVmResponse.setCreated(userVm.getCreated()); - - if (userVm.getState() != null) { - userVmResponse.setState(userVm.getState().toString()); - } - - userVmResponse.setHaEnable(userVm.isHaEnabled()); - - if (userVm.getDisplayName() != null) { - userVmResponse.setDisplayName(userVm.getDisplayName()); - } else { - userVmResponse.setDisplayName(userVm.getHostName()); - } - - InstanceGroupVO group = ApiDBUtils.findInstanceGroupForVM(userVm.getId()); - if (group != null) { - userVmResponse.setGroup(group.getName()); - userVmResponse.setGroupId(group.getId()); - } - - // Data Center Info - userVmResponse.setZoneId(userVm.getDataCenterId()); - userVmResponse.setZoneName(ApiDBUtils.findZoneById(userVm.getDataCenterId()).getName()); - - Account account = UserContext.current().getAccount(); - //if user is an admin, display host id - if (((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) && (userVm.getHostId() != null)) { - userVmResponse.setHostId(userVm.getHostId()); - userVmResponse.setHostName(ApiDBUtils.findHostById(userVm.getHostId()).getName()); - } - - // Template Info - VMTemplateVO template = ApiDBUtils.findTemplateById(userVm.getTemplateId()); - 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 (userVm.getPassword() != null) { - userVmResponse.setPassword(userVm.getPassword()); - } - - // ISO Info - if (userVm.getIsoId() != null) { - VMTemplateVO iso = ApiDBUtils.findTemplateById(userVm.getIsoId().longValue()); - if (iso != null) { - userVmResponse.setIsoId(userVm.getIsoId()); - userVmResponse.setIsoName(iso.getName()); - } - } - - // Service Offering Info - ServiceOffering offering = ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId()); - userVmResponse.setServiceOfferingId(userVm.getServiceOfferingId()); - userVmResponse.setServiceOfferingName(offering.getName()); - userVmResponse.setCpuNumber(offering.getCpu()); - userVmResponse.setCpuSpeed(offering.getSpeed()); - userVmResponse.setMemory(offering.getRamSize()); - - 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); - } - - //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); - - long networkKbRead = (long)vmStats.getNetworkReadKBs(); - userVmResponse.setNetworkKbsRead(networkKbRead); - - long networkKbWrite = (long)vmStats.getNetworkWriteKBs(); - userVmResponse.setNetworkKbsWrite(networkKbWrite); - } - - userVmResponse.setGuestOsId(userVm.getGuestOSId()); - //network groups - userVmResponse.setNetworkGroupList(ApiDBUtils.getNetworkGroupsNamesForVm(userVm.getId())); - - List nics = BaseCmd._networkMgr.getNics(userVm); - for (Nic singleNic : nics) { - long configId = singleNic.getNetworkId(); - Network networkConf = BaseCmd._networkMgr.getNetworkConfiguration(configId); - if (networkConf.getTrafficType() == TrafficType.Guest) { - userVmResponse.setIpAddress(singleNic.getIp4Address()); - } - } - - userVmResponse.setObjectName("virtualmachine"); - return userVmResponse; - } - - - public static DomainRouterResponse createDomainRouter2Response (DomainRouter router) { - DomainRouterResponse routerResponse = new DomainRouterResponse(); - routerResponse.setId(router.getId()); - routerResponse.setZoneId(router.getDataCenterId()); - routerResponse.setName(router.getHostName()); - routerResponse.setPodId(router.getPodId()); - routerResponse.setTemplateId(router.getTemplateId()); - routerResponse.setCreated(router.getCreated()); - routerResponse.setState(router.getState()); - routerResponse.setNetworkDomain(router.getDomain()); - - if (router.getHostId() != null) { - routerResponse.setHostId(router.getHostId()); - routerResponse.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName()); - } - - Account accountTemp = ApiDBUtils.findAccountById(router.getAccountId()); - if (accountTemp != null) { - routerResponse.setAccountName(accountTemp.getAccountName()); - routerResponse.setDomainId(accountTemp.getDomainId()); - routerResponse.setDomainName(ApiDBUtils.findDomainById(accountTemp.getDomainId()).getName()); - } - - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob("domain_router", router.getId()); - if (asyncJob != null) { - routerResponse.setJobId(asyncJob.getId()); - routerResponse.setJobStatus(asyncJob.getStatus()); - } - - List nics = BaseCmd._networkMgr.getNics(router); - for (Nic singleNic : nics) { - long configId = singleNic.getNetworkId(); - Network networkConf = BaseCmd._networkMgr.getNetworkConfiguration(configId); - - if (networkConf.getTrafficType() == TrafficType.Guest) { - routerResponse.setGuestIpAddress(singleNic.getIp4Address()); - routerResponse.setGuestMacAddress(singleNic.getMacAddress()); - routerResponse.setGuestNetmask(singleNic.getNetmask()); - } - - if (networkConf.getTrafficType() == TrafficType.Control) { - routerResponse.setPrivateIp(singleNic.getIp4Address()); - routerResponse.setPrivateMacAddress(singleNic.getMacAddress()); - routerResponse.setPrivateNetmask(singleNic.getNetmask()); - } - - if (networkConf.getTrafficType() == TrafficType.Public) { - routerResponse.setPublicIp(singleNic.getIp4Address()); - routerResponse.setPublicMacAddress(singleNic.getMacAddress()); - routerResponse.setPublicNetmask(singleNic.getNetmask()); - routerResponse.setGateway(singleNic.getGateway()); - } - - DataCenter zone = ApiDBUtils.findZoneById(router.getDataCenterId()); - if (zone != null) { - routerResponse.setZoneName(zone.getName()); - routerResponse.setDns1(zone.getDns1()); - routerResponse.setDns2(zone.getDns2()); - } - } - - routerResponse.setObjectName("domainrouter"); - return routerResponse; - } - - - public static SystemVmResponse createSystemVm2Response (VirtualMachine systemVM) { - SystemVmResponse vmResponse = new SystemVmResponse(); - if (systemVM instanceof SystemVm) { - SystemVm vm = (SystemVm)systemVM; - - vmResponse.setId(vm.getId()); - vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); - vmResponse.setZoneId(vm.getDataCenterId()); - - vmResponse.setNetworkDomain(vm.getDomain()); - vmResponse.setName(vm.getHostName()); - vmResponse.setPodId(vm.getPodId()); - vmResponse.setTemplateId(vm.getTemplateId()); - vmResponse.setCreated(vm.getCreated()); - - if (vm.getHostId() != null) { - vmResponse.setHostId(vm.getHostId()); - vmResponse.setHostName(ApiDBUtils.findHostById(vm.getHostId()).getName()); - } - - if (vm.getState() != null) { - vmResponse.setState(vm.getState().toString()); - } - - String instanceType = "console_proxy"; - if (systemVM instanceof SecondaryStorageVmVO) { - instanceType = "sec_storage_vm"; // FIXME: this should be a constant so that the async jobs get updated with the correct instance type, they are using - // different instance types at the moment - } - - AsyncJobVO asyncJob = ApiDBUtils.findInstancePendingAsyncJob(instanceType, vm.getId()); - if (asyncJob != null) { - vmResponse.setJobId(asyncJob.getId()); - vmResponse.setJobStatus(asyncJob.getStatus()); - } - - // for console proxies, add the active sessions - if (systemVM instanceof ConsoleProxyVO) { - ConsoleProxyVO proxy = (ConsoleProxyVO)systemVM; - vmResponse.setActiveViewerSessions(proxy.getActiveSession()); - } - - DataCenter zone = ApiDBUtils.findZoneById(vm.getDataCenterId()); - if (zone != null) { - vmResponse.setZoneName(zone.getName()); - vmResponse.setDns1(zone.getDns1()); - vmResponse.setDns2(zone.getDns2()); - } - - List nics = BaseCmd._networkMgr.getNics(systemVM); - for (Nic singleNic : nics) { - long configId = singleNic.getNetworkId(); - Network networkConf = BaseCmd._networkMgr.getNetworkConfiguration(configId); - - if (networkConf.getTrafficType() == TrafficType.Management) { - vmResponse.setPrivateIp(singleNic.getIp4Address()); - vmResponse.setPrivateMacAddress(singleNic.getMacAddress()); - vmResponse.setPrivateNetmask(singleNic.getNetmask()); - } - - if (networkConf.getTrafficType() == TrafficType.Public) { - vmResponse.setPublicIp(singleNic.getIp4Address()); - vmResponse.setPublicMacAddress(singleNic.getMacAddress()); - vmResponse.setPublicNetmask(singleNic.getNetmask()); - vmResponse.setGateway(singleNic.getGateway()); - } - } - } - - vmResponse.setObjectName("systemvm"); - return vmResponse; - } } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index f0fe39d9162..40daf61c2c6 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -80,6 +80,7 @@ import org.apache.http.protocol.ResponseServer; import org.apache.log4j.Logger; import com.cloud.api.response.ApiResponseSerializer; +import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; import com.cloud.configuration.ConfigurationVO; import com.cloud.configuration.dao.ConfigurationDao; @@ -114,6 +115,7 @@ public class ApiServer implements HttpRequestHandler { private ApiDispatcher _dispatcher; private ManagementServer _ms = null; private AccountManager _accountMgr = null; + private AsyncJobManager _asyncMgr = null; private Account _systemAccount = null; private User _systemUser = null; @@ -152,7 +154,7 @@ public class ApiServer implements HttpRequestHandler { public void init(String[] apiConfig) { try { - BaseCmd.setComponents(); + BaseCmd.setComponents(new ApiResponseHelper()); _apiCommands = new Properties(); Properties preProcessedCommands = new Properties(); if (apiConfig != null) { @@ -199,9 +201,9 @@ public class ApiServer implements HttpRequestHandler { _ms = (ManagementServer)ComponentLocator.getComponent(ManagementServer.Name); ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); _accountMgr = locator.getManager(AccountManager.class); + _asyncMgr = locator.getManager(AsyncJobManager.class); _systemAccount = _accountMgr.getSystemAccount(); _systemUser = _accountMgr.getSystemUser(); - //_asyncMgr = locator.getManager(AsyncJobManager.class); _dispatcher = ApiDispatcher.getInstance(); int apiPort = 8096; // default port @@ -405,7 +407,7 @@ public class ApiServer implements HttpRequestHandler { job.setCmd(cmdObj.getClass().getName()); job.setCmdInfo(ApiGsonHelper.getBuilder().create().toJson(params)); - long jobId = BaseCmd._asyncMgr.submitAsyncJob(job); + long jobId = _asyncMgr.submitAsyncJob(job); if (objectId != null) { return ((BaseAsyncCreateCmd)asyncCmd).getResponse(jobId, objectId); } diff --git a/server/src/com/cloud/api/commands/CopyIsoCmd.java b/server/src/com/cloud/api/commands/CopyIsoCmd.java deleted file mode 100644 index 805ee8201c1..00000000000 --- a/server/src/com/cloud/api/commands/CopyIsoCmd.java +++ /dev/null @@ -1,185 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.cloud.api.commands; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -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 com.cloud.api.response.TemplateResponse; -import com.cloud.event.EventTypes; -import com.cloud.exception.StorageUnavailableException; -import com.cloud.storage.GuestOS; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.user.Account; -import com.cloud.user.UserContext; - -@Implementation(description="Copies an ISO file.", responseObject=TemplateResponse.class) -public class CopyIsoCmd extends BaseAsyncCmd { - public static final Logger s_logger = Logger.getLogger(CopyIsoCmd.class.getName()); - private static final String s_name = "copyisoresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @Parameter(name="destzoneid", type=CommandType.LONG, required=true, description="the ID of the destination zone to which the ISO file will be copied") - private Long destZoneId; - - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the ISO file") - private Long id; - - @Parameter(name="sourcezoneid", type=CommandType.LONG, required=true, description="the ID of the source zone from which the ISO file will be copied") - private Long sourceZoneId; - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getDestinationZoneId() { - return destZoneId; - } - - public Long getId() { - return id; - } - - public Long getSourceZoneId() { - return sourceZoneId; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getName() { - return s_name; - } - - public static String getStaticName() { - return s_name; - } - - @Override - public long getAccountId() { - VMTemplateVO iso = ApiDBUtils.findTemplateById(getId()); - if (iso != null) { - return iso.getAccountId(); - } - - // bad id given, parent this command to SYSTEM so ERROR events are tracked - return Account.ACCOUNT_ID_SYSTEM; - } - - @Override - public String getEventType() { - return EventTypes.EVENT_ISO_COPY; - } - - @Override - public String getEventDescription() { - return "copying ISO: " + getId() + " from zone: " + getSourceZoneId() + " to zone: " + getDestinationZoneId(); - } - - @Override - public void execute(){ - try { - VMTemplateVO iso = _templateMgr.copyIso(this); - TemplateResponse isoResponse = new TemplateResponse(); - if (iso != null) { - isoResponse.setId(iso.getId()); - isoResponse.setName(iso.getName()); - isoResponse.setDisplayText(iso.getDisplayText()); - isoResponse.setPublic(iso.isPublicTemplate()); - isoResponse.setBootable(iso.isBootable()); - isoResponse.setFeatured(iso.isFeatured()); - isoResponse.setCrossZones(iso.isCrossZones()); - isoResponse.setCreated(iso.getCreated()); - isoResponse.setZoneId(destZoneId); - isoResponse.setZoneName(ApiDBUtils.findZoneById(destZoneId).getName()); - - GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId()); - if (os != null) { - isoResponse.setOsTypeId(os.getId()); - isoResponse.setOsTypeName(os.getDisplayName()); - } else { - isoResponse.setOsTypeId(-1L); - isoResponse.setOsTypeName(""); - } - - // add account ID and name - Account owner = ApiDBUtils.findAccountById(iso.getAccountId()); - if (owner != null) { - isoResponse.setAccount(owner.getAccountName()); - isoResponse.setDomainId(owner.getDomainId()); - isoResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); - } - - //set status - Account account = (Account)UserContext.current().getAccount(); - boolean isAdmin = false; - if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN) || (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN)) { - isAdmin = true; - } - - //Return download status for admin users - VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(iso.getId(), destZoneId); - - if (isAdmin || iso.getAccountId() == account.getId()) { - if (templateHostRef.getDownloadState()!=Status.DOWNLOADED) { - String templateStatus = "Processing"; - if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { - if (templateHostRef.getDownloadPercent() == 100) { - templateStatus = "Installing Template"; - } else { - templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded"; - } - } else { - templateStatus = templateHostRef.getErrorString(); - } - isoResponse.setStatus(templateStatus); - } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - isoResponse.setStatus("Download Complete"); - } else { - isoResponse.setStatus("Successfully Installed"); - } - } - - isoResponse.setReady(templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED); - - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy iso"); - } - - isoResponse.setResponseName(getName()); - isoResponse.setObjectName("iso"); - this.setResponseObject(isoResponse); - } catch (StorageUnavailableException ex) { - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); - } - } -} diff --git a/server/src/com/cloud/api/commands/CopyTemplateCmd.java b/server/src/com/cloud/api/commands/CopyTemplateCmd.java deleted file mode 100644 index 46bb1873e06..00000000000 --- a/server/src/com/cloud/api/commands/CopyTemplateCmd.java +++ /dev/null @@ -1,190 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.cloud.api.commands; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -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 com.cloud.api.response.TemplateResponse; -import com.cloud.event.EventTypes; -import com.cloud.exception.StorageUnavailableException; -import com.cloud.storage.GuestOS; -import com.cloud.storage.VMTemplateHostVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; -import com.cloud.user.Account; -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()); - private static final String s_name = "copytemplateresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.DESTINATION_ZONE_ID, type=CommandType.LONG, required=true, description="ID of the zone the template is being copied to.") - private Long destZoneId; - - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="Template ID.") - private Long id; - - @Parameter(name=ApiConstants.SOURCE_ZONE_ID, type=CommandType.LONG, required=true, description="ID of the zone the template is currently hosted on.") - private Long sourceZoneId; - - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getDestinationZoneId() { - return destZoneId; - } - - public Long getId() { - return id; - } - - public Long getSourceZoneId() { - return sourceZoneId; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getName() { - return s_name; - } - - public static String getStaticName() { - return s_name; - } - - @Override - public long getAccountId() { - VMTemplateVO template = ApiDBUtils.findTemplateById(getId()); - if (template != null) { - return template.getAccountId(); - } - - // bad id given, parent this command to SYSTEM so ERROR events are tracked - return Account.ACCOUNT_ID_SYSTEM; - } - - @Override - public String getEventType() { - return EventTypes.EVENT_TEMPLATE_COPY; - } - - @Override - public String getEventDescription() { - return "copying template: " + getId() + " from zone: " + getSourceZoneId() + " to zone: " + getDestinationZoneId(); - } - - @Override - public void execute(){ - try { - VMTemplateVO template = _templateMgr.copyTemplate(this); - TemplateResponse templateResponse = new TemplateResponse(); - if (template != null) { - templateResponse.setId(template.getId()); - templateResponse.setName(template.getName()); - templateResponse.setDisplayText(template.getDisplayText()); - templateResponse.setPublic(template.isPublicTemplate()); - templateResponse.setBootable(template.isBootable()); - templateResponse.setFeatured(template.isFeatured()); - templateResponse.setCrossZones(template.isCrossZones()); - templateResponse.setCreated(template.getCreated()); - templateResponse.setFormat(template.getFormat()); - templateResponse.setPasswordEnabled(template.getEnablePassword()); - templateResponse.setZoneId(destZoneId); - templateResponse.setZoneName(ApiDBUtils.findZoneById(destZoneId).getName()); - - GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId()); - if (os != null) { - templateResponse.setOsTypeId(os.getId()); - templateResponse.setOsTypeName(os.getDisplayName()); - } else { - templateResponse.setOsTypeId(-1L); - templateResponse.setOsTypeName(""); - } - - // add account ID and name - Account owner = ApiDBUtils.findAccountById(template.getAccountId()); - if (owner != null) { - templateResponse.setAccount(owner.getAccountName()); - templateResponse.setDomainId(owner.getDomainId()); - templateResponse.setDomainName(ApiDBUtils.findDomainById(owner.getDomainId()).getName()); - } - - //set status - Account account = (Account)UserContext.current().getAccount(); - boolean isAdmin = false; - if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN) || (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN)) { - isAdmin = true; - } - - //Return download status for admin users - VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(template.getId(), destZoneId); - - if (isAdmin || template.getAccountId() == account.getId()) { - if (templateHostRef.getDownloadState()!=Status.DOWNLOADED) { - String templateStatus = "Processing"; - if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) { - if (templateHostRef.getDownloadPercent() == 100) { - templateStatus = "Installing Template"; - } else { - templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded"; - } - } else { - templateStatus = templateHostRef.getErrorString(); - } - templateResponse.setStatus(templateStatus); - } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) { - templateResponse.setStatus("Download Complete"); - } else { - templateResponse.setStatus("Successfully Installed"); - } - } - - templateResponse.setReady(templateHostRef != null && templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED); - - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy template"); - } - - templateResponse.setResponseName(getName()); - templateResponse.setObjectName("template"); - - this.setResponseObject(templateResponse); - } catch (StorageUnavailableException ex) { - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); - } - } -} - diff --git a/server/src/com/cloud/api/commands/ListCapacityCmd.java b/server/src/com/cloud/api/commands/ListCapacityCmd.java deleted file mode 100644 index af0177ed0df..00000000000 --- a/server/src/com/cloud/api/commands/ListCapacityCmd.java +++ /dev/null @@ -1,232 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.cloud.api.commands; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; - -import org.apache.log4j.Logger; - -import com.cloud.api.ApiConstants; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.BaseListCmd; -import com.cloud.api.Implementation; -import com.cloud.api.Parameter; -import com.cloud.api.response.CapacityResponse; -import com.cloud.api.response.ListResponse; -import com.cloud.capacity.CapacityVO; -import com.cloud.server.Criteria; -import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.storage.StoragePoolVO; - -@Implementation(description="Lists capacity.", responseObject=CapacityResponse.class) -public class ListCapacityCmd extends BaseListCmd { - - public static final Logger s_logger = Logger.getLogger(ListCapacityCmd.class.getName()); - private static final DecimalFormat s_percentFormat = new DecimalFormat("##.##"); - - private static final String s_name = "listcapacityresponse"; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @Parameter(name=ApiConstants.HOST_ID, type=CommandType.LONG, description="lists capacity by the Host ID") - private Long hostId; - - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="lists capacity by the Pod ID") - private Long podId; - - @Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="lists capacity by type") - private String type; - - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists capacity by the Zone ID") - private Long zoneId; - - - ///////////////////////////////////////////////////// - /////////////////// Accessors /////////////////////// - ///////////////////////////////////////////////////// - - public Long getHostId() { - return hostId; - } - - public Long getPodId() { - return podId; - } - - public String getType() { - return type; - } - - public Long getZoneId() { - return zoneId; - } - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - @Override - public String getName() { - return s_name; - } - - @Override - public Long getPageSizeVal() { - Long pageSizeVal = 1000000L; - Integer pageSize = getPageSize(); - if (pageSize != null) { - pageSizeVal = pageSize.longValue(); - } - return pageSizeVal; - } - - private List sumCapacities(List hostCapacities) { - Map totalCapacityMap = new HashMap(); - Map usedCapacityMap = new HashMap(); - - Set poolIdsToIgnore = new HashSet(); - Criteria c = new Criteria(); - // TODO: implement - List allStoragePools = ApiDBUtils.searchForStoragePools(c); - for (StoragePoolVO pool : allStoragePools) { - StoragePoolType poolType = pool.getPoolType(); - if (!(poolType.equals(StoragePoolType.NetworkFilesystem) || poolType.equals(StoragePoolType.IscsiLUN))) { - poolIdsToIgnore.add(pool.getId()); - } - } - - // collect all the capacity types, sum allocated/used and sum total...get one capacity number for each - for (CapacityVO capacity : hostCapacities) { - if (poolIdsToIgnore.contains(capacity.getHostOrPoolId())) { - continue; - } - - String key = capacity.getCapacityType() + "_" + capacity.getDataCenterId(); - String keyForPodTotal = key + "_-1"; - - boolean sumPodCapacity = false; - if (capacity.getPodId() != null) { - key += "_" + capacity.getPodId(); - sumPodCapacity = true; - } - - Long totalCapacity = totalCapacityMap.get(key); - Long usedCapacity = usedCapacityMap.get(key); - - if (totalCapacity == null) { - totalCapacity = new Long(capacity.getTotalCapacity()); - } else { - totalCapacity = new Long(capacity.getTotalCapacity() + totalCapacity.longValue()); - } - - if (usedCapacity == null) { - usedCapacity = new Long(capacity.getUsedCapacity()); - } else { - usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity.longValue()); - } - - totalCapacityMap.put(key, totalCapacity); - usedCapacityMap.put(key, usedCapacity); - - if (sumPodCapacity) { - totalCapacity = totalCapacityMap.get(keyForPodTotal); - usedCapacity = usedCapacityMap.get(keyForPodTotal); - - if (totalCapacity == null) { - totalCapacity = new Long(capacity.getTotalCapacity()); - } else { - totalCapacity = new Long(capacity.getTotalCapacity() + totalCapacity.longValue()); - } - - if (usedCapacity == null) { - usedCapacity = new Long(capacity.getUsedCapacity()); - } else { - usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity.longValue()); - } - - totalCapacityMap.put(keyForPodTotal, totalCapacity); - usedCapacityMap.put(keyForPodTotal, usedCapacity); - } - } - - List summedCapacities = new ArrayList(); - for (String key : totalCapacityMap.keySet()) { - CapacityVO summedCapacity = new CapacityVO(); - - StringTokenizer st = new StringTokenizer(key, "_"); - summedCapacity.setCapacityType(Short.parseShort(st.nextToken())); - summedCapacity.setDataCenterId(Long.parseLong(st.nextToken())); - if (st.hasMoreTokens()) { - summedCapacity.setPodId(Long.parseLong(st.nextToken())); - } - - summedCapacity.setTotalCapacity(totalCapacityMap.get(key)); - summedCapacity.setUsedCapacity(usedCapacityMap.get(key)); - - summedCapacities.add(summedCapacity); - } - return summedCapacities; - } - - @Override - public void execute(){ - List result = _mgr.listCapacities(this); - ListResponse response = new ListResponse(); - List capacityResponses = new ArrayList(); - List summedCapacities = sumCapacities(result); - for (CapacityVO summedCapacity : summedCapacities) { - CapacityResponse capacityResponse = new CapacityResponse(); - capacityResponse.setCapacityTotal(summedCapacity.getTotalCapacity()); - capacityResponse.setCapacityType(summedCapacity.getCapacityType()); - capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity()); - if (summedCapacity.getPodId() != null) { - capacityResponse.setPodId(summedCapacity.getPodId()); - if (summedCapacity.getPodId() > 0) { - capacityResponse.setPodName(ApiDBUtils.findPodById(summedCapacity.getPodId()).getName()); - } else { - capacityResponse.setPodName("All"); - } - } - capacityResponse.setZoneId(summedCapacity.getDataCenterId()); - capacityResponse.setZoneName(ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()).getName()); - if (summedCapacity.getTotalCapacity() != 0) { - float computed = ((float)summedCapacity.getUsedCapacity() / (float)summedCapacity.getTotalCapacity() * 100f); - capacityResponse.setPercentUsed(s_percentFormat.format((float)summedCapacity.getUsedCapacity() / (float)summedCapacity.getTotalCapacity() * 100f)); - } else { - capacityResponse.setPercentUsed(s_percentFormat.format(0L)); - } - - capacityResponse.setObjectName("capacity"); - capacityResponses.add(capacityResponse); - } - - response.setResponses(capacityResponses); - response.setResponseName(getName()); - this.setResponseObject(response); - } -} diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index 00459f2662a..48425c0b87a 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -39,7 +39,6 @@ import com.cloud.api.ApiGsonHelper; import com.cloud.api.ApiSerializerHelper; import com.cloud.api.BaseAsyncCmd; import com.cloud.api.BaseCmd; -import com.cloud.api.ResponseObject; import com.cloud.api.ServerApiException; import com.cloud.api.commands.QueryAsyncJobResultCmd; import com.cloud.api.response.ExceptionResponse; @@ -329,6 +328,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager { private Runnable getExecutorRunnable(final AsyncJobManager mgr, final AsyncJobVO job) { return new Runnable() { + @Override public void run() { long jobId = 0; @@ -344,7 +344,6 @@ public class AsyncJobManagerImpl implements AsyncJobManager { Class cmdClass = Class.forName(job.getCmd()); cmdObj = (BaseAsyncCmd)cmdClass.newInstance(); - cmdObj.setAsyncJobManager(mgr); cmdObj.setJob(job); Type mapType = new TypeToken>() {}.getType(); @@ -480,7 +479,8 @@ public class AsyncJobManagerImpl implements AsyncJobManager { private Runnable getHeartbeatTask() { return new Runnable() { - public void run() { + @Override + public void run() { try { List l = _queueMgr.dequeueFromAny(getMsid(), MAX_ONETIME_SCHEDULE_SIZE); if(l != null && l.size() > 0) { @@ -502,7 +502,8 @@ public class AsyncJobManagerImpl implements AsyncJobManager { @DB private Runnable getGCTask() { return new Runnable() { - public void run() { + @Override + public void run() { GlobalLock scanLock = GlobalLock.getInternLock("AsyncJobManagerGC"); try { if(scanLock.lock(ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION)) { diff --git a/server/src/com/cloud/async/AsyncJobResult.java b/server/src/com/cloud/async/AsyncJobResult.java index 093ea7b17c5..8fd4e4d0f96 100644 --- a/server/src/com/cloud/async/AsyncJobResult.java +++ b/server/src/com/cloud/async/AsyncJobResult.java @@ -96,7 +96,8 @@ public class AsyncJobResult { this.result = ApiSerializerHelper.toSerializedStringOld(result); } - public String toString() { + @Override + public String toString() { StringBuffer sb = new StringBuffer(); sb.append("AsyncJobResult {jobId:").append(getJobId()); sb.append(", jobStatus: ").append(getJobStatus()); diff --git a/server/src/com/cloud/async/executor/CreateSnapshotExecutor.java b/server/src/com/cloud/async/executor/CreateSnapshotExecutor.java index 64f47d23403..5143b0cbf85 100755 --- a/server/src/com/cloud/async/executor/CreateSnapshotExecutor.java +++ b/server/src/com/cloud/async/executor/CreateSnapshotExecutor.java @@ -26,7 +26,7 @@ import com.cloud.async.BaseAsyncJobExecutor; import com.cloud.serializer.GsonHelper; import com.cloud.server.ManagementServer; import com.cloud.storage.Snapshot; -import com.cloud.storage.Snapshot.SnapshotType; +import com.cloud.storage.Snapshot.Type; import com.cloud.user.Account; import com.google.gson.Gson; @@ -132,7 +132,7 @@ public class CreateSnapshotExecutor extends BaseAsyncJobExecutor { } } - String snapshotTypeStr = SnapshotType.values()[snapshot.getSnapshotType()].name(); + String snapshotTypeStr = Type.values()[snapshot.getSnapshotType()].name(); resultObject.setSnapshotType(snapshotTypeStr); resultObject.setVolumeId(snapshot.getVolumeId()); // resultObject.setVolumeName(volume.getName()); diff --git a/server/src/com/cloud/async/executor/NetworkGroupResultObject.java b/server/src/com/cloud/async/executor/NetworkGroupResultObject.java index c14acedec44..48e8dbfccef 100644 --- a/server/src/com/cloud/async/executor/NetworkGroupResultObject.java +++ b/server/src/com/cloud/async/executor/NetworkGroupResultObject.java @@ -3,7 +3,7 @@ package com.cloud.async.executor; import java.util.ArrayList; import java.util.List; -import com.cloud.network.security.NetworkGroupRulesVO; +import com.cloud.network.security.NetworkGroupRules; import com.cloud.serializer.Param; public class NetworkGroupResultObject { @@ -96,7 +96,7 @@ public class NetworkGroupResultObject { this.ingressRules = ingressRules; } - public static List transposeNetworkGroups(List groups) { + public static List transposeNetworkGroups(List groups) { List resultObjects = new ArrayList(); if ((groups != null) && !groups.isEmpty()) { @@ -104,7 +104,7 @@ public class NetworkGroupResultObject { NetworkGroupResultObject currentGroup = null; List processedGroups = new ArrayList(); - for (NetworkGroupRulesVO netGroupRule : groups) { + for (NetworkGroupRules netGroupRule : groups) { Long groupId = netGroupRule.getId(); if (!processedGroups.contains(groupId)) { processedGroups.add(groupId); diff --git a/server/src/com/cloud/async/executor/RebootRouterExecutor.java b/server/src/com/cloud/async/executor/RebootRouterExecutor.java index 2c8c71e3b4e..fa534471b9a 100644 --- a/server/src/com/cloud/async/executor/RebootRouterExecutor.java +++ b/server/src/com/cloud/async/executor/RebootRouterExecutor.java @@ -26,9 +26,9 @@ import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; import com.cloud.async.AsyncJobVO; import com.cloud.exception.InternalErrorException; +import com.cloud.network.router.VirtualRouter; import com.cloud.serializer.GsonHelper; import com.cloud.server.ManagementServer; -import com.cloud.vm.DomainRouter; import com.google.gson.Gson; public class RebootRouterExecutor extends VMOperationExecutor { diff --git a/server/src/com/cloud/async/executor/RouterExecutorHelper.java b/server/src/com/cloud/async/executor/RouterExecutorHelper.java index fa70b062874..2d8cc59a538 100644 --- a/server/src/com/cloud/async/executor/RouterExecutorHelper.java +++ b/server/src/com/cloud/async/executor/RouterExecutorHelper.java @@ -18,12 +18,12 @@ package com.cloud.async.executor; +import com.cloud.network.router.VirtualRouter; import com.cloud.server.ManagementServer; import com.cloud.user.Account; -import com.cloud.vm.DomainRouter; public class RouterExecutorHelper { - public static RouterOperationResultObject composeResultObject(ManagementServer managementServer, DomainRouter router) { + public static RouterOperationResultObject composeResultObject(ManagementServer managementServer, VirtualRouter router) { RouterOperationResultObject resultObject = new RouterOperationResultObject(); resultObject.setId(router.getId()); resultObject.setZoneId(router.getDataCenterId()); diff --git a/server/src/com/cloud/async/executor/StartRouterExecutor.java b/server/src/com/cloud/async/executor/StartRouterExecutor.java index d8c9a8093a6..e9191d0a08c 100644 --- a/server/src/com/cloud/async/executor/StartRouterExecutor.java +++ b/server/src/com/cloud/async/executor/StartRouterExecutor.java @@ -28,11 +28,11 @@ import com.cloud.async.AsyncJobVO; import com.cloud.event.EventTypes; import com.cloud.event.EventVO; import com.cloud.exception.InternalErrorException; +import com.cloud.network.router.VirtualRouter; import com.cloud.serializer.GsonHelper; import com.cloud.server.ManagementServer; import com.cloud.user.Account; import com.cloud.user.User; -import com.cloud.vm.DomainRouter; import com.google.gson.Gson; public class StartRouterExecutor extends VMOperationExecutor { diff --git a/server/src/com/cloud/async/executor/StopRouterExecutor.java b/server/src/com/cloud/async/executor/StopRouterExecutor.java index 321f37398eb..ef3ff649235 100644 --- a/server/src/com/cloud/async/executor/StopRouterExecutor.java +++ b/server/src/com/cloud/async/executor/StopRouterExecutor.java @@ -25,9 +25,9 @@ import com.cloud.api.BaseCmd; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobResult; import com.cloud.async.AsyncJobVO; +import com.cloud.network.router.VirtualRouter; import com.cloud.serializer.GsonHelper; import com.cloud.server.ManagementServer; -import com.cloud.vm.DomainRouter; import com.google.gson.Gson; public class StopRouterExecutor extends VMOperationExecutor { diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 930ffffa3b4..fe1c9f8cbdc 100644 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -41,6 +41,7 @@ import com.cloud.configuration.dao.ConfigurationDaoImpl; import com.cloud.configuration.dao.ResourceCountDaoImpl; import com.cloud.configuration.dao.ResourceLimitDaoImpl; import com.cloud.consoleproxy.AgentBasedStandaloneConsoleProxyManager; +import com.cloud.dao.EntityManagerImpl; import com.cloud.dc.dao.AccountVlanMapDaoImpl; import com.cloud.dc.dao.ClusterDaoImpl; import com.cloud.dc.dao.DataCenterDaoImpl; @@ -272,6 +273,7 @@ public class DefaultComponentLibrary implements ComponentLibrary { addManager("NetworkGroupManager", NetworkGroupManagerImpl.class); addManager("VmManager", MauriceMoss.class); addManager("DomainRouterManager", DomainRouterManagerImpl.class); + addManager("EntityManager", EntityManagerImpl.class); } protected List> addAdapterChain(Class interphace, List>> adapters) { diff --git a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java index c6fb8f06f7b..06460306208 100644 --- a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java +++ b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java @@ -36,8 +36,6 @@ import com.cloud.agent.api.GetVncPortCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupProxyCommand; import com.cloud.agent.api.StopCommand; -import com.cloud.api.ServerApiException; -import com.cloud.api.commands.DestroyConsoleProxyCmd; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.ConcurrentOperationException; @@ -55,9 +53,9 @@ import com.cloud.utils.component.Inject; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; -import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.ConsoleProxyDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; @@ -323,13 +321,8 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu return false; } - @Override - public boolean destroyConsoleProxy(DestroyConsoleProxyCmd cmd) throws ServerApiException { - return false; - } - @Override - public boolean applyCustomCertToNewProxy(StartupProxyCommand cmd) { + public boolean applyCustomCertToNewProxy(StartupProxyCommand cmd) { // TODO Auto-generated method stub return false; } diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManager.java index b9e22488e58..6ffe5236aa9 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManager.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManager.java @@ -22,8 +22,6 @@ import com.cloud.agent.api.AgentControlAnswer; import com.cloud.agent.api.ConsoleAccessAuthenticationCommand; import com.cloud.agent.api.ConsoleProxyLoadReportCommand; import com.cloud.agent.api.StartupCommand; -import com.cloud.api.ServerApiException; -import com.cloud.api.commands.DestroyConsoleProxyCmd; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.info.ConsoleProxyInfo; @@ -54,5 +52,4 @@ public interface ConsoleProxyManager extends Manager { public void onAgentConnect(HostVO host, StartupCommand cmd); public void onAgentDisconnect(long agentId, Status state); - public boolean destroyConsoleProxy(DestroyConsoleProxyCmd cmd) throws ServerApiException; } diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 11d867aeabf..18ad91c52a4 100644 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -85,7 +85,7 @@ import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.domain.DomainVO; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; @@ -111,9 +111,9 @@ import com.cloud.info.RunningHostInfoAgregator.ZoneHostInfo; import com.cloud.maid.StackMaid; import com.cloud.network.IpAddrAllocator; import com.cloud.network.IpAddrAllocator.networkInfo; -import com.cloud.network.Networks.TrafficType; -import com.cloud.network.NetworkVO; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkVO; +import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -144,6 +144,7 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; 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.GlobalLock; @@ -158,7 +159,6 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.State; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.Event; import com.cloud.vm.VirtualMachineGuru; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; @@ -187,8 +187,8 @@ import com.google.gson.GsonBuilder; // Starting, HA, Migrating, Creating and Running state are all counted as "Open" for available capacity calculation // because sooner or later, it will be driven into Running state // -@Local(value = { ConsoleProxyManager.class }) -public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMachineManager, AgentHook, VirtualMachineGuru { +@Local(value = { ConsoleProxyManager.class, ConsoleProxyService.class }) +public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProxyService, Manager, VirtualMachineManager, AgentHook, VirtualMachineGuru { private static final Logger s_logger = Logger.getLogger(ConsoleProxyManagerImpl.class); private static final int DEFAULT_FIND_HOST_RETRY_COUNT = 2; @@ -632,7 +632,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach } } // to ensure atomic state transition to Starting state - if (!_consoleProxyDao.updateIf(proxy, Event.StartRequested, routingHost.getId())) { + if (!_consoleProxyDao.updateIf(proxy, com.cloud.vm.VirtualMachine.Event.StartRequested, routingHost.getId())) { if (s_logger.isDebugEnabled()) { ConsoleProxyVO temp = _consoleProxyDao.findById(proxyId); s_logger.debug("Unable to start console proxy " + proxy.getHostName() + " because it is not in a startable state : " @@ -664,7 +664,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach String guestIpAddress = _dcDao.allocateLinkLocalIpAddress(proxy.getDataCenterId(), routingHost.getPodId(), proxy.getId(), null); proxy.setGuestIpAddress(guestIpAddress); - _consoleProxyDao.updateIf(proxy, Event.OperationRetry, routingHost.getId()); + _consoleProxyDao.updateIf(proxy, VirtualMachine.Event.OperationRetry, routingHost.getId()); proxy = _consoleProxyDao.findById(proxy.getId()); List vols = _storageMgr.prepare(proxy, routingHost); @@ -768,7 +768,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach throw new ExecutionException("Couldn't find a routingHost to run console proxy"); } - _consoleProxyDao.updateIf(proxy, Event.OperationSucceeded, routingHost.getId()); + _consoleProxyDao.updateIf(proxy, VirtualMachine.Event.OperationSucceeded, routingHost.getId()); if (s_logger.isDebugEnabled()) { s_logger.debug("Console proxy is now started, vm id : " + proxy.getId()); } @@ -817,7 +817,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach freePrivateIpAddress(privateIpAddress, proxy.getDataCenterId(), proxy.getId()); } - _consoleProxyDao.updateIf(proxy, Event.OperationFailed, null); + _consoleProxyDao.updateIf(proxy, VirtualMachine.Event.OperationFailed, null); txn.commit(); } catch (Exception e) { s_logger.error("Caught exception during error recovery"); @@ -1120,7 +1120,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach _consoleProxyDao.update(proxy.getId(), vo); // kick the state machine - _consoleProxyDao.updateIf(proxy, Event.OperationSucceeded, null); + _consoleProxyDao.updateIf(proxy, VirtualMachine.Event.OperationSucceeded, null); txn.commit(); return proxy; @@ -1788,16 +1788,16 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach @Override public void completeStartCommand(ConsoleProxyVO vm) { - _consoleProxyDao.updateIf(vm, Event.AgentReportRunning, vm.getHostId()); + _consoleProxyDao.updateIf(vm, VirtualMachine.Event.AgentReportRunning, vm.getHostId()); } @Override public void completeStopCommand(ConsoleProxyVO vm) { - completeStopCommand(vm, Event.AgentReportStopped); + completeStopCommand(vm, VirtualMachine.Event.AgentReportStopped); } @DB - protected void completeStopCommand(ConsoleProxyVO proxy, Event ev) { + protected void completeStopCommand(ConsoleProxyVO proxy, VirtualMachine.Event ev) { Transaction txn = Transaction.currentTxn(); try { txn.start(); @@ -1969,7 +1969,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach s_logger.debug("Destroying console proxy vm " + vmId); } - if (!_consoleProxyDao.updateIf(vm, Event.DestroyRequested, null)) { + if (!_consoleProxyDao.updateIf(vm, VirtualMachine.Event.DestroyRequested, null)) { s_logger.debug("Unable to destroy the vm because it is not in the correct state: " + vmId); return false; } @@ -2050,7 +2050,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach @Override public boolean stop(ConsoleProxyVO proxy, long startEventId) throws AgentUnavailableException { - if (!_consoleProxyDao.updateIf(proxy, Event.StopRequested, proxy.getHostId())) { + if (!_consoleProxyDao.updateIf(proxy, VirtualMachine.Event.StopRequested, proxy.getHostId())) { s_logger.debug("Unable to stop console proxy: " + proxy.toString()); return false; } @@ -2085,7 +2085,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach _eventDao.persist(event); return false; } - completeStopCommand(proxy, Event.OperationSucceeded); + completeStopCommand(proxy, VirtualMachine.Event.OperationSucceeded); SubscriptionMgr.getInstance().notifySubscribers( ConsoleProxyManager.ALERT_SUBJECT, @@ -2129,7 +2129,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach public boolean migrate(ConsoleProxyVO proxy, HostVO host) { HostVO fromHost = _hostDao.findById(proxy.getId()); - if (!_consoleProxyDao.updateIf(proxy, Event.MigrationRequested, proxy.getHostId())) { + if (!_consoleProxyDao.updateIf(proxy, VirtualMachine.Event.MigrationRequested, proxy.getHostId())) { s_logger.debug("State for " + proxy.toString() + " has changed so migration can not take place."); return false; } @@ -2152,18 +2152,18 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer) _agentMgr.send(host.getId(), cvm); if (!answer.getResult()) { s_logger.debug("Unable to complete migration for " + proxy.getId()); - _consoleProxyDao.updateIf(proxy, Event.AgentReportStopped, null); + _consoleProxyDao.updateIf(proxy, VirtualMachine.Event.AgentReportStopped, null); return false; } State state = answer.getState(); if (state == State.Stopped) { s_logger.warn("Unable to complete migration as we can not detect it on " + host.getId()); - _consoleProxyDao.updateIf(proxy, Event.AgentReportStopped, null); + _consoleProxyDao.updateIf(proxy, VirtualMachine.Event.AgentReportStopped, null); return false; } - _consoleProxyDao.updateIf(proxy, Event.OperationSucceeded, host.getId()); + _consoleProxyDao.updateIf(proxy, VirtualMachine.Event.OperationSucceeded, host.getId()); return true; } @@ -2241,7 +2241,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription(description); event.setStartId(startEventId); event = _eventDao.persist(event); @@ -2504,7 +2504,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, VirtualMach event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Scheduled); + event.setState(Event.State.Scheduled); event.setDescription("Scheduled async job for "+description); event = _eventDao.persist(event); return event.getId(); diff --git a/server/src/com/cloud/dao/EntityManagerImpl.java b/server/src/com/cloud/dao/EntityManagerImpl.java new file mode 100644 index 00000000000..2b287257f7f --- /dev/null +++ b/server/src/com/cloud/dao/EntityManagerImpl.java @@ -0,0 +1,108 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.dao; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.utils.component.Manager; +import com.cloud.utils.db.GenericDao; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.GenericSearchBuilder; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; + +@Local(value=EntityManager.class) +@SuppressWarnings("unchecked") +public class EntityManagerImpl implements EntityManager, Manager { + String _name; + + @Override + public T findById(Class entityType, K id) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); + return dao.findById(id); + } + + @Override + public T findByXid(Class entityType, String xid) { + return null; + } + + @Override + public List list(Class entityType) { + GenericDao dao = GenericDaoBase.getDao(entityType); + return dao.listAll(); + } + + @Override + public T persist(T t) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao((Class)t.getClass()); + return dao.persist(t); + } + + @Override + public SearchBuilder createSearchBuilder(Class entityType) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); + return dao.createSearchBuilder(); + } + + @Override + public GenericSearchBuilder createGenericSearchBuilder(Class entityType, Class resultType) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); + return dao.createSearchBuilder((Class)resultType.getClass()); + } + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _name = name; + + return true; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + @Override + public String getName() { + return _name; + } + + @Override + public List search(Class entityType, SearchCriteria sc) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); + return dao.customSearch(sc, null); + } + + @Override + public void remove(Class entityType, K id) { + GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); + dao.remove(id); + } + +} diff --git a/server/src/com/cloud/event/EventUtils.java b/server/src/com/cloud/event/EventUtils.java index 64ade0efc0e..9bef1ceef94 100755 --- a/server/src/com/cloud/event/EventUtils.java +++ b/server/src/com/cloud/event/EventUtils.java @@ -25,7 +25,7 @@ public class EventUtils { event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Scheduled); + event.setState(Event.State.Scheduled); event.setDescription("Scheduled async job for "+description); event = _eventDao.persist(event); return event.getId(); @@ -39,7 +39,7 @@ public class EventUtils { event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription(description); event.setStartId(startEventId); event = _eventDao.persist(event); diff --git a/server/src/com/cloud/migration/Db20to21MigrationUtil.java b/server/src/com/cloud/migration/Db20to21MigrationUtil.java index a8abf52a86e..000f66e6f6c 100644 --- a/server/src/com/cloud/migration/Db20to21MigrationUtil.java +++ b/server/src/com/cloud/migration/Db20to21MigrationUtil.java @@ -292,9 +292,9 @@ public class Db20to21MigrationUtil { so21.setDiskSize(0); so21 = _serviceOffering21Dao.persist(so21); - if(so20.getId().longValue() != so21.getId().longValue()) { + if(so20.getId().longValue() != so21.getId()) { // Update all foreign reference from old value to new value, need to be careful with foreign key constraints - updateServiceOfferingReferences(so20.getId().longValue(), so21.getId().longValue()); + updateServiceOfferingReferences(so20.getId().longValue(), so21.getId()); } } @@ -445,8 +445,8 @@ public class Db20to21MigrationUtil { do21.setId(maxDiskOfferingId++); do21 = _diskOffering21Dao.persist(do21); - if(do20.getId().longValue() != do21.getId().longValue()) { - updateDiskOfferingReferences(do20.getId().longValue(), do21.getId().longValue()); + if(do20.getId().longValue() != do21.getId()) { + updateDiskOfferingReferences(do20.getId().longValue(), do21.getId()); } } diff --git a/server/src/com/cloud/migration/DiskOffering21VO.java b/server/src/com/cloud/migration/DiskOffering21VO.java index d76c1ae643e..6e268f82e19 100644 --- a/server/src/com/cloud/migration/DiskOffering21VO.java +++ b/server/src/com/cloud/migration/DiskOffering21VO.java @@ -95,7 +95,7 @@ public class DiskOffering21VO { this.useLocalStorage = useLocalStorage; } - public Long getId() { + public long getId() { return id; } diff --git a/server/src/com/cloud/migration/ServiceOffering21VO.java b/server/src/com/cloud/migration/ServiceOffering21VO.java index 50cd6442a06..95b4fee3584 100644 --- a/server/src/com/cloud/migration/ServiceOffering21VO.java +++ b/server/src/com/cloud/migration/ServiceOffering21VO.java @@ -105,7 +105,8 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe this.rateMbps = rateMbps; } - public int getRateMbps() { + @Override + public int getRateMbps() { return rateMbps; } @@ -113,7 +114,8 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe this.multicastRateMbps = multicastRateMbps; } - public int getMulticastRateMbps() { + @Override + public int getMulticastRateMbps() { return multicastRateMbps; } @@ -121,7 +123,8 @@ public class ServiceOffering21VO extends DiskOffering21VO implements ServiceOffe this.guestIpType = guestIpType; } - public NetworkOffering.GuestIpType getGuestIpType() { + @Override + public NetworkOffering.GuestIpType getGuestIpType() { return guestIpType; } public String gethypervisorType() { diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index d2f74443e17..34771685b92 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -20,43 +20,25 @@ package com.cloud.network; import java.util.List; import java.util.Map; -import com.cloud.api.ServerApiException; -import com.cloud.api.commands.AddVpnUserCmd; -import com.cloud.api.commands.AssignToLoadBalancerRuleCmd; -import com.cloud.api.commands.AssociateIPAddrCmd; -import com.cloud.api.commands.CreateLoadBalancerRuleCmd; -import com.cloud.api.commands.CreatePortForwardingRuleCmd; -import com.cloud.api.commands.CreateRemoteAccessVpnCmd; -import com.cloud.api.commands.DeleteLoadBalancerRuleCmd; -import com.cloud.api.commands.DeleteRemoteAccessVpnCmd; -import com.cloud.api.commands.DisassociateIPAddrCmd; -import com.cloud.api.commands.ListPortForwardingRulesCmd; -import com.cloud.api.commands.RemoveFromLoadBalancerRuleCmd; -import com.cloud.api.commands.RemoveVpnUserCmd; -import com.cloud.api.commands.UpdateLoadBalancerRuleCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.VlanVO; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; -import com.cloud.exception.AccountLimitException; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InsufficientNetworkCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.NetworkRuleConflictException; -import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.router.VirtualRouter; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.user.Account; import com.cloud.user.AccountVO; import com.cloud.utils.Pair; -import com.cloud.vm.DomainRouter; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; @@ -70,7 +52,7 @@ import com.cloud.vm.VirtualMachineProfile; * NetworkManager manages the network for the different end users. * */ -public interface NetworkManager { +public interface NetworkManager extends NetworkService { public static final int DEFAULT_ROUTER_VM_RAMSIZE = 128; // 128M public static final boolean USE_POD_VLAN = false; /** @@ -129,7 +111,7 @@ public interface NetworkManager { * @param hostId get all of the virtual machine routers on a host. * @return collection of VirtualMachineRouter */ - List getRouters(long hostId); + List getRouters(long hostId); /** * @param routerId id of the router @@ -180,27 +162,6 @@ public interface NetworkManager { */ public List updateFirewallRules(String publicIpAddress, List fwRules, DomainRouterVO router); - /** - * Create a port forwarding rule from the given ipAddress/port to the given virtual machine/port. - * @param cmd the command specifying the ip address, public port, protocol, private port, and virtual machine id. - * @return the newly created FirewallRuleVO if successful, null otherwise. - */ - public FirewallRuleVO createPortForwardingRule(CreatePortForwardingRuleCmd cmd) throws NetworkRuleConflictException; - - /** - * 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 - */ - public List listPortForwardingRules(ListPortForwardingRulesCmd cmd); - - /** - * Create a load balancer rule from the given ipAddress/port to the given private port - * @param cmd the command specifying the ip address, public port, protocol, private port, and algorithm - * @return the newly created LoadBalancerVO if successful, null otherwise - */ - public LoadBalancerVO createLoadBalancerRule(CreateLoadBalancerRuleCmd cmd); - /** * Associates or disassociates a list of public IP address for a router. * @param router router object to send the association to @@ -211,14 +172,6 @@ public interface NetworkManager { */ boolean associateIP(DomainRouterVO router, List ipAddrList, boolean add, long vmId) throws ConcurrentOperationException; - /** - * Associates a public IP address for a router. - * @param cmd - the command specifying ipAddress - * @return ip address object - * @throws ResourceAllocationException, InsufficientCapacityException - */ - IPAddressVO associateIP(AssociateIPAddrCmd cmd) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException; - /** * Associates or disassociates a single IP address for a router. * @param router router object to send the association to @@ -230,15 +183,6 @@ public interface NetworkManager { boolean updateFirewallRule(FirewallRuleVO fwRule, String oldPrivateIP, String oldPrivatePort); - /** - * Assign a virtual machine, or list of virtual machines, to a load balancer. - */ - boolean assignToLoadBalancer(AssignToLoadBalancerRuleCmd cmd) throws NetworkRuleConflictException; - - public boolean removeFromLoadBalancer(RemoveFromLoadBalancerRuleCmd cmd); - - public boolean deleteLoadBalancerRule(DeleteLoadBalancerRuleCmd cmd); - public LoadBalancerVO updateLoadBalancerRule(UpdateLoadBalancerRuleCmd cmd); /** * Add a DHCP entry on the domr dhcp server @@ -276,8 +220,6 @@ public interface NetworkManager { */ List listPublicIpAddressesInVirtualNetwork(long accountId, long dcId, Boolean sourceNat); - public boolean disassociateIpAddress(DisassociateIPAddrCmd cmd); - List setupNetworkConfiguration(Account owner, NetworkOfferingVO offering, DeploymentPlan plan); List setupNetworkConfiguration(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan); @@ -298,45 +240,7 @@ public interface NetworkManager { List setupNetworkConfiguration(Account owner, ServiceOfferingVO offering, DeploymentPlan plan); String assignSourceNatIpAddress(Account account, DataCenter dc) throws InsufficientAddressCapacityException; - /** - * Create a remote access vpn from the given public ip address and client ip range - * @param cmd the command specifying the ip address, ip range - * @return the newly created RemoteAccessVpnVO if successful, null otherwise - * @throws InvalidParameterValueException - * @throws PermissionDeniedException - * @throws ConcurrentOperationException - */ - public RemoteAccessVpnVO createRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, InvalidParameterValueException, PermissionDeniedException; - - /** - * Start a remote access vpn for the given public ip address and client ip range - * @param cmd the command specifying the ip address, ip range - * @return the RemoteAccessVpnVO if successful, null otherwise - * @throws ConcurrentOperationException - * @throws ResourceUnavailableException - */ - public RemoteAccessVpnVO startRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException; - - /** - * Destroy a previously created remote access VPN - * @param cmd the command specifying the account and zone - * @return success if successful, false otherwise - * @throws ConcurrentOperationException - */ - public boolean destroyRemoteAccessVpn(DeleteRemoteAccessVpnCmd cmd) throws ConcurrentOperationException; - - VpnUserVO addVpnUser(AddVpnUserCmd cmd) throws ConcurrentOperationException, AccountLimitException; - - boolean removeVpnUser(RemoveVpnUserCmd cmd) throws ConcurrentOperationException; - Network getNetworkConfiguration(long id); String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; - FirewallRuleVO createIpForwardingRuleInDb(String ipAddr, Long virtualMachineId) throws ServerApiException; - - public boolean deletePortForwardingRule(Long id, boolean sysContext); - - FirewallRuleVO createIpForwardingRuleOnDomr(Long ruleId); - - boolean deleteIpForwardingRule(Long id); } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index db08613af48..ca46ff12f3b 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -109,6 +109,8 @@ import com.cloud.network.dao.RemoteAccessVpnDao; import com.cloud.network.dao.VpnUserDao; import com.cloud.network.element.NetworkElement; import com.cloud.network.router.DomainRouterManager; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.rules.FirewallRule; import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering.GuestIpType; import com.cloud.offerings.NetworkOfferingVO; @@ -148,7 +150,6 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; -import com.cloud.vm.DomainRouter; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; @@ -1374,7 +1375,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override @DB - public LoadBalancerVO createLoadBalancerRule(CreateLoadBalancerRuleCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + public LoadBalancer createLoadBalancerRule(CreateLoadBalancerRuleCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { String publicIp = cmd.getPublicIp(); // make sure ip address exists @@ -1619,7 +1620,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - public List getRouters(final long hostId) { + public List getRouters(final long hostId) { return _routerMgr.getRouters(hostId); } @@ -3004,7 +3005,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override @DB - public FirewallRuleVO createIpForwardingRuleOnDomr(Long ruleId) throws ServerApiException{ + public FirewallRule createIpForwardingRuleOnDomr(long ruleId) { Transaction txn = Transaction.currentTxn(); txn.start(); boolean success = false; @@ -3071,7 +3072,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override @DB - public FirewallRuleVO createIpForwardingRuleInDb(String ipAddr, Long virtualMachineId) throws ServerApiException { + public FirewallRule createIpForwardingRuleInDb(String ipAddr, long virtualMachineId) { Transaction txn = Transaction.currentTxn(); txn.start(); diff --git a/server/src/com/cloud/network/router/DomainRouterManager.java b/server/src/com/cloud/network/router/DomainRouterManager.java index 074753d6b7c..bb0cd05a426 100644 --- a/server/src/com/cloud/network/router/DomainRouterManager.java +++ b/server/src/com/cloud/network/router/DomainRouterManager.java @@ -38,7 +38,6 @@ import com.cloud.service.ServiceOfferingVO; import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.utils.component.Manager; -import com.cloud.vm.DomainRouter; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; @@ -108,7 +107,7 @@ public interface DomainRouterManager extends Manager { * @param hostId get all of the virtual machine routers on a host. * @return collection of VirtualMachineRouter */ - List getRouters(long hostId); + List getRouters(long hostId); /** * @param routerId id of the router @@ -143,7 +142,7 @@ public interface DomainRouterManager extends Manager { String createZoneVlan(DomainRouterVO router); - DomainRouter upgradeRouter(UpgradeRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + VirtualRouter upgradeRouter(UpgradeRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; DomainRouterVO getRouter(long accountId, long zoneId); DomainRouterVO getRouter(String publicIpAddress); diff --git a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java index 7c337b3454d..1fe5c3c4143 100644 --- a/server/src/com/cloud/network/router/DomainRouterManagerImpl.java +++ b/server/src/com/cloud/network/router/DomainRouterManagerImpl.java @@ -84,7 +84,7 @@ import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; @@ -107,10 +107,10 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.DomainRouterService; import com.cloud.network.FirewallRuleVO; import com.cloud.network.IPAddressVO; -import com.cloud.network.Networks.TrafficType; import com.cloud.network.Network; -import com.cloud.network.NetworkVO; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkVO; +import com.cloud.network.Networks.TrafficType; import com.cloud.network.RemoteAccessVpnVO; import com.cloud.network.SshKeysDistriMonitor; import com.cloud.network.VpnUserVO; @@ -122,6 +122,7 @@ import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkRuleConfigDao; import com.cloud.network.dao.RemoteAccessVpnDao; import com.cloud.network.dao.VpnUserDao; +import com.cloud.network.router.VirtualRouter.Role; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -158,8 +159,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExecutionException; import com.cloud.utils.net.NetUtils; -import com.cloud.vm.DomainRouter; -import com.cloud.vm.DomainRouter.Role; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; @@ -167,7 +166,6 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.State; import com.cloud.vm.UserVmVO; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachine.Event; import com.cloud.vm.VirtualMachineGuru; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; @@ -379,7 +377,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute _eventDao.persist(event); throw new ExecutionException("Unable to create DHCP Server"); } - _routerDao.updateIf(router, Event.OperationSucceeded, null); + _routerDao.updateIf(router, VirtualMachine.Event.OperationSucceeded, null); s_logger.info("DHCP server created: id=" + router.getId() + "; name=" + router.getHostName() + "; vlan=" + guestVlan.getVlanId() + "; pod=" + pod.getName()); @@ -451,7 +449,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setUserId(1L); event.setAccountId(accountId); event.setType(EventTypes.EVENT_ROUTER_CREATE); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setStartId(startEventId); event.setDescription("Creating Router for account with Id: "+accountId); event = _eventDao.persist(event); @@ -547,7 +545,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute _eventDao.persist(event); throw new ExecutionException("Unable to create DomainRouter"); } - _routerDao.updateIf(router, Event.OperationSucceeded, null); + _routerDao.updateIf(router, VirtualMachine.Event.OperationSucceeded, null); s_logger.debug("Router created: id=" + router.getId() + "; name=" + router.getHostName()); @@ -609,7 +607,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setUserId(User.UID_SYSTEM); event.setAccountId(router.getAccountId()); event.setType(EventTypes.EVENT_ROUTER_DESTROY); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setParameters("id=" + routerId); event.setDescription("Starting to destroy router : " + router.getHostName()); event = _eventDao.persist(event); @@ -627,7 +625,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute return false; } router = _routerDao.findById(routerId); - if (!_routerDao.updateIf(router, Event.DestroyRequested, router.getHostId())) { + if (!_routerDao.updateIf(router, VirtualMachine.Event.DestroyRequested, router.getHostId())) { s_logger.debug("VM " + router.toString() + " is not in a state to be destroyed."); return false; } @@ -663,7 +661,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute @Override @DB - public DomainRouter upgradeRouter(UpgradeRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + public VirtualRouter upgradeRouter(UpgradeRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { Long routerId = cmd.getId(); Long serviceOfferingId = cmd.getServiceOfferingId(); Account account = UserContext.current().getAccount(); @@ -756,7 +754,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } @Override - public DomainRouter startRouter(StartRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException{ + public VirtualRouter startRouter(StartRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException{ if (_useNewNetworking) { return startRouter(cmd.getId()); } @@ -812,7 +810,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setUserId(1L); event.setAccountId(router.getAccountId()); event.setType(EventTypes.EVENT_ROUTER_START); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription("Starting Router with Id: "+routerId); event.setStartId(startEventId); event = _eventDao.persist(event); @@ -846,7 +844,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute return null; } - if (!_routerDao.updateIf(router, Event.StartRequested, routingHost.getId())) { + if (!_routerDao.updateIf(router, VirtualMachine.Event.StartRequested, routingHost.getId())) { s_logger.debug("Unable to start router " + router.toString() + " because it is not in a startable state"); throw new ConcurrentOperationException("Someone else is starting the router: " + router.toString()); } @@ -955,7 +953,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } router.setDomain(networkDomain); - _routerDao.updateIf(router, Event.OperationRetry, routingHost.getId()); + _routerDao.updateIf(router, VirtualMachine.Event.OperationRetry, routingHost.getId()); List vols = _storageMgr.prepare(router, routingHost); if (vols == null) { @@ -1037,7 +1035,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute throw new ExecutionException("Couldn't find a routingHost"); } - _routerDao.updateIf(router, Event.OperationSucceeded, routingHost.getId()); + _routerDao.updateIf(router, VirtualMachine.Event.OperationSucceeded, routingHost.getId()); if (s_logger.isDebugEnabled()) { s_logger.debug("Router " + router.toString() + " is now started on " + routingHost.toString()); } @@ -1078,7 +1076,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } - if (_routerDao.updateIf(router, Event.OperationFailed, null)) { + if (_routerDao.updateIf(router, VirtualMachine.Event.OperationFailed, null)) { txn.commit(); } @@ -1262,7 +1260,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute @Override - public DomainRouter stopRouter(StopRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, ResourceUnavailableException, ConcurrentOperationException{ + public VirtualRouter stopRouter(StopRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, ResourceUnavailableException, ConcurrentOperationException{ if (_useNewNetworking) { return stopRouter(cmd.getId()); } @@ -1380,7 +1378,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setUserId(1L); event.setAccountId(router.getAccountId()); event.setType(EventTypes.EVENT_ROUTER_REBOOT); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription("Rebooting Router with Id: "+routerId); event.setStartId(startEventId); _eventDao.persist(event); @@ -1413,7 +1411,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } @Override - public DomainRouter rebootRouter(RebootRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException{ + public VirtualRouter rebootRouter(RebootRouterCmd cmd) throws InvalidParameterValueException, PermissionDeniedException{ Long routerId = cmd.getId(); Account account = UserContext.current().getAccount(); @@ -1440,7 +1438,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } @Override - public List getRouters(final long hostId) { + public List getRouters(final long hostId) { return _routerDao.listByHostId(hostId); } @@ -1555,16 +1553,16 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute @Override public void completeStartCommand(final DomainRouterVO router) { - _routerDao.updateIf(router, Event.AgentReportRunning, router.getHostId()); + _routerDao.updateIf(router, VirtualMachine.Event.AgentReportRunning, router.getHostId()); } @Override public void completeStopCommand(final DomainRouterVO router) { - completeStopCommand(router, Event.AgentReportStopped); + completeStopCommand(router, VirtualMachine.Event.AgentReportStopped); } @DB - public void completeStopCommand(final DomainRouterVO router, final Event ev) { + public void completeStopCommand(final DomainRouterVO router, final VirtualMachine.Event ev) { final long routerId = router.getId(); final Transaction txn = Transaction.currentTxn(); @@ -1651,7 +1649,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setUserId(1L); event.setAccountId(router.getAccountId()); event.setType(EventTypes.EVENT_ROUTER_STOP); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription("Stopping Router with Id: "+routerId); event.setStartId(eventId); event = _eventDao.persist(event); @@ -1682,7 +1680,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setType(EventTypes.EVENT_ROUTER_STOP); event.setStartId(eventId); - if (!_routerDao.updateIf(router, Event.StopRequested, hostId)) { + if (!_routerDao.updateIf(router, VirtualMachine.Event.StopRequested, hostId)) { s_logger.debug("VM " + router.toString() + " is not in a state to be stopped."); return false; } @@ -1717,11 +1715,11 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute event.setDescription("failed to stop Domain Router : " + router.getHostName()); event.setLevel(EventVO.LEVEL_ERROR); _eventDao.persist(event); - _routerDao.updateIf(router, Event.OperationFailed, router.getHostId()); + _routerDao.updateIf(router, VirtualMachine.Event.OperationFailed, router.getHostId()); return false; } - completeStopCommand(router, Event.OperationSucceeded); + completeStopCommand(router, VirtualMachine.Event.OperationSucceeded); event.setDescription("successfully stopped Domain Router : " + router.getHostName()); _eventDao.persist(event); if (s_logger.isDebugEnabled()) { @@ -1793,7 +1791,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute public boolean migrate(final DomainRouterVO router, final HostVO host) { final HostVO fromHost = _hostDao.findById(router.getHostId()); - if (!_routerDao.updateIf(router, Event.MigrationRequested, router.getHostId())) { + if (!_routerDao.updateIf(router, VirtualMachine.Event.MigrationRequested, router.getHostId())) { s_logger.debug("State for " + router.toString() + " has changed so migration can not take place."); return false; } @@ -1820,18 +1818,18 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute final CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer)_agentMgr.send(host.getId(), cvm); if (answer == null || !answer.getResult()) { s_logger.debug("Unable to complete migration for " + router.getId()); - _routerDao.updateIf(router, Event.AgentReportStopped, null); + _routerDao.updateIf(router, VirtualMachine.Event.AgentReportStopped, null); return false; } final State state = answer.getState(); if (state == State.Stopped) { s_logger.warn("Unable to complete migration as we can not detect it on " + host.getId()); - _routerDao.updateIf(router, Event.AgentReportStopped, null); + _routerDao.updateIf(router, VirtualMachine.Event.AgentReportStopped, null); return false; } - _routerDao.updateIf(router, Event.OperationSucceeded, host.getId()); + _routerDao.updateIf(router, VirtualMachine.Event.OperationSucceeded, host.getId()); return true; } @@ -2350,7 +2348,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute } @Override - public DomainRouter startRouter(long routerId) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException { + public VirtualRouter startRouter(long routerId) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException { Account account = UserContext.current().getAccount(); //verify parameters @@ -2375,7 +2373,7 @@ public class DomainRouterManagerImpl implements DomainRouterManager, DomainRoute * @throws InvalidParameterValueException, PermissionDeniedException */ @Override - public DomainRouter stopRouter(long routerId) throws ResourceUnavailableException, ConcurrentOperationException { + public VirtualRouter stopRouter(long routerId) throws ResourceUnavailableException, ConcurrentOperationException { UserContext context = UserContext.current(); Account account = context.getAccount(); long accountId = context.getAccountId(); diff --git a/server/src/com/cloud/network/rules/RulesManager.java b/server/src/com/cloud/network/rules/RulesManager.java new file mode 100644 index 00000000000..e0800c84c76 --- /dev/null +++ b/server/src/com/cloud/network/rules/RulesManager.java @@ -0,0 +1,129 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General License for more details. + * + * You should have received a copy of the GNU General License + * along with this program. If not, see . + * + */ +package com.cloud.network.rules; + +import java.util.List; + +import com.cloud.api.commands.AddVpnUserCmd; +import com.cloud.api.commands.AssignToLoadBalancerRuleCmd; +import com.cloud.api.commands.CreateLoadBalancerRuleCmd; +import com.cloud.api.commands.CreatePortForwardingRuleCmd; +import com.cloud.api.commands.CreateRemoteAccessVpnCmd; +import com.cloud.api.commands.DeleteLoadBalancerRuleCmd; +import com.cloud.api.commands.DeleteRemoteAccessVpnCmd; +import com.cloud.api.commands.ListPortForwardingRulesCmd; +import com.cloud.api.commands.RemoveFromLoadBalancerRuleCmd; +import com.cloud.api.commands.RemoveVpnUserCmd; +import com.cloud.api.commands.UpdateLoadBalancerRuleCmd; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.FirewallRuleVO; +import com.cloud.network.LoadBalancerVO; +import com.cloud.network.RemoteAccessVpnVO; +import com.cloud.network.VpnUserVO; +import com.cloud.vm.DomainRouterVO; + +public interface RulesManager { + + /** + * @param fwRules list of rules to be updated + * @param router router where the rules have to be updated + * @return list of rules successfully updated + */ + List updatePortForwardingRules(List fwRules, DomainRouterVO router, Long hostId); + + /** + * @param fwRules list of rules to be updated + * @param router router where the rules have to be updated + * @return success + */ + boolean updateLoadBalancerRules(List fwRules, DomainRouterVO router, Long hostId); + + /** + * @param publicIpAddress ip address associated with the fwRules + * @param fwRules list of rules to be updated + * @param router router where the rules have to be updated + * @return list of rules successfully updated + */ + List updateFirewallRules(String publicIpAddress, List fwRules, DomainRouterVO router); + + /** + * Create a port forwarding rule from the given ipAddress/port to the given virtual machine/port. + * @param cmd the command specifying the ip address, port, protocol, private port, and virtual machine id. + * @return the newly created FirewallRuleVO if successful, null otherwise. + */ + FirewallRuleVO createPortForwardingRule(CreatePortForwardingRuleCmd cmd) throws NetworkRuleConflictException; + + /** + * 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 + */ + List listPortForwardingRules(ListPortForwardingRulesCmd cmd); + + /** + * Create a load balancer rule from the given ipAddress/port to the given private port + * @param cmd the command specifying the ip address, port, protocol, private port, and algorithm + * @return the newly created LoadBalancerVO if successful, null otherwise + */ + LoadBalancerVO createLoadBalancerRule(CreateLoadBalancerRuleCmd cmd); + + boolean updateFirewallRule(FirewallRuleVO fwRule, String oldPrivateIP, String oldPrivatePort); + + /** + * Assign a virtual machine, or list of virtual machines, to a load balancer. + */ + boolean assignToLoadBalancer(AssignToLoadBalancerRuleCmd cmd) throws NetworkRuleConflictException; + + boolean removeFromLoadBalancer(RemoveFromLoadBalancerRuleCmd cmd); + + boolean deleteLoadBalancerRule(DeleteLoadBalancerRuleCmd cmd); + LoadBalancerVO updateLoadBalancerRule(UpdateLoadBalancerRuleCmd cmd); + + RemoteAccessVpnVO createRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, InvalidParameterValueException, PermissionDeniedException; + + /** + * Start a remote access vpn for the given ip address and client ip range + * @param cmd the command specifying the ip address, ip range + * @return the RemoteAccessVpnVO if successful, null otherwise + * @throws ConcurrentOperationException + * @throws ResourceUnavailableException + */ + RemoteAccessVpnVO startRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException; + + /** + * Destroy a previously created remote access VPN + * @param cmd the command specifying the account and zone + * @return success if successful, false otherwise + * @throws ConcurrentOperationException + */ + boolean destroyRemoteAccessVpn(DeleteRemoteAccessVpnCmd cmd) throws ConcurrentOperationException; + + VpnUserVO addVpnUser(AddVpnUserCmd cmd) throws ConcurrentOperationException; + + boolean removeVpnUser(RemoveVpnUserCmd cmd) throws ConcurrentOperationException; + + FirewallRuleVO createIpForwardingRuleInDb(String ipAddr, Long virtualMachineId); + + boolean deletePortForwardingRule(Long id, boolean sysContext); + + boolean deleteIpForwardingRule(Long id); +} diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java new file mode 100644 index 00000000000..e9cf03553a5 --- /dev/null +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -0,0 +1,188 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.network.rules; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.api.commands.AddVpnUserCmd; +import com.cloud.api.commands.AssignToLoadBalancerRuleCmd; +import com.cloud.api.commands.CreateLoadBalancerRuleCmd; +import com.cloud.api.commands.CreatePortForwardingRuleCmd; +import com.cloud.api.commands.CreateRemoteAccessVpnCmd; +import com.cloud.api.commands.DeleteLoadBalancerRuleCmd; +import com.cloud.api.commands.DeleteRemoteAccessVpnCmd; +import com.cloud.api.commands.ListPortForwardingRulesCmd; +import com.cloud.api.commands.RemoveFromLoadBalancerRuleCmd; +import com.cloud.api.commands.RemoveVpnUserCmd; +import com.cloud.api.commands.UpdateLoadBalancerRuleCmd; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.FirewallRuleVO; +import com.cloud.network.LoadBalancerVO; +import com.cloud.network.RemoteAccessVpnVO; +import com.cloud.network.VpnUserVO; +import com.cloud.utils.component.Manager; +import com.cloud.vm.DomainRouterVO; + +@Local(value=RulesManager.class) +public class RulesManagerImpl implements RulesManager, Manager { + String _name; + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _name = name; + return true; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + @Override + public String getName() { + return _name; + } + + @Override + public List updatePortForwardingRules(List fwRules, DomainRouterVO router, Long hostId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean updateLoadBalancerRules(List fwRules, DomainRouterVO router, Long hostId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public List updateFirewallRules(String publicIpAddress, List fwRules, DomainRouterVO router) { + // TODO Auto-generated method stub + return null; + } + + @Override + public FirewallRuleVO createPortForwardingRule(CreatePortForwardingRuleCmd cmd) throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List listPortForwardingRules(ListPortForwardingRulesCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public LoadBalancerVO createLoadBalancerRule(CreateLoadBalancerRuleCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean updateFirewallRule(FirewallRuleVO fwRule, String oldPrivateIP, String oldPrivatePort) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean assignToLoadBalancer(AssignToLoadBalancerRuleCmd cmd) throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean removeFromLoadBalancer(RemoveFromLoadBalancerRuleCmd cmd) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean deleteLoadBalancerRule(DeleteLoadBalancerRuleCmd cmd) { + // TODO Auto-generated method stub + return false; + } + + @Override + public LoadBalancerVO updateLoadBalancerRule(UpdateLoadBalancerRuleCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public RemoteAccessVpnVO createRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, InvalidParameterValueException, + PermissionDeniedException { + // TODO Auto-generated method stub + return null; + } + + @Override + public RemoteAccessVpnVO startRemoteAccessVpn(CreateRemoteAccessVpnCmd cmd) throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean destroyRemoteAccessVpn(DeleteRemoteAccessVpnCmd cmd) throws ConcurrentOperationException { + // TODO Auto-generated method stub + return false; + } + + @Override + public VpnUserVO addVpnUser(AddVpnUserCmd cmd) throws ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean removeVpnUser(RemoveVpnUserCmd cmd) throws ConcurrentOperationException { + // TODO Auto-generated method stub + return false; + } + + @Override + public FirewallRuleVO createIpForwardingRuleInDb(String ipAddr, Long virtualMachineId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean deletePortForwardingRule(Long id, boolean sysContext) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean deleteIpForwardingRule(Long id) { + // TODO Auto-generated method stub + return false; + } +} diff --git a/server/src/com/cloud/network/security/NetworkGroupManager.java b/server/src/com/cloud/network/security/NetworkGroupManager.java index 39c6f8879ca..3fb0f6de6a6 100644 --- a/server/src/com/cloud/network/security/NetworkGroupManager.java +++ b/server/src/com/cloud/network/security/NetworkGroupManager.java @@ -20,40 +20,22 @@ package com.cloud.network.security; import java.util.HashMap; import java.util.List; -import com.cloud.api.commands.AuthorizeNetworkGroupIngressCmd; -import com.cloud.api.commands.CreateNetworkGroupCmd; -import com.cloud.api.commands.DeleteNetworkGroupCmd; -import com.cloud.api.commands.ListNetworkGroupsCmd; -import com.cloud.api.commands.RevokeNetworkGroupIngressCmd; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.PermissionDeniedException; -import com.cloud.exception.ResourceInUseException; import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; -import com.cloud.utils.component.Manager; import com.cloud.vm.State; /** * Ensures that network firewall rules stay updated as VMs go up and down * */ -public interface NetworkGroupManager extends Manager { +public interface NetworkGroupManager { public static final String DEFAULT_GROUP_NAME = "default"; public static final String DEFAULT_GROUP_DESCRIPTION = "Default Network Group"; public void handleVmStateTransition(UserVm userVm, State vmState); - public List authorizeNetworkGroupIngress(AuthorizeNetworkGroupIngressCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; - public NetworkGroupVO createNetworkGroup(String name, String description, Long domainId, Long accountId, String accountName); - - /** - * Create a network group with the given name and description - * @param command the command specifying the name and description - * @return the created network group if successful, null otherwise - */ - public NetworkGroupVO createNetworkGroup(CreateNetworkGroupCmd command) throws PermissionDeniedException, InvalidParameterValueException; public NetworkGroupVO createDefaultNetworkGroup( Long accountId); @@ -61,17 +43,6 @@ public interface NetworkGroupManager extends Manager { public void removeInstanceFromGroups(Long userVmId); - boolean revokeNetworkGroupIngress(RevokeNetworkGroupIngressCmd cmd); - - boolean deleteNetworkGroup(DeleteNetworkGroupCmd cmd) throws ResourceInUseException, PermissionDeniedException, InvalidParameterValueException; - - /** - * Search for network 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 network groups and associated ingress rules - */ - public List searchForNetworkGroupRules(ListNetworkGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException; - public void fullSync(long agentId, HashMap> newGroupStates); public String getNetworkGroupsNamesForVm(long vmId); diff --git a/server/src/com/cloud/network/security/NetworkGroupManagerImpl.java b/server/src/com/cloud/network/security/NetworkGroupManagerImpl.java index f09322d125f..df5748c4a10 100644 --- a/server/src/com/cloud/network/security/NetworkGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/NetworkGroupManagerImpl.java @@ -73,6 +73,7 @@ import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.utils.component.ComponentLocator; 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; @@ -86,9 +87,9 @@ import com.cloud.vm.State; import com.cloud.vm.UserVmVO; import com.cloud.vm.dao.UserVmDao; -@Local(value={NetworkGroupManager.class}) -public class NetworkGroupManagerImpl implements NetworkGroupManager { - public static final Logger s_logger = Logger.getLogger(NetworkGroupManagerImpl.class.getName()); +@Local(value={NetworkGroupManager.class, NetworkGroupService.class}) +public class NetworkGroupManagerImpl implements NetworkGroupManager, NetworkGroupService, Manager { + public static final Logger s_logger = Logger.getLogger(NetworkGroupManagerImpl.class); @Inject NetworkGroupDao _networkGroupDao; @Inject IngressRuleDao _ingressRuleDao; @@ -428,7 +429,7 @@ public class NetworkGroupManagerImpl implements NetworkGroupManager { Integer icmpCode = cmd.getIcmpCode(); List cidrList = cmd.getCidrList(); Map groupList = cmd.getUserNetworkGroupList(); - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); String accountName = cmd.getAccountName(); Long domainId = cmd.getDomainId(); Integer startPortOrType = null; @@ -638,7 +639,7 @@ public class NetworkGroupManagerImpl implements NetworkGroupManager { public boolean revokeNetworkGroupIngress(RevokeNetworkGroupIngressCmd cmd) { //input validation - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); Long userId = UserContext.current().getUserId(); Long domainId = cmd.getDomainId(); Integer startPort = cmd.getStartPort(); @@ -855,7 +856,7 @@ public class NetworkGroupManagerImpl implements NetworkGroupManager { Long domainId = cmd.getDomainId(); Long accountId = null; - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (account != null) { if ((account.getType() == Account.ACCOUNT_TYPE_ADMIN) || (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN)) { if ((domainId != null) && (accountName != null)) { @@ -1115,7 +1116,7 @@ public class NetworkGroupManagerImpl implements NetworkGroupManager { String name = cmd.getNetworkGroupName(); String accountName = cmd.getAccountName(); Long domainId = cmd.getDomainId(); - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); if (!_enabled) { return true; @@ -1194,7 +1195,7 @@ public class NetworkGroupManagerImpl implements NetworkGroupManager { @Override public List searchForNetworkGroupRules(ListNetworkGroupsCmd cmd) throws PermissionDeniedException, InvalidParameterValueException { - Account account = (Account)UserContext.current().getAccount(); + Account account = UserContext.current().getAccount(); Long domainId = cmd.getDomainId(); String accountName = cmd.getAccountName(); Long accountId = null; diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 0dc2c5657f4..da1078e9e46 100755 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -17,119 +17,41 @@ */ package com.cloud.server; -import java.net.URISyntaxException; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; -import com.cloud.alert.AlertVO; -import com.cloud.api.ServerApiException; -import com.cloud.api.commands.CreateDomainCmd; -import com.cloud.api.commands.DeleteDomainCmd; -import com.cloud.api.commands.DeletePreallocatedLunCmd; -import com.cloud.api.commands.DeployVMCmd; -import com.cloud.api.commands.ExtractVolumeCmd; -import com.cloud.api.commands.GetCloudIdentifierCmd; -import com.cloud.api.commands.ListAccountsCmd; -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; -import com.cloud.api.commands.ListClustersCmd; -import com.cloud.api.commands.ListDiskOfferingsCmd; -import com.cloud.api.commands.ListDomainChildrenCmd; -import com.cloud.api.commands.ListDomainsCmd; -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.ListHypervisorsCmd; -import com.cloud.api.commands.ListIpForwardingRulesCmd; -import com.cloud.api.commands.ListIsosCmd; -import com.cloud.api.commands.ListLoadBalancerRuleInstancesCmd; -import com.cloud.api.commands.ListLoadBalancerRulesCmd; -import com.cloud.api.commands.ListPodsByCmd; -import com.cloud.api.commands.ListPreallocatedLunsCmd; -import com.cloud.api.commands.ListPublicIpAddressesCmd; -import com.cloud.api.commands.ListRemoteAccessVpnsCmd; -import com.cloud.api.commands.ListRoutersCmd; -import com.cloud.api.commands.ListServiceOfferingsCmd; -import com.cloud.api.commands.ListSnapshotsCmd; -import com.cloud.api.commands.ListStoragePoolsCmd; -import com.cloud.api.commands.ListSystemVMsCmd; -import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; -import com.cloud.api.commands.ListTemplatesCmd; -import com.cloud.api.commands.ListUsersCmd; -import com.cloud.api.commands.ListVMGroupsCmd; -import com.cloud.api.commands.ListVMsCmd; -import com.cloud.api.commands.ListVlanIpRangesCmd; -import com.cloud.api.commands.ListVolumesCmd; -import com.cloud.api.commands.ListVpnUsersCmd; -import com.cloud.api.commands.ListZonesByCmd; -import com.cloud.api.commands.RebootSystemVmCmd; -import com.cloud.api.commands.RegisterCmd; -import com.cloud.api.commands.RegisterPreallocatedLunCmd; -import com.cloud.api.commands.StartSystemVMCmd; -import com.cloud.api.commands.StopSystemVmCmd; -import com.cloud.api.commands.UpdateDomainCmd; -import com.cloud.api.commands.UpdateIsoCmd; -import com.cloud.api.commands.UpdateIsoPermissionsCmd; -import com.cloud.api.commands.UpdatePortForwardingRuleCmd; -import com.cloud.api.commands.UpdateTemplateCmd; -import com.cloud.api.commands.UpdateTemplatePermissionsCmd; -import com.cloud.api.commands.UpdateVMGroupCmd; -import com.cloud.api.commands.UploadCustomCertificateCmd; import com.cloud.async.AsyncJobResult; import com.cloud.async.AsyncJobVO; -import com.cloud.capacity.CapacityVO; -import com.cloud.configuration.ConfigurationVO; import com.cloud.configuration.ResourceLimitVO; -import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenterIpAddressVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.VlanVO; import com.cloud.domain.DomainVO; import com.cloud.event.EventVO; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InsufficientStorageCapacityException; import com.cloud.exception.InternalErrorException; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.PermissionDeniedException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.exception.StorageUnavailableException; import com.cloud.host.HostVO; import com.cloud.info.ConsoleProxyInfo; import com.cloud.network.FirewallRuleVO; import com.cloud.network.IPAddressVO; import com.cloud.network.LoadBalancerVO; -import com.cloud.network.RemoteAccessVpnVO; -import com.cloud.network.VpnUserVO; import com.cloud.network.security.NetworkGroupVO; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.DiskOfferingVO; -import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.GuestOSVO; import com.cloud.storage.SnapshotPolicyVO; -import com.cloud.storage.SnapshotVO; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VolumeStats; import com.cloud.storage.VolumeVO; -import com.cloud.storage.preallocatedlun.PreallocatedLunVO; import com.cloud.user.Account; import com.cloud.user.AccountVO; import com.cloud.user.User; import com.cloud.user.UserAccount; -import com.cloud.user.UserAccountVO; -import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; -import com.cloud.utils.exception.ExecutionException; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.InstanceGroupVO; @@ -144,12 +66,7 @@ import com.cloud.vm.VirtualMachine; * This will be the line drawn between the UI and MS. If we need to build * a wire protocol, it will be built on top of this java interface. */ -public interface ManagementServer { - static final String Name = "management-server"; - - - - List listClusterByPodId(long podId); +public interface ManagementServer extends ManagementService { /** * Gets a user by userId @@ -180,28 +97,6 @@ public interface ManagementServer { - /** - * registerPreallocatedLun registers a preallocated lun in our database. - * - * @param cmd the API command wrapping the register parameters - * - targetIqn iqn for the storage server. - * - portal portal ip address for the storage server. - * - lun lun # - * - size size of the lun - * - dcId data center to attach to - * - tags tags to attach to the lun - * @return the new PreAllocatedLun - */ - PreallocatedLunVO registerPreallocatedLun(RegisterPreallocatedLunCmd cmd); - - /** - * Unregisters a preallocated lun in our database - * @param cmd the api command wrapping the id of the lun - * @return true if unregistered; false if not. - * @throws IllegalArgumentException - */ - boolean unregisterPreallocatedLun(DeletePreallocatedLunCmd cmd) throws IllegalArgumentException; - String updateAdminPassword(long userId, String oldPassword, String newPassword); /** @@ -235,14 +130,6 @@ public interface ManagementServer { */ VolumeStats[] getVolumeStatistics(long[] volId); - /** - * Searches for vlan by the specified search criteria - * Can search by: "id", "vlan", "name", "zoneID" - * @param cmd - * @return List of Vlans - */ - List searchForVlans(ListVlanIpRangesCmd cmd); - /** * If the specified VLAN is associated with the pod, returns the pod ID. Else, returns null. * @param vlanDbId @@ -268,12 +155,6 @@ public interface ManagementServer { */ List listPrivateIpAddressesBy(Long podId, Long zoneId); - /** - * Generates a random password that will be used (initially) by newly created and started virtual machines - * @return a random password - */ - String generateRandomPassword(); - /** * Attaches an ISO to the virtual CDROM device of the specified VM. Will fail if the VM already has an ISO mounted. * @param vmId @@ -284,38 +165,6 @@ public interface ManagementServer { */ boolean attachISOToVM(long vmId, long userId, long isoId, boolean attach, long startEventId); - /** - * Creates and starts a new Virtual Machine. - * - * @param cmd the command with the deployment parameters - * - userId - * - accountId - * - zoneId - * - serviceOfferingId - * - templateId: the id of the template (or ISO) to use for creating the virtual machine - * - diskOfferingId: ID of the disk offering to use when creating the root disk (if deploying from an ISO) or the data disk (if deploying from a template). If deploying from a template and a disk offering ID is not passed in, the VM will have only a root disk. - * - displayName: user-supplied name to be shown in the UI or returned in the API - * - groupName: user-supplied groupname to be shown in the UI or returned in the API - * - userData: user-supplied base64-encoded data that can be retrieved by the instance from the virtual router - * - size: size to be used for volume creation in case the disk offering is private (i.e. size=0) - * @return VirtualMachine if successfully deployed, null otherwise - * @throws InvalidParameterValueException if the parameter values are incorrect. - * @throws ExecutionException - * @throws StorageUnavailableException - * @throws ConcurrentOperationException - * @throws ResourceUnavailableException - * @throws InsufficientCapacityException - */ - UserVm deployVirtualMachine(DeployVMCmd cmd, String password) throws ResourceAllocationException, InsufficientStorageCapacityException, ExecutionException, StorageUnavailableException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException; - - /** - * Finds a domain router by user and data center - * @param userId - * @param dataCenterId - * @return a list of DomainRouters - */ - DomainRouterVO findDomainRouterBy(long accountId, long dataCenterId); - /** * Finds a domain router by id * @param router id @@ -323,14 +172,6 @@ public interface ManagementServer { */ DomainRouterVO findDomainRouterById(long domainRouterId); - /** - * Retrieves the list of data centers with search criteria. - * Currently the only search criteria is "available" zones 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); /** * Retrieves a host by id @@ -354,49 +195,12 @@ public interface ManagementServer { */ List getEvents(long userId, long accountId, Long domainId, String type, String level, Date startDate, Date endDate); - /** - * returns the a map of the names/values in the configuraton table - * @return map of configuration name/values - */ - List searchForConfigurations(ListCfgsByCmd c); - /** * returns the instance id of this management server. * @return id of the management server */ long getId(); - /** revisit - * Searches for users by the specified search criteria - * Can search by: "id", "username", "account", "domainId", "type" - * @param cmd - * @return List of UserAccounts - */ - List searchForUsers(ListUsersCmd cmd); - - /** - * Searches for Service Offerings by the specified search criteria - * Can search by: "name" - * @param cmd - * @return List of ServiceOfferings - */ - List searchForServiceOfferings(ListServiceOfferingsCmd cmd); - - /** - * Searches for Clusters by the specified search criteria - * @param c - * @return - */ - List searchForClusters(ListClustersCmd c); - - /** - * Searches for Pods by the specified search criteria - * Can search by: pod name and/or zone name - * @param cmd - * @return List of Pods - */ - List searchForPods(ListPodsByCmd cmd); - /** * Searches for Zones by the specified search criteria * Can search by: zone name @@ -405,14 +209,6 @@ public interface ManagementServer { */ List searchForZones(Criteria c); - /** - * 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); - /** * Searches for servers that are either Down or in Alert state * @param c @@ -509,15 +305,6 @@ public interface ManagementServer { */ DataCenterVO findDataCenterById(long dataCenterId); - /** - * Creates a new template - * @param cmd - * @return updated template - * @throws InvalidParameterValueException, PermissionDeniedException - */ - VMTemplateVO updateTemplate(UpdateIsoCmd cmd); - VMTemplateVO updateTemplate(UpdateTemplateCmd cmd); - /** * Copies a template from one secondary storage server to another * @param userId @@ -544,21 +331,6 @@ public interface ManagementServer { */ List searchForUserVMs(Criteria c); - /** - * 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. - */ - List searchForUserVMs(ListVMsCmd cmd); - - /** - * Update an existing port forwarding rule on the given public IP / public port for the given protocol - * @param cmd - the UpdatePortForwardingRuleCmd command that wraps publicIp, privateIp, publicPort, privatePort, protocol of the rule to update - * @return the new firewall rule if updated, null if no rule on public IP / public port of that protocol could be found - */ - FirewallRuleVO updatePortForwardingRule(UpdatePortForwardingRuleCmd cmd); - /** * Find a firewall rule by rule id * @param ruleId @@ -573,14 +345,6 @@ public interface ManagementServer { */ IPAddressVO findIPAddressById(String ipAddress); - /** - * Obtains a list of events by the specified search criteria. - * Can search by: "username", "type", "level", "startDate", "endDate" - * @param c - * @return List of Events. - */ - List searchForEvents(ListEventsCmd c); - List listPendingEvents(int entryTime, int duration); /** @@ -596,24 +360,8 @@ public interface ManagementServer { */ List listAllActiveRouters(); - /** - * 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. - */ - List searchForRouters(ListRoutersCmd cmd); - List searchForConsoleProxy(Criteria c); - /** revisit - * Obtains a list of storage volumes by the specified search criteria. - * Can search by: "userId", "vType", "instanceId", "dataCenterId", "podId", "hostId" - * @param cmd - * @return List of Volumes. - */ - List searchForVolumes(ListVolumesCmd cmd); - /** * Finds a pod by the specified ID. * @param podId @@ -628,14 +376,6 @@ public interface ManagementServer { */ HostVO findSecondaryStorageHosT(long zoneId); - /** - * 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 - */ - List searchForIPAddresses(ListPublicIpAddressesCmd cmd); - /** * Obtains a list of billing records by the specified search criteria. * Can search by: "userId", "startDate", "endDate" @@ -650,18 +390,6 @@ public interface ManagementServer { */ List listAllTemplates(); - /** - * Obtains a list of all guest OS. - * @return list of GuestOS - */ - List listGuestOSByCriteria(ListGuestOsCmd cmd); - - /** - * Obtains a list of all guest OS categories. - * @return list of GuestOSCategories - */ - List listGuestOSCategoriesByCriteria(ListGuestOsCategoriesCmd cmd); - /** * Logs out a user * @param userId @@ -675,9 +403,6 @@ public interface ManagementServer { String getConsoleAccessUrlRoot(long vmId); ConsoleProxyVO findConsoleProxyById(long instanceId); VMInstanceVO findSystemVMById(long instanceId); - VMInstanceVO stopSystemVM(StopSystemVmCmd cmd); - VirtualMachine startSystemVM(StartSystemVMCmd cmd); - VirtualMachine rebootSystemVM(RebootSystemVmCmd cmd); VirtualMachine startSystemVm(long vmId); VirtualMachine stopSystemVm(long vmId); @@ -697,38 +422,6 @@ public interface ManagementServer { */ int getVncPort(VirtualMachine vm); - /** - * Search for domains owned by the given domainId/domainName (those parameters are wrapped - * in a command object. - * @return list of domains owned by the given user - */ - List searchForDomains(ListDomainsCmd c); - - List searchForDomainChildren(ListDomainChildrenCmd cmd); - - /** - * create a new domain - * @param command - the create command defining the name to use and the id of the parent domain under which to create the new domain. - */ - DomainVO createDomain(CreateDomainCmd command); - - /** - * delete a domain with the given domainId - * @param cmd the command wrapping the delete parameters - * - domainId - * - ownerId - * - cleanup: whether or not to delete all accounts/VMs/sub-domains when deleting the domain - */ - boolean deleteDomain(DeleteDomainCmd cmd); - - /** - * update an existing domain - * @param cmd - the command containing domainId and new domainName - * @return Domain object if the command succeeded - * @throws InvalidParameterValueException, PermissionDeniedException - */ - DomainVO updateDomain(UpdateDomainCmd cmd); - /** * find the domain Id associated with the given account * @param accountId the id of the account to use to look up the domain @@ -779,15 +472,6 @@ public interface ManagementServer { */ Account findAccountById(Long accountId); - /** - * Searches for accounts by the specified search criteria - * Can search by: "id", "name", "domainid", "type" - * @param cmd - * @return List of Accounts - */ - List searchForAccounts(ListAccountsCmd cmd); - - /** * Find the owning account of an IP Address * @param ipAddress @@ -817,20 +501,6 @@ public interface ManagementServer { */ List listIsos(Criteria c); - /** - * Searches for alerts - * @param c - * @return List of Alerts - */ - List searchForAlerts(ListAlertsCmd cmd); - - /** - * list all the capacity rows in capacity operations table - * @param cmd - * @return List of capacities - */ - List listCapacities(ListCapacityCmd cmd); - public long getMemoryUsagebyHost(Long hostId); /** @@ -840,15 +510,6 @@ public interface ManagementServer { */ boolean destroyTemplateSnapshot(Long userId, long snapshotId); - /** - * List all snapshots of a disk volume. Optionaly lists snapshots created by specified interval - * @param cmd the command containing the search criteria (order by, limit, etc.) - * @return list of snapshots - * @throws InvalidParameterValueException - * @throws PermissionDeniedException - */ - List listSnapshots(ListSnapshotsCmd cmd); - /** * Finds a diskOffering by the specified ID. * @param diskOfferingId @@ -862,13 +523,6 @@ public interface ManagementServer { */ List findPrivateDiskOffering(); - /** - * List the permissions on a template. This will return a list of account names that have been granted permission to launch instances from the template. - * @param cmd the command wrapping the search criteria (template id) - * @return list of account names that have been granted permission to launch instances from the template - */ - List listTemplatePermissions(ListTemplateOrIsoPermissionsCmd cmd); - /** * List private templates for which the given account/domain has been granted permission to launch instances * @param accountId @@ -876,27 +530,6 @@ public interface ManagementServer { */ List listPermittedTemplates(long accountId); - /** - * List ISOs that match the specified criteria. - * @param cmd The command that wraps the (optional) templateId, name, keyword, templateFilter, bootable, account, and zoneId parameters. - * @return list of ISOs - */ - List listIsos(ListIsosCmd cmd); - - /** - * List templates that match the specified criteria. - * @param cmd The command that wraps the (optional) templateId, name, keyword, templateFilter, bootable, account, and zoneId parameters. - * @return list of ISOs - */ - List listTemplates(ListTemplatesCmd cmd); - - /** - * 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 - */ - List searchForDiskOfferings(ListDiskOfferingsCmd cmd); - /** * * @param jobId async-call job id @@ -907,42 +540,13 @@ public interface ManagementServer { AsyncJobVO findAsyncJobById(long jobId); - /** - * 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 - */ - List searchForAsyncJobs(ListAsyncJobsCmd cmd); - LoadBalancerVO findLoadBalancer(Long accountId, String name); LoadBalancerVO findLoadBalancerById(long loadBalancerId); - /** - * 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 - */ - List listLoadBalancerInstances(ListLoadBalancerRuleInstancesCmd cmd); - - /** - * 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 - * by id, name, public ip, and vm instance id - * @return list of load balancers that match the criteria - */ - List searchForLoadBalancers(ListLoadBalancerRulesCmd cmd); - String[] getApiConfig(); StoragePoolVO findPoolById(Long id); List searchForStoragePools(Criteria c); - /** - * 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 - */ - List searchForStoragePools(ListStoragePoolsCmd cmd); - SnapshotPolicyVO findSnapshotPolicyById(Long policyId); /** @@ -955,20 +559,6 @@ public interface ManagementServer { List searchForSecondaryStorageVm(Criteria c); - /** - * 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 - */ - List searchForSystemVm(ListSystemVMsCmd cmd); - - /** - * Returns back a SHA1 signed response - * @param userId -- id for the user - * @return -- ArrayList of - */ - ArrayList getCloudIdentifierResponse(GetCloudIdentifierCmd cmd); - NetworkGroupVO findNetworkGroupByName(Long accountId, String groupName); /** @@ -985,20 +575,10 @@ public interface ManagementServer { boolean isHypervisorSnapshotCapable(); List searchForStoragePoolDetails(long poolId, String value); - public List getPreAllocatedLuns(ListPreallocatedLunsCmd cmd); - boolean checkLocalStorageConfigVal(); - boolean updateTemplatePermissions(UpdateTemplatePermissionsCmd cmd); - boolean updateTemplatePermissions(UpdateIsoPermissionsCmd cmd); - String[] createApiKeyAndSecretKey(RegisterCmd cmd); - VolumeVO findVolumeByInstanceAndDeviceId(long instanceId, long deviceId); - InstanceGroupVO updateVmGroup(UpdateVMGroupCmd cmd); - - List searchForVmGroups(ListVMGroupsCmd cmd); - InstanceGroupVO getGroupForVm(long vmId); List searchForZoneWideVlans(long dcId, String vlanType,String vlanId); @@ -1006,44 +586,14 @@ public interface ManagementServer { /* * Fetches the version of cloud stack */ + @Override String getVersion(); - Map listCapabilities(ListCapabilitiesCmd cmd); GuestOSVO getGuestOs(Long guestOsId); VolumeVO getRootVolume(Long instanceId); long getPsMaintenanceCount(long podId); boolean isPoolUp(long instanceId); boolean checkIfMaintenable(long hostId); - - /** - * 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), id (the id of the volume) - * @throws URISyntaxException - * @throws InternalErrorException - * @throws PermissionDeniedException - * - */ - Long extractVolume(ExtractVolumeCmd cmd) throws URISyntaxException; - - /** - * return an array of available hypervisors - * @param cmd - * @return an array of available hypervisors in the cloud - */ - String[] getHypervisors(ListHypervisorsCmd cmd); - - /** - * 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 - * @throws ServerApiException -- even if one of the console proxy patching fails, we throw back this exception - */ - String uploadCertificate(UploadCustomCertificateCmd cmd); - - public List searchForRemoteAccessVpns(ListRemoteAccessVpnsCmd cmd); - - public List searchForVpnUsers(ListVpnUsersCmd cmd); public String getHashKey(); - List searchForIpForwardingRules(ListIpForwardingRulesCmd cmd); } diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 794dcfe6aaf..a526ddd34fc 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -68,6 +68,7 @@ import com.cloud.agent.api.GetVncPortCommand; import com.cloud.agent.api.proxy.UpdateCertificateCommand; import com.cloud.agent.api.storage.CopyVolumeAnswer; import com.cloud.agent.api.storage.CopyVolumeCommand; +import com.cloud.alert.Alert; import com.cloud.alert.AlertManager; import com.cloud.alert.AlertVO; import com.cloud.alert.dao.AlertDao; @@ -168,7 +169,7 @@ import com.cloud.dc.dao.PodVlanMapDao; import com.cloud.dc.dao.VlanDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; @@ -218,7 +219,7 @@ import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.GuestOSVO; import com.cloud.storage.LaunchPermissionVO; import com.cloud.storage.Snapshot; -import com.cloud.storage.Snapshot.SnapshotType; +import com.cloud.storage.Snapshot.Type; import com.cloud.storage.SnapshotPolicyVO; import com.cloud.storage.SnapshotVO; import com.cloud.storage.Storage; @@ -230,7 +231,6 @@ import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; import com.cloud.storage.Upload; import com.cloud.storage.Upload.Mode; -import com.cloud.storage.Upload.Type; import com.cloud.storage.UploadVO; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume; @@ -247,13 +247,13 @@ import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.UploadDao; import com.cloud.storage.dao.VMTemplateDao; -import com.cloud.storage.dao.VMTemplateDao.TemplateFilter; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.preallocatedlun.PreallocatedLunVO; import com.cloud.storage.preallocatedlun.dao.PreallocatedLunDao; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.upload.UploadMonitor; import com.cloud.template.TemplateManager; +import com.cloud.template.VirtualMachineTemplate.TemplateFilter; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.AccountVO; @@ -825,7 +825,7 @@ public class ManagementServerImpl implements ManagementServer { if (success) { if (attach) { - vm.setIsoId(iso.getId().longValue()); + vm.setIsoId(iso.getId()); } else { vm.setIsoId(null); } @@ -1322,11 +1322,6 @@ public class ManagementServerImpl implements ManagementServer { } } - @Override - public DomainRouterVO findDomainRouterBy(long accountId, long dataCenterId) { - return _routerDao.findBy(accountId, dataCenterId); - } - @Override public DomainRouterVO findDomainRouterById(long domainRouterId) { return _routerDao.findById(domainRouterId); @@ -3781,7 +3776,7 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForAlerts(ListAlertsCmd cmd) { + public List searchForAlerts(ListAlertsCmd cmd) { Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchCriteria sc = _alertDao.createSearchCriteria(); @@ -3957,14 +3952,14 @@ public class ManagementServerImpl implements ManagementServer { } if (snapshotTypeStr != null) { - SnapshotType snapshotType = SnapshotVO.getSnapshotType((String)snapshotTypeStr); + Type snapshotType = SnapshotVO.getSnapshotType((String)snapshotTypeStr); if (snapshotType == null) { throw new InvalidParameterValueException("Unsupported snapshot type " + snapshotTypeStr); } sc.setParameters("snapshotTypeEQ", snapshotType.ordinal()); } else { // Show only MANUAL and RECURRING snapshot types - sc.setParameters("snapshotTypeNEQ", Snapshot.SnapshotType.TEMPLATE.ordinal()); + sc.setParameters("snapshotTypeNEQ", Snapshot.Type.TEMPLATE.ordinal()); } return _snapshotDao.search(sc, searchFilter); @@ -4603,11 +4598,6 @@ public class ManagementServerImpl implements ManagementServer { return _poolDao.findById(id); } - @Override - public List listClusterByPodId(long podId) { - return _clusterDao.listByPodId(podId); - } - @Override public List searchForStoragePools(ListStoragePoolsCmd cmd) { Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal()); @@ -5183,7 +5173,7 @@ public class ManagementServerImpl implements ManagementServer { Long volumeId = cmd.getId(); String url = cmd.getUrl(); Long zoneId = cmd.getZoneId(); - AsyncJobVO job = cmd.getJob(); + AsyncJobVO job = null; // FIXME: cmd.getJob(); String mode = cmd.getMode(); Account account = UserContext.current().getAccount(); @@ -5244,7 +5234,7 @@ public class ManagementServerImpl implements ManagementServer { throw new IllegalArgumentException("Unable to resolve " + host); } - if ( _uploadMonitor.isTypeUploadInProgress(volumeId, Type.VOLUME) ){ + 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"); } } @@ -5264,14 +5254,14 @@ public class ManagementServerImpl implements ManagementServer { if (extractMode == Upload.Mode.HTTP_DOWNLOAD && extractURLList.size() > 0){ 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, 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()); resultObj.setResponseName(cmd.getName()); - _asyncMgr.updateAsyncJobAttachment(job.getId(), Type.VOLUME.toString(), volumeId); + _asyncMgr.updateAsyncJobAttachment(job.getId(), Upload.Type.VOLUME.toString(), volumeId); _asyncMgr.updateAsyncJobStatus(job.getId(), AsyncJobResult.STATUS_IN_PROGRESS, resultObj); // Copy the volume from the source storage pool to secondary storage @@ -5308,7 +5298,7 @@ public class ManagementServerImpl implements ManagementServer { _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. - _uploadMonitor.createVolumeDownloadURL(volumeId, volumeLocalPath, Type.VOLUME, zoneId, uploadJob.getId()); + _uploadMonitor.createVolumeDownloadURL(volumeId, volumeLocalPath, Upload.Type.VOLUME, zoneId, uploadJob.getId()); EventUtils.saveEvent(userId, accountId, EventVO.LEVEL_INFO, cmd.getEventType(), "Completed extraction of "+volume.getName()+ " in mode:" +mode, null, cmd.getStartEventId()); return uploadJob.getId(); } @@ -5449,7 +5439,7 @@ public class ManagementServerImpl implements ManagementServer { event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Scheduled); + event.setState(Event.State.Scheduled); event.setDescription("Scheduled async job for "+description); event = _eventDao.persist(event); return event.getId(); diff --git a/server/src/com/cloud/storage/StorageManager.java b/server/src/com/cloud/storage/StorageManager.java index 4edaafe71ce..abff9b97278 100755 --- a/server/src/com/cloud/storage/StorageManager.java +++ b/server/src/com/cloud/storage/StorageManager.java @@ -17,29 +17,16 @@ */ package com.cloud.storage; -import java.net.UnknownHostException; import java.util.List; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.manager.Commands; -import com.cloud.api.ServerApiException; -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.DeleteVolumeCmd; -import com.cloud.api.commands.PreparePrimaryStorageForMaintenanceCmd; -import com.cloud.api.commands.UpdateStoragePoolCmd; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientStorageCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.PermissionDeniedException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceInUseException; import com.cloud.exception.StorageUnavailableException; import com.cloud.host.Host; import com.cloud.host.HostVO; @@ -117,17 +104,6 @@ public interface StorageManager extends Manager { */ List create(Account account, VMInstanceVO vm, VMTemplateVO template, DataCenterVO dc, HostPodVO pod, ServiceOfferingVO offering, DiskOfferingVO diskOffering, long size) throws StorageUnavailableException, ExecutionException; - /** - * 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. - * @return - * @throws ResourceInUseException - * @throws IllegalArgumentException - * @throws UnknownHostException - * @throws ResourceAllocationException - */ - StoragePoolVO createPool(CreateStoragePoolCmd cmd) throws ResourceInUseException, IllegalArgumentException, UnknownHostException, ResourceAllocationException; - /** * Get the storage ip address to connect to. * @param vm vm to run. @@ -207,22 +183,6 @@ public interface StorageManager extends Manager { */ VolumeVO moveVolume(VolumeVO volume, long destPoolDcId, Long destPoolPodId, Long destPoolClusterId); - /** - * 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) - * @return the volume object - * @throws InvalidParameterValueException - * @throws PermissionDeniedException - */ - VolumeVO allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationException; - - /** - * Creates the volume based on the given criteria - * @param cmd the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, name) - * @return the volume object - */ - VolumeVO createVolume(CreateVolumeCmd cmd); - /** * Create a volume based on the given criteria * @param volume @@ -246,7 +206,6 @@ public interface StorageManager extends Manager { * @param volume */ void destroyVolume(VolumeVO volume); - boolean deleteVolume(DeleteVolumeCmd cmd) throws InvalidParameterValueException; /** Create capacity entries in the op capacity table * @param storagePool @@ -281,7 +240,7 @@ public interface StorageManager extends Manager { * 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(HostVO host); + boolean isLocalStorageActiveOnHost(Host host); /** * Cleans up storage pools by removing unused templates. @@ -289,15 +248,6 @@ public interface StorageManager extends Manager { */ void cleanupStorage(boolean recurring); - /** - * Delete the storage pool - * @param cmd - the command specifying poolId - * @return success or failure - * @throws InvalidParameterValueException - */ - boolean deletePool(DeletePoolCmd cmd) throws InvalidParameterValueException; - - /** * Find all of the storage pools needed for this vm. * @@ -308,24 +258,6 @@ public interface StorageManager extends Manager { String getPrimaryStorageNameLabel(VolumeVO volume); - /** - * Enable maintenance for primary storage - * @param cmd - the command specifying primaryStorageId - * @return the primary storage pool - * @throws ServerApiException - */ - public StoragePoolVO preparePrimaryStorageForMaintenance(PreparePrimaryStorageForMaintenanceCmd cmd) throws ServerApiException; - - /** - * Complete maintenance for primary storage - * @param cmd - the command specifying primaryStorageId - * @return the primary storage pool - * @throws ServerApiException - */ - public StoragePoolVO cancelPrimaryStorageForMaintenance(CancelPrimaryStorageMaintenanceCmd cmd) throws ServerApiException; - - public StoragePoolVO updateStoragePool(UpdateStoragePoolCmd cmd) throws IllegalArgumentException; - /** * Allocates one volume. * @param diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index c744550b2b7..0d41c08a161 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -89,7 +89,7 @@ import com.cloud.dc.dao.HostPodDao; import com.cloud.deploy.DeployDestination; import com.cloud.domain.Domain; import com.cloud.domain.dao.DomainDao; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.event.EventTypes; import com.cloud.event.EventVO; import com.cloud.event.dao.EventDao; @@ -118,7 +118,6 @@ import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.Storage.StorageResourceType; -import com.cloud.storage.Volume.Event; import com.cloud.storage.Volume.MirrorState; import com.cloud.storage.Volume.SourceType; import com.cloud.storage.Volume.VolumeType; @@ -148,6 +147,7 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; 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.GlobalLock; @@ -168,8 +168,8 @@ import com.cloud.vm.dao.ConsoleProxyDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -@Local(value = { StorageManager.class }) -public class StorageManagerImpl implements StorageManager { +@Local(value = { StorageManager.class, StorageService.class }) +public class StorageManagerImpl implements StorageManager, StorageService, Manager { private static final Logger s_logger = Logger.getLogger(StorageManagerImpl.class); protected String _name; @@ -413,7 +413,7 @@ public class StorageManagerImpl implements StorageManager { } @Override - public boolean isLocalStorageActiveOnHost(HostVO host) { + public boolean isLocalStorageActiveOnHost(Host host) { List storagePoolHostRefs = _storagePoolHostDao.listByHostId(host.getId()); for (StoragePoolHostVO storagePoolHostRef : storagePoolHostRefs) { StoragePoolVO storagePool = _storagePoolDao.findById(storagePoolHostRef.getPoolId()); @@ -641,7 +641,7 @@ public class StorageManagerImpl implements StorageManager { event.setUserId(UserContext.current().getUserId()); event.setAccountId(volume.getAccountId()); event.setType(EventTypes.EVENT_VOLUME_CREATE); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setStartId(startEventId); event.setDescription("Creating volume from snapshot with id: "+snapshotId); _eventDao.persist(event); @@ -687,7 +687,7 @@ public class StorageManagerImpl implements StorageManager { event.setType(EventTypes.EVENT_VOLUME_CREATE); event.setParameters(eventParams); event.setStartId(startEventId); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); if (createdVolume.getPath() != null) { event.setDescription("Created volume: "+ createdVolume.getName() + " with size: " + sizeMB + " MB in pool: " + poolName + " from snapshot id: " + snapshotId); event.setLevel(EventVO.LEVEL_INFO); @@ -915,7 +915,7 @@ public class StorageManagerImpl implements StorageManager { event1.setAccountId(account.getId()); event1.setUserId(1L); event1.setType(EventTypes.EVENT_VOLUME_CREATE); - event1.setState(EventState.Started); + event1.setState(Event.State.Started); event1.setDescription("Create volume: " + rootVol.getName()+ "started"); _eventDao.persist(event1); } @@ -1872,13 +1872,13 @@ public class StorageManagerImpl implements StorageManager { // event.setDescription("Created volume: " + createdVolume.getName() + " with size: " + sizeMB + " MB"); event.setDescription("Created volume: " + volume.getName() + " with size: " + sizeMB + " MB"); event.setParameters(eventParams); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); _eventDao.persist(event); /* } else { event.setDescription("Unable to create a volume for " + volume); event.setLevel(EventVO.LEVEL_ERROR); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); _eventDao.persist(event); } @@ -2383,7 +2383,7 @@ public class StorageManagerImpl implements StorageManager { event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Scheduled); + event.setState(Event.State.Scheduled); event.setDescription("Scheduled async job for "+description); event = _eventDao.persist(event); return event.getId(); @@ -2743,7 +2743,7 @@ public class StorageManagerImpl implements StorageManager { if (created == null) { newVol.setPoolId(null); try { - _volsDao.update(newVol, Event.OperationFailed); + _volsDao.update(newVol, Volume.Event.OperationFailed); } catch (ConcurrentOperationException e) { throw new CloudRuntimeException("Unable to update the failure on a volume: " + newVol, e); } @@ -2756,7 +2756,7 @@ public class StorageManagerImpl implements StorageManager { newVol.setPoolType(created.second().getPoolType()); newVol.setPodId(created.second().getPodId()); try { - _volsDao.update(newVol, Event.OperationSucceeded); + _volsDao.update(newVol, Volume.Event.OperationSucceeded); } catch (ConcurrentOperationException e) { throw new CloudRuntimeException("Unable to update an CREATE operation succeeded on volume " + newVol, e); } @@ -2773,7 +2773,7 @@ public class StorageManagerImpl implements StorageManager { Transaction txn = Transaction.currentTxn(); try { txn.start(); - _volsDao.update(existingVolume, Event.Destroy); + _volsDao.update(existingVolume, Volume.Event.Destroy); VolumeVO newVolume = allocateDuplicateVolume(existingVolume); txn.commit(); return newVolume; diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 9631bbd6d0a..a3087dae41d 100644 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -17,7 +17,6 @@ */ package com.cloud.storage.secondary; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; @@ -71,7 +70,7 @@ import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.domain.DomainVO; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.event.EventTypes; import com.cloud.event.EventVO; import com.cloud.event.dao.EventDao; @@ -90,10 +89,10 @@ import com.cloud.info.RunningHostCountInfo; import com.cloud.info.RunningHostInfoAgregator; import com.cloud.info.RunningHostInfoAgregator.ZoneHostInfo; import com.cloud.network.IpAddrAllocator; -import com.cloud.network.NetworkVO; import com.cloud.network.IpAddrAllocator.networkInfo; -import com.cloud.network.Networks.TrafficType; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkVO; +import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -133,19 +132,16 @@ import com.cloud.utils.events.SubscriptionMgr; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExecutionException; import com.cloud.utils.net.NetUtils; -import com.cloud.utils.net.NfsUtils; -import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.State; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineGuru; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.VmManager; -import com.cloud.vm.VirtualMachine.Event; import com.cloud.vm.VirtualMachineManager; import com.cloud.vm.VirtualMachineName; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VmManager; import com.cloud.vm.dao.SecondaryStorageVmDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; @@ -361,7 +357,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } } // to ensure atomic state transition to Starting state - if (!_secStorageVmDao.updateIf(secStorageVm, Event.StartRequested, routingHost.getId())) { + if (!_secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.StartRequested, routingHost.getId())) { if (s_logger.isDebugEnabled()) { SecondaryStorageVmVO temp = _secStorageVmDao.findById(secStorageVmId); s_logger.debug("Unable to start secondary storage vm " @@ -396,7 +392,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V secStorageVm.setPrivateIpAddress(privateIpAddress); String guestIpAddress = _dcDao.allocateLinkLocalIpAddress(secStorageVm.getDataCenterId(), routingHost.getPodId(), secStorageVm.getId(), null); secStorageVm.setGuestIpAddress(guestIpAddress); - _secStorageVmDao.updateIf(secStorageVm, Event.OperationRetry, routingHost.getId()); + _secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.OperationRetry, routingHost.getId()); secStorageVm = _secStorageVmDao.findById(secStorageVm.getId()); List vols = _storageMgr.prepare(secStorageVm, routingHost); @@ -509,7 +505,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V "Couldn't find a routingHost to run secondary storage vm"); } - _secStorageVmDao.updateIf(secStorageVm, Event.OperationSucceeded, routingHost.getId()); + _secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.OperationSucceeded, routingHost.getId()); if (s_logger.isDebugEnabled()) { s_logger.debug("Secondary storage vm is now started, vm id : " + secStorageVm.getId()); } @@ -549,7 +545,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V secStorageVm.setPrivateIpAddress(null); freePrivateIpAddress(privateIpAddress, secStorageVm.getDataCenterId(), secStorageVm.getId()); } - _secStorageVmDao.updateIf(secStorageVm, Event.OperationFailed, null); + _secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.OperationFailed, null); txn.commit(); } catch (Exception e) { s_logger.error("Caught exception during error recovery"); @@ -890,7 +886,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } // kick the state machine - _secStorageVmDao.updateIf(secStorageVm, Event.OperationSucceeded, null); + _secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.OperationSucceeded, null); return secStorageVm; } catch (StorageUnavailableException e) { s_logger.error("Unable to alloc storage for secondary storage vm: ", e); @@ -1507,16 +1503,16 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V @Override public void completeStartCommand(SecondaryStorageVmVO vm) { - _secStorageVmDao.updateIf(vm, Event.AgentReportRunning, vm.getHostId()); + _secStorageVmDao.updateIf(vm, VirtualMachine.Event.AgentReportRunning, vm.getHostId()); } @Override public void completeStopCommand(SecondaryStorageVmVO vm) { - completeStopCommand(vm, Event.AgentReportStopped); + completeStopCommand(vm, VirtualMachine.Event.AgentReportStopped); } @DB - protected void completeStopCommand(SecondaryStorageVmVO secStorageVm, Event ev) { + protected void completeStopCommand(SecondaryStorageVmVO secStorageVm, VirtualMachine.Event ev) { Transaction txn = Transaction.currentTxn(); try { txn.start(); @@ -1686,7 +1682,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V s_logger.debug("Destroying secondary storage vm vm " + vmId); } - if (!_secStorageVmDao.updateIf(vm, Event.DestroyRequested, null)) { + if (!_secStorageVmDao.updateIf(vm, VirtualMachine.Event.DestroyRequested, null)) { String msg = "Unable to destroy the vm because it is not in the correct state: " + vmId; s_logger.debug(msg); saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_DESTROY, msg, startEventId); @@ -1767,7 +1763,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V @Override public boolean stop(SecondaryStorageVmVO secStorageVm, long startEventId) throws AgentUnavailableException { - if (!_secStorageVmDao.updateIf(secStorageVm, Event.StopRequested, secStorageVm.getHostId())) { + if (!_secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.StopRequested, secStorageVm.getHostId())) { String msg = "Unable to stop secondary storage vm: " + secStorageVm.toString(); s_logger.debug(msg); saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_STOP, msg, startEventId); @@ -1794,7 +1790,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V saveFailedEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_STOP, msg, startEventId); return false; } - completeStopCommand(secStorageVm, Event.OperationSucceeded); + completeStopCommand(secStorageVm, VirtualMachine.Event.OperationSucceeded); SubscriptionMgr.getInstance().notifySubscribers( SecStorageVmAlertEventArgs.ALERT_SUBJECT, this, @@ -1839,7 +1835,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V public boolean migrate(SecondaryStorageVmVO secStorageVm, HostVO host) { HostVO fromHost = _hostDao.findById(secStorageVm.getId()); - if (!_secStorageVmDao.updateIf(secStorageVm, Event.MigrationRequested, secStorageVm.getHostId())) { + if (!_secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.MigrationRequested, secStorageVm.getHostId())) { s_logger.debug("State for " + secStorageVm.toString() + " has changed so migration can not take place."); return false; } @@ -1862,18 +1858,18 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer) _agentMgr.send(host.getId(), cvm); if (!answer.getResult()) { s_logger.debug("Unable to complete migration for " + secStorageVm.getId()); - _secStorageVmDao.updateIf(secStorageVm, Event.AgentReportStopped, null); + _secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.AgentReportStopped, null); return false; } State state = answer.getState(); if (state == State.Stopped) { s_logger.warn("Unable to complete migration as we can not detect it on " + host.getId()); - _secStorageVmDao.updateIf(secStorageVm, Event.AgentReportStopped, null); + _secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.AgentReportStopped, null); return false; } - _secStorageVmDao.updateIf(secStorageVm, Event.OperationSucceeded, host.getId()); + _secStorageVmDao.updateIf(secStorageVm, VirtualMachine.Event.OperationSucceeded, host.getId()); return true; } @@ -1967,7 +1963,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription(description); event.setStartId(startEventId); event = _eventDao.persist(event); @@ -1981,7 +1977,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V event.setUserId(userId); event.setAccountId(accountId); event.setType(type); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); event.setLevel(EventVO.LEVEL_ERROR); event.setDescription(description); event.setStartId(startEventId); diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManager.java b/server/src/com/cloud/storage/snapshot/SnapshotManager.java index 7f8a7b67500..e3353074b56 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManager.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManager.java @@ -19,28 +19,18 @@ package com.cloud.storage.snapshot; import java.util.List; -import com.cloud.api.commands.CreateSnapshotCmd; -import com.cloud.api.commands.CreateSnapshotInternalCmd; -import com.cloud.api.commands.CreateSnapshotPolicyCmd; -import com.cloud.api.commands.DeleteSnapshotCmd; -import com.cloud.api.commands.DeleteSnapshotPoliciesCmd; -import com.cloud.api.commands.ListRecurringSnapshotScheduleCmd; -import com.cloud.api.commands.ListSnapshotPoliciesCmd; -import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.storage.SnapshotPolicyVO; -import com.cloud.storage.SnapshotScheduleVO; import com.cloud.storage.SnapshotVO; -import com.cloud.storage.VolumeVO; import com.cloud.storage.Storage.ImageFormat; -import com.cloud.utils.component.Manager; +import com.cloud.storage.VolumeVO; /** * * SnapshotManager contains all of the code to work with volume snapshots. * */ -public interface SnapshotManager extends Manager { +public interface SnapshotManager { public static final int HOURLYMAX = 8; public static final int DAILYMAX = 8; @@ -55,21 +45,6 @@ public interface SnapshotManager extends Manager { */ SnapshotVO createSnapshotImpl(Long volumeId, Long policyId, Long startEventId) throws ResourceAllocationException; - /** - * Create a snapshot of a volume - * @param cmd the API command wrapping the parameters for creating the snapshot (mainly volumeId) - * @return the Snapshot that was created - */ - SnapshotVO createSnapshot(CreateSnapshotCmd cmd) throws InvalidParameterValueException, ResourceAllocationException; - - /** - * An internal method for creating recurring snapshots. The command is not exposed through the API but is used to hook into the async framework. - * @param cmd the command specifying volumeId and policyId - * @return the created snapshot - * @throws ResourceAllocationException - */ - SnapshotVO createSnapshotInternal(CreateSnapshotInternalCmd cmd) throws ResourceAllocationException; - /** * After successfully creating a snapshot of a volume, copy the snapshot to the secondary storage for * 1) reliability @@ -97,21 +72,6 @@ public interface SnapshotManager extends Manager { */ boolean destroySnapshot(long userId, long snapshotId, long policyId); - /** - * Delete specified snapshot from the specified. - * If no other policies are assigned it calls destroy snapshot. - * This will be used for manual snapshots too. - */ - boolean deleteSnapshot(DeleteSnapshotCmd cmd); - - /** - * Creates a policy with specified schedule. maxSnaps specifies the number of most recent snapshots that are to be retained. - * If the number of snapshots go beyond maxSnaps the oldest snapshot is deleted - * @param cmd the command that - * @return the newly created snapshot policy if success, null otherwise - */ - SnapshotPolicyVO createPolicy(CreateSnapshotPolicyCmd cmd); - /** * Deletes snapshot scheduling policy. Delete will fail if this policy is assigned to one or more volumes */ @@ -128,13 +88,6 @@ public interface SnapshotManager extends Manager { */ List listPoliciesforVolume(long volumeId); - /** - * list all snapshot policies assigned to the specified volume - * @param cmd the command that specifies the volume criteria - * @return list of snapshot policies - */ - List listPoliciesforVolume(ListSnapshotPoliciesCmd cmd); - /** * List all policies to which a specified snapshot belongs. For ex: A snapshot * may belong to a hourly snapshot and a daily snapshot run at the same time @@ -148,13 +101,6 @@ public interface SnapshotManager extends Manager { */ List listSnapsforVolume(long volumeId); - /** - * Get the recurring snapshots scheduled for this volume currently along with the time at which they are scheduled - * @param cmd the command wrapping the volumeId (volume for which the snapshots are required) and policyId (to show snapshots for only this policy). - * @return The list of snapshot schedules. - */ - public List findRecurringSnapshotSchedule(ListRecurringSnapshotScheduleCmd cmd); - SnapshotPolicyVO getPolicyForVolumeByInterval(long volumeId, short interval); void deletePoliciesForVolume(Long volumeId); @@ -170,7 +116,6 @@ public interface SnapshotManager extends Manager { void validateSnapshot(Long userId, SnapshotVO snapshot); - boolean deleteSnapshotPolicies(DeleteSnapshotPoliciesCmd cmd); ImageFormat getImageFormat(Long volumeId); SnapshotPolicyVO getPolicyForVolume(long volumeId); diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 3eed1ee7401..63a889a69ae 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -63,7 +63,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.host.dao.DetailsDao; import com.cloud.host.dao.HostDao; import com.cloud.storage.Snapshot; -import com.cloud.storage.Snapshot.SnapshotType; +import com.cloud.storage.Snapshot.Type; import com.cloud.storage.Snapshot.Status; import com.cloud.storage.SnapshotPolicyVO; import com.cloud.storage.SnapshotScheduleVO; @@ -93,6 +93,7 @@ import com.cloud.utils.DateUtil.IntervalType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.Transaction; @@ -100,8 +101,8 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.UserVmDao; -@Local(value={SnapshotManager.class}) -public class SnapshotManagerImpl implements SnapshotManager { +@Local(value={SnapshotManager.class, SnapshotService.class}) +public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Manager { private static final Logger s_logger = Logger.getLogger(SnapshotManagerImpl.class); @Inject protected HostDao _hostDao; @@ -219,7 +220,7 @@ public class SnapshotManagerImpl implements SnapshotManager { // Create the Snapshot object and save it so we can return it to the // user - SnapshotType snapshotType = SnapshotVO.getSnapshotType(policyId); + Type snapshotType = SnapshotVO.getSnapshotType(policyId); SnapshotVO snapshotVO = new SnapshotVO(volume.getAccountId(), volume.getId(), null, snapshotName, (short) snapshotType.ordinal(), snapshotType.name()); snapshotVO = _snapshotDao.persist(snapshotVO); @@ -554,7 +555,7 @@ public class SnapshotManagerImpl implements SnapshotManager { private void postCreateRecurringSnapshotForPolicy(long userId, long volumeId, long snapshotId, long policyId) { //Use count query - List snaps = listSnapsforVolumeType(volumeId, SnapshotType.RECURRING.name()); + List snaps = listSnapsforVolumeType(volumeId, Type.RECURRING.name()); SnapshotPolicyVO policy = _snapshotPolicyDao.findById(policyId); while(snaps.size() > policy.getMaxSnaps() && snaps.size() > 1) { @@ -613,7 +614,7 @@ public class SnapshotManagerImpl implements SnapshotManager { checkAccountPermissions(snapshotOwner.getId(), snapshotOwner.getDomainId(), "snapshot", snapshotId); boolean status = true; - if (SnapshotType.MANUAL.ordinal() == snapshotCheck.getSnapshotType()) { + if (Type.MANUAL.ordinal() == snapshotCheck.getSnapshotType()) { status = deleteSnapshotInternal(snapshotId, Snapshot.MANUAL_POLICY_ID, userId); if (!status) { diff --git a/server/src/com/cloud/template/TemplateManager.java b/server/src/com/cloud/template/TemplateManager.java index 345851556d6..e2467d3bdb7 100755 --- a/server/src/com/cloud/template/TemplateManager.java +++ b/server/src/com/cloud/template/TemplateManager.java @@ -18,23 +18,10 @@ package com.cloud.template; import java.net.URI; -import java.net.URISyntaxException; import java.util.List; -import com.cloud.api.commands.AttachIsoCmd; -import com.cloud.api.commands.CopyIsoCmd; -import com.cloud.api.commands.CopyTemplateCmd; -import com.cloud.api.commands.DeleteIsoCmd; -import com.cloud.api.commands.DeleteTemplateCmd; -import com.cloud.api.commands.DetachIsoCmd; -import com.cloud.api.commands.ExtractIsoCmd; -import com.cloud.api.commands.ExtractTemplateCmd; -import com.cloud.api.commands.RegisterIsoCmd; -import com.cloud.api.commands.RegisterTemplateCmd; import com.cloud.exception.InternalErrorException; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.PermissionDeniedException; -import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.StorageUnavailableException; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; @@ -43,7 +30,6 @@ import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStoragePoolVO; import com.cloud.storage.VMTemplateVO; -import com.cloud.utils.component.Manager; /** * TemplateManager manages the templates stored @@ -51,33 +37,8 @@ import com.cloud.utils.component.Manager; * creating private/public templates. It is * also responsible for downloading. */ -public interface TemplateManager extends Manager { +public interface TemplateManager { - /** - * Creates a Template - * - * @param userId the Id of the user - * @param accountId of the template to be created. - * @param zoneId (optional) the zone to download the template to - * @param name - user specified name for the template - * @param displayText user readable name. - * @param isPublic is this a public template? - * @param featured is this template featured? - * @param format which image format is the template. - * @param fs what is the file system on the template - * @param url url to download the template from. - * @param chksum chksum to compare it to. - * @param requiresHvm does this template require hvm? - * @param bits is the os contained on the template 32 bit? - * @param enablePassword Does the template support password change. - * @param guestOSId OS that is on the template - * @param bootable true if this template will represent a bootable ISO - * @return the template created. - */ -// Long create(long userId, Long zoneId, String name, String displayText, boolean isPublic, boolean featured, ImageFormat format, FileSystem fs, URI url, String chksum, boolean requiresHvm, int bits, boolean enablePassword, long guestOSId, boolean bootable); - VMTemplateVO registerTemplate(RegisterTemplateCmd cmd) throws URISyntaxException, ResourceAllocationException; - VMTemplateVO registerIso(RegisterIsoCmd cmd) throws IllegalArgumentException, ResourceAllocationException; - /** * Creates a Template * @@ -145,8 +106,6 @@ public interface TemplateManager extends Manager { * @throws InvalidParameterValueException */ boolean copy(long userId, long templateId, long sourceZoneId, long destZoneId, long startEventId) throws StorageUnavailableException; - VMTemplateVO copyIso(CopyIsoCmd cmd) throws StorageUnavailableException; - VMTemplateVO copyTemplate(CopyTemplateCmd cmd) throws StorageUnavailableException; /** * Deletes a template from secondary storage servers @@ -157,10 +116,6 @@ public interface TemplateManager extends Manager { */ boolean delete(long userId, long templateId, Long zoneId); - boolean detachIso(DetachIsoCmd cmd); - - boolean attachIso(AttachIsoCmd cmd); - /** * Lists templates in the specified storage pool that are not being used by any VM. * @param pool @@ -176,33 +131,4 @@ public interface TemplateManager extends Manager { boolean templateIsDeleteable(VMTemplateHostVO templateHostRef); - /** - * Deletes a template - * @param cmd - the command specifying templateId - */ - boolean deleteTemplate(DeleteTemplateCmd cmd); - - /** - * Deletes a template - * @param cmd - the command specifying isoId - * @return true if deletion is successful, false otherwise - * @throws InvalidParameterValueException, InternalErrorException, PermissionDeniedException - */ - boolean deleteIso(DeleteIsoCmd cmd); - - /** - * Extracts an ISO - * @param cmd - the command specifying the mode and id of the ISO - * @return extractId. - * @throws InvalidParameterValueException, InternalErrorException, PermissionDeniedException - */ - Long extract(ExtractIsoCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, InternalErrorException; - - /** - * Extracts a Template - * @param cmd - the command specifying the mode and id of the template - * @return extractId. - * @throws InvalidParameterValueException, InternalErrorException, PermissionDeniedException - */ - Long extract(ExtractTemplateCmd cmd) throws InvalidParameterValueException, PermissionDeniedException, InternalErrorException; } diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 7ff83753e08..e30b855aec0 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -57,7 +57,7 @@ import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.domain.dao.DomainDao; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; @@ -112,6 +112,7 @@ import com.cloud.utils.EnumUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; @@ -125,8 +126,8 @@ import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -@Local(value=TemplateManager.class) -public class TemplateManagerImpl implements TemplateManager { +@Local(value={TemplateManager.class, TemplateService.class}) +public class TemplateManagerImpl implements TemplateManager, Manager, TemplateService { private final static Logger s_logger = Logger.getLogger(TemplateManagerImpl.class); String _name; @Inject VMTemplateDao _tmpltDao; @@ -153,12 +154,13 @@ public class TemplateManagerImpl implements TemplateManager { @Inject UploadDao _uploadDao; long _routerTemplateId = -1; @Inject StorageManager _storageMgr; + @Inject AsyncJobManager _asyncMgr; @Inject UserVmManager _vmMgr; @Inject ConfigurationDao _configDao; protected SearchBuilder HostTemplateStatesSearch; @Override - public VMTemplateVO registerIso(RegisterIsoCmd cmd) throws ResourceAllocationException{ + public VirtualMachineTemplate registerIso(RegisterIsoCmd cmd) throws ResourceAllocationException{ Account ctxAccount = UserContext.current().getAccount(); Long userId = UserContext.current().getUserId(); String name = cmd.getIsoName(); @@ -250,7 +252,7 @@ public class TemplateManagerImpl implements TemplateManager { } @Override - public VMTemplateVO registerTemplate(RegisterTemplateCmd cmd) throws URISyntaxException, ResourceAllocationException{ + public VirtualMachineTemplate registerTemplate(RegisterTemplateCmd cmd) throws URISyntaxException, ResourceAllocationException{ Account ctxAccount = UserContext.current().getAccount(); Long userId = UserContext.current().getUserId(); @@ -459,7 +461,8 @@ public class TemplateManagerImpl implements TemplateManager { String mode = cmd.getMode(); Long eventId = cmd.getStartEventId(); - return extract(account, templateId, url, zoneId, mode, eventId, true, cmd.getJob(), cmd.getAsyncJobManager()); + // FIXME: async job needs fixing + return extract(account, templateId, url, zoneId, mode, eventId, true, null, _asyncMgr); } @Override @@ -471,7 +474,8 @@ public class TemplateManagerImpl implements TemplateManager { String mode = cmd.getMode(); Long eventId = cmd.getStartEventId(); - return extract(account, templateId, url, zoneId, mode, eventId, false, cmd.getJob(), cmd.getAsyncJobManager()); + // FIXME: async job needs fixing + return extract(account, templateId, url, zoneId, mode, eventId, false, null, _asyncMgr); } private Long extract(Account account, Long templateId, String url, Long zoneId, String mode, Long eventId, boolean isISO, AsyncJobVO job, AsyncJobManager mgr) { @@ -739,7 +743,7 @@ public class TemplateManagerImpl implements TemplateManager { event.setUserId(userId); event.setAccountId(vmTemplate.getAccountId()); event.setType(EventTypes.EVENT_TEMPLATE_COPY); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription("Copying template with Id: "+templateId); event.setStartId(startEventId); event = _eventDao.persist(event); @@ -808,7 +812,7 @@ public class TemplateManagerImpl implements TemplateManager { } @Override - public VMTemplateVO copyIso(CopyIsoCmd cmd) throws StorageUnavailableException { + public VirtualMachineTemplate copyIso(CopyIsoCmd cmd) throws StorageUnavailableException { Long isoId = cmd.getId(); Long userId = UserContext.current().getUserId(); Long sourceZoneId = cmd.getSourceZoneId(); @@ -842,7 +846,7 @@ public class TemplateManagerImpl implements TemplateManager { @Override - public VMTemplateVO copyTemplate(CopyTemplateCmd cmd) throws StorageUnavailableException { + public VirtualMachineTemplate copyTemplate(CopyTemplateCmd cmd) throws StorageUnavailableException { Long templateId = cmd.getId(); Long userId = UserContext.current().getUserId(); Long sourceZoneId = cmd.getSourceZoneId(); @@ -1240,7 +1244,7 @@ public class TemplateManagerImpl implements TemplateManager { if (success) { if (attach) { - vm.setIsoId(iso.getId().longValue()); + vm.setIsoId(iso.getId()); } else { vm.setIsoId(null); } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 56c295a9b5e..cbb13fc61d4 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -108,7 +108,7 @@ import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.domain.Domain; import com.cloud.domain.dao.DomainDao; -import com.cloud.event.EventState; +import com.cloud.event.Event; import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; @@ -132,12 +132,13 @@ import com.cloud.network.FirewallRuleVO; import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddrAllocator; import com.cloud.network.LoadBalancerVMMapVO; -import com.cloud.network.NetworkVO; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkVO; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerVMMapDao; +import com.cloud.network.router.VirtualRouter.Role; import com.cloud.network.security.NetworkGroupManager; import com.cloud.network.security.NetworkGroupVO; import com.cloud.offering.NetworkOffering; @@ -192,8 +193,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExecutionException; import com.cloud.utils.net.NetUtils; -import com.cloud.vm.DomainRouter.Role; -import com.cloud.vm.VirtualMachine.Event; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.InstanceGroupDao; @@ -429,7 +428,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setType(EventTypes.EVENT_VOLUME_ATTACH); event.setUserId(1L); event.setAccountId(volume.getAccountId()); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setStartId(startEventId); event.setDescription("Attaching volume: "+volumeId+" to Vm: "+vmId); _eventDao.persist(event); @@ -557,7 +556,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setAccountId(volume.getAccountId()); event.setUserId(1L); event.setType(EventTypes.EVENT_VOLUME_ATTACH); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); event.setStartId(startEventId); if (!sendCommand || (answer != null && answer.getResult())) { // Mark the volume as attached @@ -687,7 +686,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setAccountId(volume.getAccountId()); event.setUserId(1L); event.setType(EventTypes.EVENT_VOLUME_DETACH); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); event.setStartId(eventId); if (!sendCommand || (answer != null && answer.getResult())) { // Mark the volume as detached @@ -818,7 +817,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setType(EventTypes.EVENT_VM_START); event.setUserId(userId); event.setAccountId(vm.getAccountId()); - event.setState(EventState.Started); + event.setState(Event.State.Started); event.setDescription("Starting Vm with Id: "+vmId); event.setStartId(startEventId); event = _eventDao.persist(event); @@ -845,7 +844,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setUserId(userId); event.setAccountId(vm.getAccountId()); event.setParameters(eventParams); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); event.setStartId(startEventId); if (state.isTransitional()) { String description = "Concurrent operations on the vm " + vm.getId() + " - " + vm.getHostName() + "; state = " + state.toString(); @@ -907,7 +906,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM return null; } - if (!_vmDao.updateIf(vm, Event.StartRequested, host.getId())) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.StartRequested, host.getId())) { String description = "Unable to start VM " + vm.toString() + " because the state is not correct."; s_logger.error(description); event.setDescription(description); @@ -927,7 +926,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM router = _networkMgr.addVirtualMachineToGuestNetwork(vm, password, startEventId); if (router == null) { s_logger.error("Unable to add vm " + vm.getId() + " - " + vm.getHostName()); - _vmDao.updateIf(vm, Event.OperationFailed, null); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationFailed, null); if(!vm.getHostName().equals(vm.getDisplayName())) event.setDescription("Unable to start VM: " + vm.getHostName()+"("+vm.getDisplayName()+")" + "; Unable to add VM to guest network"); else @@ -994,7 +993,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM if( retry < _retry ) { - if (!_vmDao.updateIf(vm, Event.OperationRetry, host.getId())) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.OperationRetry, host.getId())) { String description = "Unable to start VM " + vm.toString() + " because the state is not correct."; s_logger.debug(description); event.setDescription(description); @@ -1082,7 +1081,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM throw new ExecutionException("Unable to start VM: " + vm.getHostName()+ " Reason: "+answer.getDetails()); } - if (!_vmDao.updateIf(vm, Event.OperationSucceeded, host.getId())) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.OperationSucceeded, host.getId())) { if(!vm.getHostName().equals(vm.getDisplayName())) event.setDescription("unable to start VM: " + vm.getHostName()+"("+vm.getDisplayName()+")"); else @@ -1113,7 +1112,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM vm.setVnet(null); txn.start(); - if (_vmDao.updateIf(vm, Event.OperationFailed, null)) { + if (_vmDao.updateIf(vm, VirtualMachine.Event.OperationFailed, null)) { txn.commit(); } } @@ -1225,7 +1224,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM return response; } - if (!_vmDao.updateIf(vm, Event.StopRequested, vm.getHostId())) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.StopRequested, vm.getHostId())) { resultDescription = "VM is not in a state to stop"; executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), AsyncJobResult.STATUS_FAILED, 0, resultDescription); @@ -1265,7 +1264,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM resultDescription = "Agent is not available"; executor.getAsyncJobMgr().completeAsyncJob(executor.getJob().getId(), AsyncJobResult.STATUS_FAILED, 0, resultDescription); - _vmDao.updateIf(vm, Event.OperationFailed, vm.getHostId()); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationFailed, vm.getHostId()); response = new OperationResponse(OperationResponse.STATUS_FAILED, resultDescription); return response; @@ -1584,7 +1583,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setUserId(userId); event.setAccountId(accountId); event.setStartId(startEventId); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); event.setType(EventTypes.EVENT_VM_CREATE); event.setParameters(eventParams); @@ -1610,7 +1609,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM vm = _vmDao.persist(vm); } else { vm.setPodId(pod.first().getId()); - _vmDao.updateIf(vm, Event.OperationRetry, null); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationRetry, null); } String ipAddressStr = acquireGuestIpAddress(dataCenterId, accountId, vm); @@ -1661,7 +1660,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM _eventDao.persist(event); - _vmDao.updateIf(vm, Event.OperationSucceeded, null); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationSucceeded, null); if (s_logger.isDebugEnabled()) { s_logger.debug("vm created " + vmId); } @@ -1818,7 +1817,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM _accountMgr.incrementResourceCount(account.getId(), ResourceType.user_vm); - if (!_vmDao.updateIf(vm, Event.RecoveryRequested, null)) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.RecoveryRequested, null)) { s_logger.debug("Unable to recover the vm because it is not in the correct state: " + vmId); throw new InvalidParameterValueException("Unable to recover the vm because it is not in the correct state: " + vmId); } @@ -1951,19 +1950,19 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM @Override public void completeStartCommand(UserVmVO vm) { - _vmDao.updateIf(vm, Event.AgentReportRunning, vm.getHostId()); + _vmDao.updateIf(vm, VirtualMachine.Event.AgentReportRunning, vm.getHostId()); _networkGroupMgr.handleVmStateTransition(vm, State.Running); } @Override public void completeStopCommand(UserVmVO instance) { - completeStopCommand(1L, instance, Event.AgentReportStopped, 0); + completeStopCommand(1L, instance, VirtualMachine.Event.AgentReportStopped, 0); } @Override @DB - public void completeStopCommand(long userId, UserVmVO vm, Event e, long startEventId) { + public void completeStopCommand(long userId, UserVmVO vm, VirtualMachine.Event e, long startEventId) { Transaction txn = Transaction.currentTxn(); try { String vnet = vm.getVnet(); @@ -1996,7 +1995,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setUserId(userId); event.setAccountId(vm.getAccountId()); event.setType(EventTypes.EVENT_VM_STOP); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); event.setStartId(startEventId); event.setParameters("id="+vm.getId() + "\n" + "vmName=" + vm.getHostName() + "\nsoId=" + vm.getServiceOfferingId() + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId()); if(!vm.getHostName().equals(vm.getDisplayName())) @@ -2051,7 +2050,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM return true; } - if (!_vmDao.updateIf(vm, Event.StopRequested, vm.getHostId())) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.StopRequested, vm.getHostId())) { s_logger.debug("VM is not in a state to stop: " + vm.getState().toString()); return false; } @@ -2085,7 +2084,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM } if (stopped) { - completeStopCommand(userId, vm, Event.OperationSucceeded, 0); + completeStopCommand(userId, vm, VirtualMachine.Event.OperationSucceeded, 0); } else { if(!vm.getHostName().equals(vm.getDisplayName())) @@ -2094,7 +2093,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setDescription("failed to stop VM instance : " + vm.getHostName()); event.setLevel(EventVO.LEVEL_ERROR); _eventDao.persist(event); - _vmDao.updateIf(vm, Event.OperationFailed, vm.getHostId()); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationFailed, vm.getHostId()); s_logger.error("Unable to stop vm " + vm.getHostName()); } @@ -2173,7 +2172,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM public boolean migrate(UserVmVO vm, HostVO host) throws AgentUnavailableException, OperationTimedoutException { HostVO fromHost = _hostDao.findById(vm.getHostId()); - if (!_vmDao.updateIf(vm, Event.MigrationRequested, vm.getHostId())) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.MigrationRequested, vm.getHostId())) { s_logger.debug("State for " + vm.toString() + " has changed so migration can not take place."); return false; } @@ -2205,7 +2204,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM releaseGuestIpAddress(vm); vm.setGuestNetmask(null); vm.setGuestMacAddress(null); - if (!_vmDao.updateIf(vm, Event.ExpungeOperation, null)) { + if (!_vmDao.updateIf(vm, VirtualMachine.Event.ExpungeOperation, null)) { s_logger.info("vm " + vmId + " is skipped because it is no longer in Destroyed state"); continue; } @@ -2268,14 +2267,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM CheckVirtualMachineAnswer answer = (CheckVirtualMachineAnswer)_agentMgr.send(host.getId(), cvm); if (!answer.getResult()) { s_logger.debug("Unable to complete migration for " + vm.toString()); - _vmDao.updateIf(vm, Event.AgentReportStopped, null); + _vmDao.updateIf(vm, VirtualMachine.Event.AgentReportStopped, null); return false; } State state = answer.getState(); if (state == State.Stopped) { s_logger.warn("Unable to complete migration as we can not detect it on " + host.toString()); - _vmDao.updateIf(vm, Event.AgentReportStopped, null); + _vmDao.updateIf(vm, VirtualMachine.Event.AgentReportStopped, null); return false; } @@ -2286,7 +2285,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM Transaction txn = Transaction.currentTxn(); try { txn.start(); - _vmDao.updateIf(vm, Event.OperationSucceeded, host.getId()); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationSucceeded, host.getId()); txn.commit(); _networkGroupMgr.handleVmStateTransition(vm, State.Running); return true; @@ -2875,7 +2874,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setAccountId(accountId); event.setType(EventTypes.EVENT_VM_CREATE); event.setStartId(startEventId); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); String diskOfferingIdentifier = (diskOffering != null) ? String.valueOf(diskOffering.getId()) : "-1"; String eventParams = "id=" + vm.getId() + "\nvmName=" + vm.getHostName() + "\nsoId=" + vm.getServiceOfferingId() + "\ndoId=" + diskOfferingIdentifier + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId(); event.setParameters(eventParams); @@ -2885,7 +2884,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setDescription("successfully created VM instance : " + vm.getHostName()); _eventDao.persist(event); - _vmDao.updateIf(vm, Event.OperationSucceeded, null); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationSucceeded, null); if (s_logger.isDebugEnabled()) { s_logger.debug("vm created " + vmId); } @@ -3029,7 +3028,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setAccountId(accountId); event.setType(EventTypes.EVENT_VM_CREATE); event.setStartId(startEventId); - event.setState(EventState.Completed); + event.setState(Event.State.Completed); String diskOfferingIdentifier = (diskOffering != null) ? String.valueOf(diskOffering.getId()) : "-1"; String eventParams = "id=" + vm.getId() + "\nvmName=" + vm.getHostName() + "\nsoId=" + vm.getServiceOfferingId() + "\ndoId=" + diskOfferingIdentifier + "\ntId=" + vm.getTemplateId() + "\ndcId=" + vm.getDataCenterId(); event.setParameters(eventParams); @@ -3039,7 +3038,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, VirtualM event.setDescription("successfully created VM instance : " + vm.getHostName()); _eventDao.persist(event); - _vmDao.updateIf(vm, Event.OperationSucceeded, null); + _vmDao.updateIf(vm, VirtualMachine.Event.OperationSucceeded, null); if (s_logger.isDebugEnabled()) { s_logger.debug("vm created " + vmId); } diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java index 7df68b10a55..dfa6d72c78a 100755 --- a/utils/src/com/cloud/utils/db/GenericDaoBase.java +++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java @@ -106,7 +106,7 @@ public abstract class GenericDaoBase implements Gene protected final static TimeZone s_gmtTimeZone = TimeZone.getTimeZone("GMT"); - protected final static Map, GenericDao> s_daoMaps = new HashMap, GenericDao>(71); + protected final static Map, GenericDao> s_daoMaps = new HashMap, GenericDao>(71); protected Class _entityBeanType; protected String _table; @@ -161,8 +161,9 @@ public abstract class GenericDaoBase implements Gene protected String _name; - protected static GenericDao getDao(Class entityType) { - GenericDao dao = s_daoMaps.get(entityType); + public static GenericDao getDao(Class entityType) { + @SuppressWarnings("unchecked") + GenericDao dao = (GenericDao)s_daoMaps.get(entityType); assert dao != null : "Unable to find DAO for " + entityType + ". Are you sure you waited for the DAO to be initialized before asking for it?"; return dao; } @@ -188,6 +189,12 @@ public abstract class GenericDaoBase implements Gene } s_daoMaps.put(_entityBeanType, this); + Class[] interphaces = _entityBeanType.getInterfaces(); + if (interphaces != null) { + for (Class interphace : interphaces) { + s_daoMaps.put(interphace, this); + } + } _table = DbUtil.getTableName(_entityBeanType); final SqlGenerator generator = new SqlGenerator(_entityBeanType);