diff --git a/core/src/com/cloud/server/ManagementServer.java b/core/src/com/cloud/server/ManagementServer.java index dffeee100a6..4bb7758b6e6 100644 --- a/core/src/com/cloud/server/ManagementServer.java +++ b/core/src/com/cloud/server/ManagementServer.java @@ -983,14 +983,6 @@ public interface ManagementServer { */ ServiceOfferingVO updateServiceOffering(long userId, long serviceOfferingId, String name, String displayText, Boolean offerHA, Boolean useVirtualNetwork, String tags); - /** - * Deletes a service offering - * @param userId - * @param serviceOfferingId - * @return success/failure - */ - boolean deleteServiceOffering(long userId, long serviceOfferingId); - /** * Adds a new pod to the database * @param userId @@ -1825,24 +1817,7 @@ public interface ManagementServer { * @return a list of disk offerings that match the given criteria */ List searchForDiskOfferings(Criteria c); - - /** - * Delete a disk offering - * @param id id of the disk offering to delete - * @return true if deleted, false otherwise - */ - boolean deleteDiskOffering(long id); - - /** - * Update a disk offering - * @param userId - * @param disk offering id - * @param name the name of the disk offering to be updated - * @param description a string description of the disk offering to be updated - * @param tags for the disk offering. if null, no change will be made. if empty string, all tags will be removed. - * @return updated disk offering - */ - DiskOfferingVO updateDiskOffering(long userId, long diskOfferingId, String name, String description, String tags); + /** * diff --git a/server/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java b/server/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java index b881358bb09..c40ff24bc8e 100644 --- a/server/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java +++ b/server/src/com/cloud/api/commands/DeleteDiskOfferingCmd.java @@ -16,29 +16,20 @@ * */ -package com.cloud.api.commands; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +package com.cloud.api.commands; import org.apache.log4j.Logger; import com.cloud.api.BaseCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.storage.DiskOfferingVO; -import com.cloud.utils.Pair; - +import com.cloud.api.BaseCmd.Manager; + +@Implementation(method="deleteDiskOffering", manager=Manager.ConfigManager) public class DeleteDiskOfferingCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteDiskOfferingCmd.class.getName()); private static final String s_name = "deletediskofferingresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.TRUE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -65,24 +56,11 @@ public class DeleteDiskOfferingCmd extends BaseCmd { public String getName() { return s_name; } - public List> getProperties() { - return s_properties; - } - - @Override - public List> execute(Map params) { - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - - //verify input parameters - DiskOfferingVO disk = getManagementServer().findDiskOfferingById(id); - if (disk == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "unable to find a disk offering with id " + id); - } - - boolean result = getManagementServer().deleteDiskOffering(id); - - List> returnValues = new ArrayList>(); - returnValues.add(new Pair(BaseCmd.Properties.SUCCESS.getName(), Boolean.valueOf(result).toString())); - return returnValues; + + @Override + public String getResponse() { + // There's no specific response for this command, if the command failed an exception would have been thrown. If we are here, then it succeeded. + // Seems like we should return success/true as the response though, so this will probably have to change. + return null; } } diff --git a/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java b/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java index 01ffa45d14f..416bf4da4f8 100644 --- a/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java +++ b/server/src/com/cloud/api/commands/UpdateDiskOfferingCmd.java @@ -16,38 +16,30 @@ * */ -package com.cloud.api.commands; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - +package com.cloud.api.commands; import org.apache.log4j.Logger; + +import java.util.Date; + import com.cloud.api.BaseCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; +import com.cloud.api.BaseCmd.Manager; +import com.cloud.serializer.Param; +import com.cloud.serializer.SerializerHelper; import com.cloud.storage.DiskOfferingVO; -import com.cloud.user.User; -import com.cloud.utils.Pair; - + +@Implementation(method="updateDiskOffering", manager=Manager.ConfigManager) public class UpdateDiskOfferingCmd extends BaseCmd{ public static final Logger s_logger = Logger.getLogger(UpdateDiskOfferingCmd.class.getName()); private static final String s_name = "updatediskofferingresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.DISPLAY_TEXT, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.TRUE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.TAGS, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.USER_ID, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// + @Parameter(name="displaytext", type=CommandType.STRING) private String displayText; @@ -84,43 +76,125 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + private DiskOfferingVO responseObject = null; @Override public String getName() { return s_name; - } - @Override - public List> getProperties() { - return s_properties; - } - - @Override - public List> execute(Map params) { - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - String name = (String)params.get(BaseCmd.Properties.NAME.getName()); - String displayText = (String)params.get(BaseCmd.Properties.DISPLAY_TEXT.getName()); - Long userId = (Long)params.get(BaseCmd.Properties.USER_ID.getName()); - String tags = (String)params.get(BaseCmd.Properties.TAGS.getName()); - - if (userId == null) { - userId = Long.valueOf(User.UID_SYSTEM); + } + + + public String getResponse() { + DiskOfferingResponse response = new DiskOfferingResponse(); + if (responseObject != null) { + response.setId(responseObject.getId()); + response.setCreated(responseObject.getCreated()); + response.setDiskSize(responseObject.getDiskSize()); + response.setDisplayText(responseObject.getDisplayText()); + response.setDomainId(responseObject.getDomainId()); + // FIXME: domain name in the response +// response.setDomain(responseObject.getDomain()); + response.setName(responseObject.getName()); + response.setTags(responseObject.getTags()); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update disk offering"); + } + return SerializerHelper.toSerializedString(responseObject); + } + + public void setResponseObject(DiskOfferingVO diskOffering) { + responseObject = diskOffering; + } + + // helper class for the response object + private class DiskOfferingResponse { + @Param(name="id") + private Long id; + + @Param(name="domainid") + private Long domainId; + + @Param(name="domain") + private String domain; + + @Param(name="name") + private String name; + + @Param(name="displaytext") + private String displayText; + + @Param(name="disksize") + private Long diskSize; + + @Param(name="created") + private Date created; + + @Param(name="tags") + private String tags; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getDomainId() { + return domainId; + } + + public void setDomainId(Long domainId) { + this.domainId = domainId; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDisplayText() { + return displayText; + } + + public void setDisplayText(String displayText) { + this.displayText = displayText; + } + + public Long getDiskSize() { + return diskSize; + } + + public void setDiskSize(Long diskSize) { + this.diskSize = diskSize; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; } - - //Verify input parameters - DiskOfferingVO offering = getManagementServer().findDiskOfferingById(id); - if (offering == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "unable to find disk offering " + id); - } - - try { - getManagementServer().updateDiskOffering(userId, id, name, displayText, tags); - } catch (Exception ex) { - s_logger.error("Exception updating disk offering", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update disk offering " + id + ": internal error."); - } - - List> returnValues = new ArrayList>(); - returnValues.add(new Pair(BaseCmd.Properties.SUCCESS.getName(), Boolean.TRUE)); - return returnValues; } + } diff --git a/server/src/com/cloud/configuration/ConfigurationManager.java b/server/src/com/cloud/configuration/ConfigurationManager.java index ad923e7c15d..8ecef793b85 100644 --- a/server/src/com/cloud/configuration/ConfigurationManager.java +++ b/server/src/com/cloud/configuration/ConfigurationManager.java @@ -20,6 +20,8 @@ package com.cloud.configuration; import java.util.List; import com.cloud.api.commands.CreateDiskOfferingCmd; +import com.cloud.api.commands.DeleteDiskOfferingCmd; +import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.Vlan.VlanType; @@ -81,14 +83,21 @@ public interface ConfigurationManager extends Manager { * @param tags * @return updated disk offering */ - DiskOfferingVO updateDiskOffering(long userId, long diskOfferingId, String name, String description, String tags); + DiskOfferingVO updateDiskOffering(UpdateDiskOfferingCmd cmd); + + /** + * Deletes a disk offering + * @param userId + * @param diskOfferingId + */ + boolean deleteDiskOffering(DeleteDiskOfferingCmd cmd) throws InvalidParameterValueException; /** * Deletes a service offering * @param userId * @param serviceOfferingId */ - boolean deleteServiceOffering(long userId, long serviceOfferingId); + boolean deleteServiceOffering(long userId, long serviceOfferingId) throws InvalidParameterValueException; /** * Creates a new disk offering diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 96422fc9854..c982b1fcb4f 100644 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -32,6 +32,8 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.api.commands.CreateDiskOfferingCmd; +import com.cloud.api.commands.DeleteDiskOfferingCmd; +import com.cloud.api.commands.UpdateDiskOfferingCmd; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.AccountVlanMapVO; import com.cloud.dc.DataCenterVO; @@ -151,6 +153,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager { saveConfigurationEvent(userId, null, EventTypes.EVENT_CONFIGURATION_VALUE_EDIT, "Successfully edited configuration value.", "name=" + name, "value=" + value); } + private String validateConfigurationValue(String name, String value) throws InvalidParameterValueException { if (value == null) { return null; @@ -864,7 +867,37 @@ public class ConfigurationManagerImpl implements ConfigurationManager { } } - public DiskOfferingVO updateDiskOffering(long userId, long diskOfferingId, String name, String displayText, String tags) { + + @Override + public DiskOfferingVO createDiskOffering(CreateDiskOfferingCmd cmd) throws InvalidParameterValueException { + Long domainId = cmd.getDomainId(); + String name = cmd.getOfferingName(); + String description = cmd.getDisplayText(); + int numGibibytes = cmd.getDiskSize().intValue(); + String tags = cmd.getTags(); + + if (domainId == null) { + domainId = Long.valueOf(DomainVO.ROOT_DOMAIN); + } + + if ((numGibibytes != 0) && (numGibibytes < 1)) { + throw new InvalidParameterValueException("Please specify a disk size of at least 1 Gb."); + } else if (numGibibytes > _maxVolumeSizeInGb) { + throw new InvalidParameterValueException("The maximum size for a disk is " + _maxVolumeSizeInGb + " Gb."); + } + + long diskSize = numGibibytes * 1024; + tags = cleanupTags(tags); + DiskOfferingVO newDiskOffering = new DiskOfferingVO(domainId, name, description, diskSize,tags); + return _diskOfferingDao.persist(newDiskOffering); + } + + public DiskOfferingVO updateDiskOffering(UpdateDiskOfferingCmd cmd) { + Long diskOfferingId = cmd.getId(); + String name = cmd.getName(); + String displayText = cmd.getDisplayText(); + String tags = cmd.getTags(); + boolean updateNeeded = (name != null || displayText != null || tags != null); if (!updateNeeded) { return _diskOfferingDao.findById(diskOfferingId); @@ -895,9 +928,31 @@ public class ConfigurationManagerImpl implements ConfigurationManager { } } - public boolean deleteServiceOffering(long userId, long serviceOfferingId) { + + public boolean deleteDiskOffering(DeleteDiskOfferingCmd cmd) throws InvalidParameterValueException{ + Long diskOfferingId = cmd.getId(); + + DiskOfferingVO offering = _diskOfferingDao.findById(diskOfferingId); + + if (offering == null) { + throw new InvalidParameterValueException("Unable to find disk offering by id " + diskOfferingId); + } + + if (_diskOfferingDao.remove(diskOfferingId)) { + return true; + } else { + return false; + } + } + + + public boolean deleteServiceOffering(long userId, long serviceOfferingId) throws InvalidParameterValueException{ ServiceOfferingVO offering = _serviceOfferingDao.findById(serviceOfferingId); + if (offering == null) { + throw new InvalidParameterValueException("Unable to find service offering by id " + serviceOfferingId); + } + if (_serviceOfferingDao.remove(serviceOfferingId)) { saveConfigurationEvent(userId, null, EventTypes.EVENT_SERVICE_OFFERING_EDIT, "Successfully deleted service offering with name: " + offering.getName(), "soId=" + serviceOfferingId, "name=" + offering.getName(), "displayText=" + offering.getDisplayText(), "offerHA=" + offering.getOfferHA(), "useVirtualNetwork=" + (offering.getGuestIpType() == GuestIpType.Virtualized)); @@ -907,29 +962,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager { } } - @Override - public DiskOfferingVO createDiskOffering(CreateDiskOfferingCmd cmd) throws InvalidParameterValueException { - Long domainId = cmd.getDomainId(); - String name = cmd.getOfferingName(); - String description = cmd.getDisplayText(); - int numGibibytes = cmd.getDiskSize().intValue(); - String tags = cmd.getTags(); - if (domainId == null) { - domainId = Long.valueOf(DomainVO.ROOT_DOMAIN); - } - - if ((numGibibytes != 0) && (numGibibytes < 1)) { - throw new InvalidParameterValueException("Please specify a disk size of at least 1 Gb."); - } else if (numGibibytes > _maxVolumeSizeInGb) { - throw new InvalidParameterValueException("The maximum size for a disk is " + _maxVolumeSizeInGb + " Gb."); - } - - long diskSize = numGibibytes * 1024; - tags = cleanupTags(tags); - DiskOfferingVO newDiskOffering = new DiskOfferingVO(domainId, name, description, diskSize,tags); - return _diskOfferingDao.persist(newDiskOffering); - } public String changePrivateIPRange(boolean add, long podId, String startIP, String endIP) throws InvalidParameterValueException { checkPrivateIpRangeErrors(podId, startIP, endIP); diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 7596e44b68d..674814ea72d 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -4219,10 +4219,6 @@ public class ManagementServerImpl implements ManagementServer { return _configMgr.updateServiceOffering(userId, serviceOfferingId, name, displayText, offerHA, useVirtualNetwork, tags); } - @Override - public boolean deleteServiceOffering(long userId, long serviceOfferingId) { - return _configMgr.deleteServiceOffering(userId, serviceOfferingId); - } @Override public HostPodVO createPod(long userId, String podName, Long zoneId, String gateway, String cidr, String startIp, String endIp) throws InvalidParameterValueException, InternalErrorException { @@ -6727,16 +6723,6 @@ public class ManagementServerImpl implements ManagementServer { return _diskOfferingDao.search(sc, searchFilter); } - @Override - public DiskOfferingVO updateDiskOffering(long userId, long diskOfferingId, String name, String description, String tags) { - return _configMgr.updateDiskOffering(userId, diskOfferingId, name, description, tags); - } - - @Override - public boolean deleteDiskOffering(long id) { - return _diskOfferingDao.remove(Long.valueOf(id)); - } - @Override public AsyncJobResult queryAsyncJobResult(long jobId) throws PermissionDeniedException { AsyncJobVO job = _asyncMgr.getAsyncJob(jobId);