From a4608343bca1e2fea5c4cba3a24be4a6e7088bd4 Mon Sep 17 00:00:00 2001 From: remillet Date: Thu, 23 Feb 2017 23:25:11 -0800 Subject: [PATCH] DRYD-90: Added support for getting a list result and payload result from Service Group resource for a given CSID. --- .../services/common/NuxeoBasedResource.java | 35 ++++++++++++++++++- .../servicegroup/ServiceGroupResource.java | 1 - .../ServiceGroupDocumentModelHandler.java | 3 +- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/services/common/src/main/java/org/collectionspace/services/common/NuxeoBasedResource.java b/services/common/src/main/java/org/collectionspace/services/common/NuxeoBasedResource.java index 579d228bd..429b1c42f 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/NuxeoBasedResource.java +++ b/services/common/src/main/java/org/collectionspace/services/common/NuxeoBasedResource.java @@ -332,7 +332,7 @@ public abstract class NuxeoBasedResource @GET @Path("{csid}") public byte[] get( - @Context Request request, + @Context Request request, @Context UriInfo uriInfo, @PathParam("csid") String csid) { uriInfo = new UriInfoWrapper(uriInfo); @@ -352,6 +352,39 @@ public abstract class NuxeoBasedResource return result.getBytes(); } + + /** + * Call this method only from other resources (like the Service Groups resource) obtained from the global resource map (ResourceMap). If the a parent + * context exists and it has an open Nuxeo repository session, we will use it; otherwise, we will create a new one. + * + * @param parentCtx + * @param csid + * @return + */ + public PoxPayloadOut getWithParentCtx(ServiceContext parentCtx, + String csid) { + PoxPayloadOut result = null; + + ensureCSID(csid, READ); + try { + RemoteServiceContext ctx = (RemoteServiceContext) createServiceContext(); + if (parentCtx != null && parentCtx.getCurrentRepositorySession() != null) { + ctx.setCurrentRepositorySession(parentCtx.getCurrentRepositorySession()); // Reuse the current repo session if one exists + } + + result = get(csid, ctx);// ==> CALL implementation method, which subclasses may override. + + if (result == null) { + Response response = Response.status(Response.Status.NOT_FOUND).entity( + ServiceMessages.READ_FAILED + ServiceMessages.resourceNotFoundMsg(csid)).type("text/plain").build(); + throw new CSWebApplicationException(response); + } + } catch (Exception e) { + throw bigReThrow(e, ServiceMessages.READ_FAILED, csid); + } + + return result; + } protected PoxPayloadOut get(@PathParam("csid") String csid, ServiceContext ctx) throws Exception { diff --git a/services/servicegroup/service/src/main/java/org/collectionspace/services/servicegroup/ServiceGroupResource.java b/services/servicegroup/service/src/main/java/org/collectionspace/services/servicegroup/ServiceGroupResource.java index 72e2a552b..7361a90c3 100644 --- a/services/servicegroup/service/src/main/java/org/collectionspace/services/servicegroup/ServiceGroupResource.java +++ b/services/servicegroup/service/src/main/java/org/collectionspace/services/servicegroup/ServiceGroupResource.java @@ -302,6 +302,5 @@ public class ServiceGroupResource extends AbstractCollectionSpaceResourceImpl