From 865c2255f72ce6a8a1d3c6ea11cd4b5173030fe0 Mon Sep 17 00:00:00 2001 From: "manuele.simi" Date: Fri, 19 Jan 2018 05:05:49 +0000 Subject: [PATCH] Introduce error codes for the delete context method. Query the RR to validate the delete request. git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/resource-management/resource-manager@162342 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../manager/io/rs/RMContextPath.java | 11 +++++- .../manager/io/rs/RMCreateContextCode.java | 10 +++-- .../manager/io/rs/RMDeleteContextCode.java | 37 +++++++++++++++++++ .../manager/webapp/context/DeleteRequest.java | 16 +++++--- .../manager/webapp/rs/RMContext.java | 8 ++-- .../manager/webapp/context/RMContextTest.java | 7 ++-- 6 files changed, 72 insertions(+), 17 deletions(-) create mode 100644 io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMDeleteContextCode.java diff --git a/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMContextPath.java b/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMContextPath.java index c1528fc..3633ef6 100644 --- a/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMContextPath.java +++ b/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMContextPath.java @@ -1,7 +1,7 @@ package org.gcube.resourcemanagement.manager.io.rs; /** - * REST paths for the RMContext exposed by the webapp. + * REST paths and parameters for the RMContext resource exposed by the webapp. * * @author Manuele Simi (ISTI - CNR) * @@ -15,12 +15,19 @@ public class RMContextPath { public static final String CREATE_PATH_PART = "create"; public static final String DELETE_PATH_PART = "delete"; - + + + /* PARAMETERS FOR SOME REQUESTS*/ /** * Force the service to use the ResourceRegistry instance at the given URL. */ public static final String FORCE_RRURL_PARAM = "rrURL"; + + /** + * The identifier of the resource on which the method will operate. + */ + public static final String UUID_PARAM = "ContextUUID"; diff --git a/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMCreateContextCode.java b/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMCreateContextCode.java index d83213e..2d93efd 100644 --- a/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMCreateContextCode.java +++ b/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMCreateContextCode.java @@ -3,7 +3,7 @@ package org.gcube.resourcemanagement.manager.io.rs; import org.gcube.resourcemanagement.manager.io.codeexceptions.ErrorCode; /** - * Error codes returned by the context resource. + * Error codes returned by the create method of the context resource. * * @author Manuele Simi (ISTI CNR) * @@ -25,11 +25,15 @@ public enum RMCreateContextCode implements ErrorCode { this.id = id; this.msg = msg; } - + /* (non-Javadoc) + * @see org.gcube.resourcemanagement.manager.io.codeexceptions.ErrorCode#getId() + */ public int getId() { return this.id; } - + /* (non-Javadoc) + * @see org.gcube.resourcemanagement.manager.io.codeexceptions.ErrorCode#getMessage() + */ public String getMessage() { return this.msg; } diff --git a/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMDeleteContextCode.java b/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMDeleteContextCode.java new file mode 100644 index 0000000..5180f85 --- /dev/null +++ b/io/src/main/java/org/gcube/resourcemanagement/manager/io/rs/RMDeleteContextCode.java @@ -0,0 +1,37 @@ +package org.gcube.resourcemanagement.manager.io.rs; + +import org.gcube.resourcemanagement.manager.io.codeexceptions.ErrorCode; + +/** + * Error codes returned by the delete method of the context resource. + * + * @author Manuele Simi (ISTI CNR) + * + */ +public enum RMDeleteContextCode implements ErrorCode { + + CONTEXT_DOES_NOT_EXIST(1, "The context does not exist."), + GENERIC_ERROR_FROM_RR(2, "The Resource Registry returned an error."); + + private int id; + private String msg; + + private RMDeleteContextCode(int id, String msg) { + this.id = id; + this.msg = msg; + } + /* (non-Javadoc) + * @see org.gcube.resourcemanagement.manager.io.codeexceptions.ErrorCode#getId() + */ + public int getId() { + return this.id; + } + + /* (non-Javadoc) + * @see org.gcube.resourcemanagement.manager.io.codeexceptions.ErrorCode#getMessage() + */ + public String getMessage() { + return this.msg; + } + +} diff --git a/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/context/DeleteRequest.java b/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/context/DeleteRequest.java index 3b8b7c0..b9fce92 100644 --- a/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/context/DeleteRequest.java +++ b/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/context/DeleteRequest.java @@ -4,6 +4,8 @@ import java.util.Objects; import java.util.UUID; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.resourcemanagement.manager.io.codeexceptions.WebCodeException; +import org.gcube.resourcemanagement.manager.io.rs.RMDeleteContextCode; /** * Delete request for a context. @@ -28,7 +30,9 @@ public final class DeleteRequest extends RequestToResourceRegistry { */ @Override public RequestToResourceRegistry validate() throws Exception { - // TODO check if the context exists + if (!new Queries().contextExists(context, resourceRegistryContextClient)) { + ResponseFromResourceRegistry.fromException(new WebCodeException(RMDeleteContextCode.CONTEXT_DOES_NOT_EXIST)); + } return null; } @@ -38,13 +42,15 @@ public final class DeleteRequest extends RequestToResourceRegistry { @Override protected ResponseFromResourceRegistry send() { try { - boolean created = resourceRegistryContextClient.delete(context); + boolean deleted = resourceRegistryContextClient.delete(context); + if (!deleted) { + ResponseFromResourceRegistry.fromException(new WebCodeException(RMDeleteContextCode.GENERIC_ERROR_FROM_RR)); + } } catch (ResourceRegistryException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + ResponseFromResourceRegistry.fromException(new WebCodeException(RMDeleteContextCode.GENERIC_ERROR_FROM_RR)); } - return null; + return ResponseFromResourceRegistry.newSuccessResponseWithMessage("Context successfully deleted"); } } diff --git a/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/rs/RMContext.java b/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/rs/RMContext.java index bd063b5..17b91e1 100644 --- a/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/rs/RMContext.java +++ b/webapp/src/main/java/org/gcube/resourcemanagement/manager/webapp/rs/RMContext.java @@ -45,7 +45,7 @@ public class RMContext { logger.info("Force URL: " + rrURL); ContextHolder holder = new ContextHolder(json); ResponseFromResourceRegistry returned = CreateRequest.fromHolder(holder).forceURL(rrURL).submit(); - return this.buildResponse(returned,"Context successfully created.","Failed to create the context."); + return this.buildResponse(returned,Status.CREATED,"Context successfully created.","Failed to create the context."); } /* @@ -59,7 +59,7 @@ public class RMContext { logger.info("Requested to delete context with id {}", uuid); logger.info("Force URL: " + rrURL); ResponseFromResourceRegistry returned = DeleteRequest.fromUUID(UUID.fromString(uuid)).forceURL(rrURL).submit(); - return this.buildResponse(returned,"Context successfully deleted.","Failed to delete the context."); + return this.buildResponse(returned,Status.OK,"Context successfully deleted.","Failed to delete the context."); } /** @@ -69,9 +69,9 @@ public class RMContext { * @param failedMessage * @return the response */ - private Response buildResponse(ResponseFromResourceRegistry returned, String successMessage, String failedMessage) { + private Response buildResponse(ResponseFromResourceRegistry returned, Status successStatus, String successMessage, String failedMessage) { if (returned.wasSuccessful()) { - return Response.status(Status.CREATED) + return Response.status(successStatus) .entity(returned.getMessage().map(m -> m).orElse(successMessage)) .type(ResourceInitializer.APPLICATION_JSON_CHARSET_UTF_8).build(); } else { diff --git a/webapp/src/test/java/org/gcube/resourcemanagement/manager/webapp/context/RMContextTest.java b/webapp/src/test/java/org/gcube/resourcemanagement/manager/webapp/context/RMContextTest.java index a53a4f7..47933fc 100644 --- a/webapp/src/test/java/org/gcube/resourcemanagement/manager/webapp/context/RMContextTest.java +++ b/webapp/src/test/java/org/gcube/resourcemanagement/manager/webapp/context/RMContextTest.java @@ -145,11 +145,12 @@ public class RMContextTest extends JerseyTest { if (skipTest) return; try { - Response create = target(RMContextPath.CONTEXT_ROOT).path(context1UUID.toString()) + Response delete = target(RMContextPath.CONTEXT_ROOT).path(context1UUID.toString()) .queryParam(RMContextPath.FORCE_RRURL_PARAM, RR) .request().delete(); - assertEquals("Unexpected returned code. Reason: " + create.getStatusInfo().getReasonPhrase(), - Status.OK.getStatusCode(), create.getStatus()); + assertNotNull(delete); + assertEquals("Unexpected returned code. Reason: " + delete.getStatusInfo().getReasonPhrase(), + Status.OK.getStatusCode(), delete.getStatus()); } catch (Exception e) { assertFalse("Failed to delete the context.", false); }