From 3f26b0a5790bd37ef5369d9f361a1d3e86c0e485 Mon Sep 17 00:00:00 2001 From: Richard Millet Date: Fri, 7 Sep 2012 13:52:17 -0700 Subject: [PATCH] CSPACE-5518: Updated service context setup to support existing hierarchy creation code that was moved into the common base class. --- .../test-data/xmlreplay/xml-replay-master.xml | 3 ++ .../services/account/AccountResource.java | 1 - .../common/vocabulary/AuthorityResource.java | 11 ++-- .../AbstractCollectionSpaceResourceImpl.java | 50 ++++++++++++++++--- .../services/common/ResourceBase.java | 14 ++++-- .../MultipartServiceContextFactory.java | 16 +++--- .../context/MultipartServiceContextImpl.java | 7 ++- .../context/RemoteServiceContextFactory.java | 10 +++- .../context/RemoteServiceContextImpl.java | 2 + .../common/context/ServiceContextFactory.java | 7 ++- .../java/RemoteDocumentModelHandlerImpl.java | 8 +-- 11 files changed, 98 insertions(+), 31 deletions(-) diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml index 1691fe4bf..10f23e7e6 100644 --- a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml @@ -33,6 +33,9 @@ File below this line have been ported. --> + + + diff --git a/services/account/service/src/main/java/org/collectionspace/services/account/AccountResource.java b/services/account/service/src/main/java/org/collectionspace/services/account/AccountResource.java index 781f391e2..170e05612 100644 --- a/services/account/service/src/main/java/org/collectionspace/services/account/AccountResource.java +++ b/services/account/service/src/main/java/org/collectionspace/services/account/AccountResource.java @@ -50,7 +50,6 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; diff --git a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java index c6176062e..144500e9d 100644 --- a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java +++ b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java @@ -376,7 +376,8 @@ public abstract class AuthorityResource @GET @Path("{csid}") @Override - public byte[] get( // getAuthority( + public byte[] get( + @Context Request request, @Context UriInfo ui, @PathParam("csid") String specifier) { PoxPayloadOut result = null; @@ -607,20 +608,20 @@ public abstract class AuthorityResource public byte[] getAuthorityItem( @Context Request request, @Context UriInfo ui, + @Context ResourceMap resourceMap, @PathParam("csid") String parentspecifier, @PathParam("itemcsid") String itemspecifier) { PoxPayloadOut result = null; try { - JaxRsContext jaxRsContext = new JaxRsContext(request, ui); MultivaluedMap queryParams = ui.getQueryParameters(); String parentcsid = lookupParentCSID(parentspecifier, "getAuthorityItem(parent)", "GET_ITEM", queryParams); RemoteServiceContext ctx = null; - ctx = (RemoteServiceContext) createServiceContext(getItemServiceName(), queryParams); + ctx = (RemoteServiceContext) createServiceContext(getItemServiceName(), resourceMap, ui); + + JaxRsContext jaxRsContext = new JaxRsContext(request, ui); // REM - Why are we setting this? Who is using the getter? ctx.setJaxRsContext(jaxRsContext); - ctx.setUriInfo(ui); //ARG! must pass this or subsequent calls will not have a ui. - // We omit the parentShortId, only needed when doing a create... DocumentHandler handler = createItemDocumentHandler(ctx, parentcsid, null); diff --git a/services/common/src/main/java/org/collectionspace/services/common/AbstractCollectionSpaceResourceImpl.java b/services/common/src/main/java/org/collectionspace/services/common/AbstractCollectionSpaceResourceImpl.java index ec66b28a2..229a198c0 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/AbstractCollectionSpaceResourceImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/AbstractCollectionSpaceResourceImpl.java @@ -159,7 +159,8 @@ public abstract class AbstractCollectionSpaceResourceImpl protected ServiceContext createServiceContext() throws Exception { ServiceContext ctx = createServiceContext(this.getServiceName(), (IT)null, //inputType - (MultivaluedMap)null, /*queryParams*/ + null, // The resource map + (MultivaluedMap)null, // The query params this.getCommonPartClass()); return ctx; } @@ -176,8 +177,9 @@ public abstract class AbstractCollectionSpaceResourceImpl protected ServiceContext createServiceContext(String serviceName) throws Exception { ServiceContext ctx = createServiceContext( serviceName, - (IT)null, /*input*/ - (MultivaluedMap)null, /*queryParams*/ + (IT)null, // The input part + null, // The resource map + (MultivaluedMap)null, // The queryParams (Class)null /*input type's Class*/); return ctx; } @@ -194,7 +196,9 @@ public abstract class AbstractCollectionSpaceResourceImpl */ protected ServiceContext createServiceContext(String serviceName, IT input) throws Exception { - ServiceContext ctx = createServiceContext(serviceName, input, + ServiceContext ctx = createServiceContext(serviceName, + input, + null, // The resource map (MultivaluedMap)null, /*queryParams*/ (Class)null /*input type's Class*/); return ctx; @@ -211,6 +215,7 @@ public abstract class AbstractCollectionSpaceResourceImpl MultivaluedMap queryParams) throws Exception { ServiceContext ctx = createServiceContext(serviceName, (IT)null, + null, // The resource map queryParams, (Class)null /*input type's Class*/); return ctx; @@ -279,13 +284,42 @@ public abstract class AbstractCollectionSpaceResourceImpl return ctx; } + protected ServiceContext createServiceContext( + String serviceName, + ResourceMap resourceMap, + UriInfo ui) throws Exception { + ServiceContext ctx = createServiceContext( + serviceName, + null, // The input object + resourceMap, + ui.getQueryParameters(), + null /* the class of the input type */); + ctx.setUriInfo(ui); + return ctx; + } + + protected ServiceContext createServiceContext( + IT input, + ResourceMap resourceMap, + UriInfo ui) throws Exception { + ServiceContext ctx = createServiceContext( + this.getServiceName(), + input, + resourceMap, + ui.getQueryParameters(), + null /* the class of the input type */); + ctx.setUriInfo(ui); + return ctx; + } + protected ServiceContext createServiceContext( IT input, MultivaluedMap queryParams) throws Exception { return createServiceContext(this.getServiceName(), input, + null, // The resource map queryParams, - null /* the class of the input type */); + null); // The class of the input type. } /** @@ -305,6 +339,7 @@ public abstract class AbstractCollectionSpaceResourceImpl Class theClass) throws Exception { return createServiceContext(this.getServiceName(), input, + null, // The resource map queryParams, theClass); } @@ -324,17 +359,20 @@ public abstract class AbstractCollectionSpaceResourceImpl private ServiceContext createServiceContext( String serviceName, IT input, + ResourceMap resourceMap, MultivaluedMap queryParams, Class theClass) throws Exception { ServiceContext ctx = getServiceContextFactory().createServiceContext( serviceName, input, + resourceMap, queryParams, theClass != null ? theClass.getPackage().getName() : null, theClass != null ? theClass.getName() : null); - if(theClass != null) { + if (theClass != null) { ctx.setProperty(ServiceContextProperties.ENTITY_CLASS, theClass); } + return ctx; } diff --git a/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java b/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java index 462a8659d..de70114bb 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java +++ b/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java @@ -31,6 +31,8 @@ import org.collectionspace.services.common.api.RefName; import org.collectionspace.services.common.api.Tools; import org.collectionspace.services.common.authorityref.AuthorityRefList; import org.collectionspace.services.common.config.ServiceConfigUtils; +import org.collectionspace.services.common.context.JaxRsContext; +import org.collectionspace.services.common.context.RemoteServiceContext; import org.collectionspace.services.common.context.ServiceContext; import org.collectionspace.services.common.document.DocumentFilter; import org.collectionspace.services.common.document.DocumentHandler; @@ -89,21 +91,22 @@ public abstract class ResourceBase //======================= CREATE ==================================================== @POST - public Response create(@Context ResourceMap resourceMap, + public Response create( + @Context ResourceMap resourceMap, @Context UriInfo ui, String xmlPayload) { return this.create(null, resourceMap, ui, xmlPayload); } public Response create(ServiceContext parentCtx, // REM: 8/13/2012 - Some sub-classes will override this method -e.g., MediaResource does. - @Context ResourceMap resourceMap, - @Context UriInfo ui, + ResourceMap resourceMap, + UriInfo ui, String xmlPayload) { Response result = null; try { PoxPayloadIn input = new PoxPayloadIn(xmlPayload); - ServiceContext ctx = createServiceContext(input, ui.getQueryParameters()); + ServiceContext ctx = createServiceContext(input, resourceMap, ui); ctx.setResourceMap(resourceMap); if (parentCtx != null && parentCtx.getCurrentRepositorySession() != null) { ctx.setCurrentRepositorySession(parentCtx.getCurrentRepositorySession()); // Reuse the current repo session if one exists @@ -216,13 +219,14 @@ public abstract class ResourceBase @GET @Path("{csid}") public byte[] get( + @Context Request request, @Context UriInfo ui, @PathParam("csid") String csid) { PoxPayloadOut result = null; ensureCSID(csid, READ); try { MultivaluedMap queryParams = ui.getQueryParameters(); - ServiceContext ctx = createServiceContext(queryParams); + RemoteServiceContext ctx = (RemoteServiceContext) createServiceContext(queryParams); result = get(csid, ctx);// ==> CALL implementation method, which subclasses may override. if (result == null) { Response response = Response.status(Response.Status.NOT_FOUND).entity( diff --git a/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextFactory.java b/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextFactory.java index ba8626206..c98bc8fd9 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextFactory.java +++ b/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextFactory.java @@ -27,8 +27,7 @@ import javax.ws.rs.core.MultivaluedMap; import org.collectionspace.services.client.PoxPayloadIn; import org.collectionspace.services.client.PoxPayloadOut; -import org.jboss.resteasy.plugins.providers.multipart.MultipartInput; -import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput; +import org.collectionspace.services.common.ResourceMap; /** * @@ -79,12 +78,15 @@ public class MultipartServiceContextFactory * @see org.collectionspace.services.common.context.ServiceContextFactory#createServiceContext(java.lang.String, java.lang.Object, javax.ws.rs.core.MultivaluedMap) */ @Override - public ServiceContext createServiceContext(String serviceName, - PoxPayloadIn input, + public ServiceContext createServiceContext( + String serviceName, + PoxPayloadIn input, + ResourceMap resourceMap, MultivaluedMap queryParams) throws Exception { ServiceContext ctx = new MultipartServiceContextImpl(serviceName, input, + resourceMap, queryParams); return ctx; } @@ -93,11 +95,13 @@ public class MultipartServiceContextFactory * @see org.collectionspace.services.common.context.ServiceContextFactory#createServiceContext(java.lang.String, java.lang.Object, javax.ws.rs.core.MultivaluedMap, java.lang.String, java.lang.String) */ @Override - public ServiceContext createServiceContext(String serviceName, + public ServiceContext createServiceContext( + String serviceName, PoxPayloadIn input, + ResourceMap resourceMap, MultivaluedMap queryParams, String documentType, String entityName) throws Exception { - return this.createServiceContext(serviceName, input, queryParams); + return this.createServiceContext(serviceName, input, resourceMap, queryParams); } } diff --git a/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextImpl.java b/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextImpl.java index 53e1d654d..1faa6097c 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/context/MultipartServiceContextImpl.java @@ -33,6 +33,7 @@ import org.collectionspace.services.client.PayloadInputPart; import org.collectionspace.services.client.PayloadOutputPart; import org.collectionspace.services.client.PoxPayloadIn; import org.collectionspace.services.client.PoxPayloadOut; +import org.collectionspace.services.common.ResourceMap; import org.collectionspace.services.common.security.UnauthorizedException; import org.dom4j.DocumentException; import org.dom4j.Element; @@ -91,11 +92,13 @@ public class MultipartServiceContextImpl * * @throws UnauthorizedException the unauthorized exception */ - protected MultipartServiceContextImpl(String serviceName, + protected MultipartServiceContextImpl( + String serviceName, PoxPayloadIn theInput, + ResourceMap resourceMap, MultivaluedMap queryParams) throws DocumentException, UnauthorizedException { - super(serviceName, theInput, queryParams); + super(serviceName, theInput, resourceMap, queryParams); setOutput(new PoxPayloadOut(serviceName)); } diff --git a/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextFactory.java b/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextFactory.java index 570df2274..ac9a4e76f 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextFactory.java +++ b/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextFactory.java @@ -28,6 +28,8 @@ package org.collectionspace.services.common.context; import javax.ws.rs.core.MultivaluedMap; +import org.collectionspace.services.common.ResourceMap; + /** * A factory for creating RemoteServiceContext objects. @@ -78,10 +80,12 @@ public class RemoteServiceContextFactory @Override public ServiceContext createServiceContext( String serviceName, - IT theInput, + IT theInput, + ResourceMap resourceMap, MultivaluedMap queryParams) throws Exception { ServiceContext ctx = new RemoteServiceContextImpl(serviceName, theInput, + resourceMap, queryParams); return ctx; @@ -89,13 +93,15 @@ public class RemoteServiceContextFactory @Override public ServiceContext createServiceContext(String serviceName, - IT input, + IT input, + ResourceMap resourceMap, MultivaluedMap queryParams, String documentType, String entityName) throws Exception { ServiceContext ctx = createServiceContext( serviceName, input, + resourceMap, queryParams); ctx.setDocumentType(documentType); //persistence unit ctx.setProperty(ServiceContextProperties.ENTITY_NAME, entityName); diff --git a/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextImpl.java b/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextImpl.java index 23eee0bfc..50c1a704c 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/common/context/RemoteServiceContextImpl.java @@ -98,8 +98,10 @@ public class RemoteServiceContextImpl */ protected RemoteServiceContextImpl(String serviceName, IT theInput, + ResourceMap resourceMap, MultivaluedMap queryParams) throws UnauthorizedException { this(serviceName, theInput); + this.setResourceMap(resourceMap); this.setQueryParams(queryParams); } diff --git a/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContextFactory.java b/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContextFactory.java index 49b78493a..dcaa909a6 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContextFactory.java +++ b/services/common/src/main/java/org/collectionspace/services/common/context/ServiceContextFactory.java @@ -25,6 +25,8 @@ package org.collectionspace.services.common.context; import javax.ws.rs.core.MultivaluedMap; +import org.collectionspace.services.common.ResourceMap; + /** * * ServiceContextFactory creates a service context @@ -66,8 +68,10 @@ public interface ServiceContextFactory { * * @throws Exception the exception */ - public ServiceContext createServiceContext(String serviceName, + public ServiceContext createServiceContext( + String serviceName, IT input, + ResourceMap resourceMap, MultivaluedMap queryParams) throws Exception; /** @@ -86,6 +90,7 @@ public interface ServiceContextFactory { public ServiceContext createServiceContext( String serviceName, IT input, + ResourceMap resourceMap, MultivaluedMap queryParams, String documentType, String entityName) throws Exception; diff --git a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RemoteDocumentModelHandlerImpl.java b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RemoteDocumentModelHandlerImpl.java index 048b7410f..2412c94af 100644 --- a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RemoteDocumentModelHandlerImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RemoteDocumentModelHandlerImpl.java @@ -332,7 +332,7 @@ public abstract class RemoteDocumentModelHandlerImpl String currentServiceName = ctx.getServiceName(); String workflowSubResource = "/"; JaxRsContext jaxRsContext = ctx.getJaxRsContext(); - if (jaxRsContext != null) { + if (jaxRsContext != null) { // If not null then we're dealing with an authority item String resourceName = SecurityUtils.getResourceName(jaxRsContext.getUriInfo()); workflowSubResource = workflowSubResource + resourceName + WorkflowClient.SERVICE_PATH + "/"; } else { @@ -343,7 +343,7 @@ public abstract class RemoteDocumentModelHandlerImpl org.collectionspace.services.authorization.ObjectFactory objectFactory = new org.collectionspace.services.authorization.ObjectFactory(); JAXBElement ap = objectFactory.createAccountPermission(accountPermission); - PayloadOutputPart accountPermissionPart = new PayloadOutputPart("account_permission", ap); + PayloadOutputPart accountPermissionPart = new PayloadOutputPart("account_permission", ap); // REM - "account_permission" should be using a constant and not a literal ctx.addOutputPart(accountPermissionPart); profiler.stop(); @@ -1149,7 +1149,9 @@ public abstract class RemoteDocumentModelHandlerImpl List childList = null; List parentList = null; DocumentModel docModel = wrapDoc.getWrappedObject(); - String itemRefName = (String) docModel.getPropertyValue(AuthorityItemJAXBSchema.REF_NAME); +// String itemRefName = (String) docModel.getPropertyValue(AuthorityItemJAXBSchema.REF_NAME); cow; + String itemRefName = (String) docModel.getProperty(CollectionSpaceClient.COLLECTIONSPACE_CORE_SCHEMA, + CollectionSpaceClient.COLLECTIONSPACE_CORE_REFNAME); ServiceContext ctx = getServiceContext(); //Do magic replacement of ${itemCSID} and fix URI's. -- 2.47.3