From 2f7b2e1e712fe6ff51590b50c3b7215c5c0879f9 Mon Sep 17 00:00:00 2001 From: Dhandapani Date: Thu, 21 Apr 2011 15:17:52 +0530 Subject: Story #3 Delete Volume - REST Resources changes, REST Client Changes and UI Changes --- .../storage/management/client/AbstractClient.java | 60 ++++++++++++++++------ .../management/client/GlusterDataModelManager.java | 46 ++++++++++------- .../storage/management/client/VolumesClient.java | 7 +-- 3 files changed, 77 insertions(+), 36 deletions(-) (limited to 'src/com.gluster.storage.management.client') diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java index 807e32a3..e8877321 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java @@ -19,12 +19,12 @@ public abstract class AbstractClient { protected WebResource resource; private String securityToken; private String authHeader; - + public AbstractClient() { URI baseURI = new ClientUtil().getServerBaseURI(); resource = Client.create(new DefaultClientConfig()).resource(baseURI).path(getResourceName()); } - + public AbstractClient(String securityToken) { this(); setSecurityToken(securityToken); @@ -93,8 +93,11 @@ public abstract class AbstractClient { /** * Submits given Form using POST method to the resource and returns the object received as response - * @param responseClass Class of the object expected as response - * @param form Form to be submitted + * + * @param responseClass + * Class of the object expected as response + * @param form + * Form to be submitted * @return Object of given class received as response */ @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -105,9 +108,13 @@ public abstract class AbstractClient { /** * Submits given Form using POST method to the given sub-resource and returns the object received as response - * @param subResourceName Name of the sub-resource to which the request is to be posted - * @param responseClass Class of the object expected as response - * @param form Form to be submitted + * + * @param subResourceName + * Name of the sub-resource to which the request is to be posted + * @param responseClass + * Class of the object expected as response + * @param form + * Form to be submitted * @return Object of given class received as response */ @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -118,9 +125,13 @@ public abstract class AbstractClient { /** * Submits given Form using PUT method to the given sub-resource and returns the object received as response - * @param subResourceName Name of the sub-resource to which the request is to be posted - * @param responseClass Class of the object expected as response - * @param form Form to be submitted + * + * @param subResourceName + * Name of the sub-resource to which the request is to be posted + * @param responseClass + * Class of the object expected as response + * @param form + * Form to be submitted * @return Object of given class received as response */ protected Object putRequest(String subResourceName, Class responseClass, Form form) { @@ -130,8 +141,11 @@ public abstract class AbstractClient { /** * Submits given Form using PUT method to the given sub-resource and returns the object received as response - * @param subResourceName Name of the sub-resource to which the request is to be posted - * @param responseClass Class of the object expected as response + * + * @param subResourceName + * Name of the sub-resource to which the request is to be posted + * @param responseClass + * Class of the object expected as response * @return Object of given class received as response */ protected Object putRequest(String subResourceName, Class responseClass) { @@ -141,8 +155,11 @@ public abstract class AbstractClient { /** * Submits given object to the resource and returns the object received as response - * @param responseClass Class of the object expected as response - * @param requestObject the Object to be submitted + * + * @param responseClass + * Class of the object expected as response + * @param requestObject + * the Object to be submitted * @return Object of given class received as response */ @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -151,6 +168,18 @@ public abstract class AbstractClient { .post(responseClass, requestObject); } + @SuppressWarnings("unchecked") + protected Object deleteResource(Class responseClass, Form form) { + return resource.header(HTTP_HEADER_AUTH, authHeader).delete(responseClass); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + protected Object deleteSubResource(String subResourceName, Class responseClass, String volumeName, + String deleteOption) { + return resource.path(subResourceName).queryParam("volumeName", volumeName) + .queryParam("deleteOption", deleteOption).header(HTTP_HEADER_AUTH, authHeader).delete(responseClass); + } + public abstract String getResourceName(); /** @@ -161,7 +190,8 @@ public abstract class AbstractClient { } /** - * @param securityToken the securityToken to set + * @param securityToken + * the securityToken to set */ protected void setSecurityToken(String securityToken) { this.securityToken = securityToken; diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java index 2a6f053a..9e031ad3 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java @@ -120,7 +120,6 @@ public class GlusterDataModelManager { initializeGlusterServers(cluster); initializeVolumes(cluster); - initializeAutoDiscoveredServers(cluster); initializeDisks(); @@ -138,8 +137,9 @@ public class GlusterDataModelManager { private void initializeVolumeOptionsDefaults() { VolumeOptionInfoListResponse response = new VolumesClient(getSecurityToken()).getVolumeOptionsDefaults(); - if(!response.getStatus().isSuccess()) { - throw new GlusterRuntimeException("Error fetching volume option defaults: [" + response.getStatus().getMessage() + "]"); + if (!response.getStatus().isSuccess()) { + throw new GlusterRuntimeException("Error fetching volume option defaults: [" + + response.getStatus().getMessage() + "]"); } this.volumeOptionsDefaults = response.getOptions(); } @@ -165,7 +165,7 @@ public class GlusterDataModelManager { private void initializeVolumes(Cluster cluster) { VolumesClient volumeClient = new VolumesClient(securityToken); VolumeListResponse response = volumeClient.getAllVolumes(); - if(!response.getStatus().isSuccess()) { + if (!response.getStatus().isSuccess()) { throw new GlusterRuntimeException("Error fetching volume list: [" + response.getStatus() + "]"); } cluster.setVolumes(response.getVolumes()); @@ -299,8 +299,8 @@ public class GlusterDataModelManager { /* * TODO: review the logic * - * List disks = new ArrayList(); for (Disk disk : - * volume.getDisks()) { if (disk.isReady()) { disks.add(disk); } } + * List disks = new ArrayList(); for (Disk disk : volume.getDisks()) { if (disk.isReady()) { + * disks.add(disk); } } */ Disk disk = null; List volumeDisks = new ArrayList(); @@ -364,23 +364,32 @@ public class GlusterDataModelManager { } } + public void deleteVolume(Volume volume) { + Cluster cluster = model.getCluster(); + cluster.deleteVolume(volume); + + for (ClusterListener listener : listeners) { + listener.volumeDeleted(volume); + } + } + public void updateVolumeStatus(Volume volume, VOLUME_STATUS newStatus) { volume.setStatus(newStatus); for (ClusterListener listener : listeners) { listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_STATUS_CHANGED, newStatus)); } } - + public void resetVolumeOptions(Volume volume) { volume.getOptions().clear(); for (ClusterListener listener : listeners) { listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_OPTIONS_RESET, null)); } } - + public void setVolumeOption(Volume volume, Entry entry) { volume.setOption(entry.getKey(), (String) entry.getValue()); - for(ClusterListener listener : listeners) { + for (ClusterListener listener : listeners) { listener.volumeChanged(volume, new Event(EVENT_TYPE.VOLUME_OPTION_SET, entry)); } } @@ -393,25 +402,25 @@ public class GlusterDataModelManager { listener.volumeCreated(volume); } } - + public List getVolumeOptionsDefaults() { return volumeOptionsDefaults; } public VolumeOptionInfo getVolumeOptionInfo(String optionKey) { - for(VolumeOptionInfo info : volumeOptionsDefaults) { - if(info.getName().equals(optionKey)) { + for (VolumeOptionInfo info : volumeOptionsDefaults) { + if (info.getName().equals(optionKey)) { return info; } } throw new GlusterRuntimeException("Invalid option key [" + optionKey + "] passed to GlusterDataModelManager#getVolumeOptionInfo"); } - + public String getVolumeOptionDefaultValue(String optionKey) { return getVolumeOptionInfo(optionKey).getDefaultValue(); } - + public String getVolumeOptionDesc(String optionKey) { return getVolumeOptionInfo(optionKey).getDescription(); } @@ -420,13 +429,14 @@ public class GlusterDataModelManager { volume.setAccessControlList(accessControlList); setVolumeOption(volume, getOptionEntry(volume, Volume.OPTION_AUTH_ALLOW)); } - + private Entry getOptionEntry(Volume volume, String optionKey) { - for(Entry entry : volume.getOptions().entrySet()) { - if(entry.getKey().equals(optionKey)) { + for (Entry entry : volume.getOptions().entrySet()) { + if (entry.getKey().equals(optionKey)) { return entry; } } - throw new GlusterRuntimeException("Couldn't find entry for option [" + optionKey + "] on volume [" + volume.getName()); + throw new GlusterRuntimeException("Couldn't find entry for option [" + optionKey + "] on volume [" + + volume.getName()); } } diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java index 1d9ddbff..05b89306 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java @@ -20,12 +20,9 @@ */ package com.gluster.storage.management.client; -import java.util.List; - import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; -import com.gluster.storage.management.core.model.VolumeOptionInfo; import com.gluster.storage.management.core.response.VolumeListResponse; import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; import com.sun.jersey.api.representation.Form; @@ -78,6 +75,10 @@ public class VolumesClient extends AbstractClient { public Volume getVolume(String volumeName) { return (Volume) fetchSubResource(volumeName, Volume.class); } + + public Status deleteVolume(Volume volume, String deleteOption) { + return (Status) deleteSubResource(volume.getName(), Status.class, volume.getName(), deleteOption); + } public VolumeOptionInfoListResponse getVolumeOptionsDefaults() { return ((VolumeOptionInfoListResponse) fetchSubResource(RESTConstants.SUBRESOURCE_DEFAULT_OPTIONS, -- cgit