]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
0330e6e0769a57983921ceae912969203fffda8f
[tmp/jakarta-migration.git] /
1 /**     \r
2  * AbstractMultiPartCollectionSpaceResourceImpl.java\r
3  *\r
4  * {Purpose of This Class}\r
5  *\r
6  * {Other Notes Relating to This Class (Optional)}\r
7  *\r
8  * $LastChangedBy: $\r
9  * $LastChangedRevision: $\r
10  * $LastChangedDate: $\r
11  *\r
12  * This document is a part of the source code and related artifacts\r
13  * for CollectionSpace, an open source collections management system\r
14  * for museums and related institutions:\r
15  *\r
16  * http://www.collectionspace.org\r
17  * http://wiki.collectionspace.org\r
18  *\r
19  * Copyright © 2009 {Contributing Institution}\r
20  *\r
21  * Licensed under the Educational Community License (ECL), Version 2.0.\r
22  * You may not use this file except in compliance with this License.\r
23  *\r
24  * You may obtain a copy of the ECL 2.0 License at\r
25  * https://source.collectionspace.org/collection-space/LICENSE.txt\r
26  */\r
27 package org.collectionspace.services.common;\r
28 \r
29 import javax.ws.rs.Consumes;\r
30 import javax.ws.rs.GET;\r
31 import javax.ws.rs.PUT;\r
32 import javax.ws.rs.Path;\r
33 import javax.ws.rs.PathParam;\r
34 import javax.ws.rs.Produces;\r
35 import javax.ws.rs.WebApplicationException;\r
36 import javax.ws.rs.core.Response;\r
37 \r
38 import org.collectionspace.services.client.PoxPayloadIn;\r
39 import org.collectionspace.services.client.PoxPayloadOut;\r
40 import org.collectionspace.services.client.workflow.WorkflowClient;\r
41 import org.collectionspace.services.common.api.Tools;\r
42 import org.collectionspace.services.common.context.MultipartServiceContext;\r
43 import org.collectionspace.services.common.context.MultipartServiceContextFactory;\r
44 import org.collectionspace.services.common.context.ServiceContext;\r
45 import org.collectionspace.services.common.context.ServiceContextFactory;\r
46 import org.collectionspace.services.common.document.BadRequestException;\r
47 import org.collectionspace.services.common.document.DocumentHandler;\r
48 import org.collectionspace.services.common.document.DocumentNotFoundException;\r
49 import org.collectionspace.services.common.security.UnauthorizedException;\r
50 import org.collectionspace.services.common.workflow.service.nuxeo.WorkflowDocumentModelHandler;\r
51 import org.collectionspace.services.workflow.WorkflowCommon;\r
52 import org.jboss.resteasy.client.ClientResponse;\r
53 \r
54 import org.slf4j.Logger;\r
55 import org.slf4j.LoggerFactory;\r
56 \r
57 /**\r
58  * The Class AbstractMultiPartCollectionSpaceResourceImpl.\r
59  */\r
60 public abstract class AbstractMultiPartCollectionSpaceResourceImpl extends AbstractCollectionSpaceResourceImpl<PoxPayloadIn, PoxPayloadOut> {\r
61 \r
62     protected final Logger logger = LoggerFactory.getLogger(this.getClass());\r
63 \r
64     @Override\r
65     public ServiceContextFactory<PoxPayloadIn, PoxPayloadOut> getServiceContextFactory() {\r
66         return MultipartServiceContextFactory.get();\r
67     }\r
68 \r
69 \r
70 \r
71 \r
72     @Override\r
73     public DocumentHandler createDocumentHandler(ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx) throws Exception {\r
74         return createDocumentHandler(ctx, ctx.getCommonPartLabel(), getCommonPartClass());\r
75     }\r
76 \r
77     /**\r
78      * Creates the document handler.\r
79      * \r
80      * @param serviceContext the service context\r
81      * @param schemaName the schema name\r
82      * @param commonClass the common class\r
83      * \r
84      * @return the document handler\r
85      * \r
86      * @throws Exception the exception\r
87      */\r
88     public DocumentHandler createDocumentHandler(ServiceContext<PoxPayloadIn, PoxPayloadOut> serviceContext,\r
89             String schemaName,\r
90             Class<?> commonClass) throws Exception {\r
91         DocumentHandler result = null;\r
92 \r
93         MultipartServiceContext ctx = (MultipartServiceContext) serviceContext;\r
94         Object commonPart = null;\r
95         if (ctx.getInput() != null) {\r
96             commonPart = ctx.getInputPart(schemaName);\r
97         }\r
98         result = super.createDocumentHandler(ctx, commonPart);\r
99 \r
100         return result;\r
101     }\r
102 \r
103     /**\r
104      * Creates the document handler.\r
105      * \r
106      * @param ctx the ctx\r
107      * @param commonClass the common class\r
108      * \r
109      * @return the document handler\r
110      * \r
111      * @throws Exception the exception\r
112      */\r
113     public DocumentHandler createDocumentHandler(\r
114             ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx,\r
115             Class<Object> commonClass) throws Exception {\r
116         return createDocumentHandler(ctx, ctx.getCommonPartLabel(), commonClass);\r
117     }\r
118 \r
119     /**\r
120      * Creates the contact document handler.\r
121      * \r
122      * @param ctx the ctx\r
123      * @param inAuthority the in authority\r
124      * @param inItem the in item\r
125      * \r
126      * @return the document handler\r
127      * \r
128      * @throws Exception the exception\r
129      */\r
130     protected WorkflowDocumentModelHandler createWorkflowDocumentHandler(\r
131             ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx) throws Exception {\r
132 \r
133         WorkflowDocumentModelHandler docHandler = (WorkflowDocumentModelHandler) createDocumentHandler(ctx,\r
134                 WorkflowClient.SERVICE_COMMONPART_NAME,\r
135                 WorkflowCommon.class);\r
136 \r
137         return docHandler;\r
138     }\r
139 \r
140     /*\r
141      * JAX-RS Annotated methods\r
142      */\r
143     @GET\r
144     @Path("{csid}" + WorkflowClient.SERVICE_PATH)\r
145     public byte[] getWorkflow(\r
146             @PathParam("csid") String csid) {\r
147         PoxPayloadOut result = null;\r
148 \r
149         try {\r
150             ServiceContext<PoxPayloadIn, PoxPayloadOut> parentCtx = createServiceContext();\r
151             String parentWorkspaceName = parentCtx.getRepositoryWorkspaceName();\r
152 \r
153             MultipartServiceContext ctx = (MultipartServiceContext) createServiceContext(WorkflowClient.SERVICE_NAME);\r
154             WorkflowDocumentModelHandler handler = createWorkflowDocumentHandler(ctx);\r
155             ctx.setRespositoryWorkspaceName(parentWorkspaceName); //find the document in the parent's workspace\r
156             getRepositoryClient(ctx).get(ctx, csid, handler);\r
157             result = ctx.getOutput();\r
158         } catch (Exception e) {\r
159             throw bigReThrow(e, ServiceMessages.READ_FAILED + WorkflowClient.SERVICE_PAYLOAD_NAME, csid);\r
160         }\r
161 \r
162         return result.getBytes();\r
163     }\r
164 \r
165     @PUT\r
166     @Path("{csid}" + WorkflowClient.SERVICE_PATH)\r
167     public byte[] updateWorkflow(@PathParam("csid") String csid, String xmlPayload) {\r
168         PoxPayloadOut result = null;\r
169         try {\r
170             ServiceContext<PoxPayloadIn, PoxPayloadOut> parentCtx = createServiceContext();\r
171             String parentWorkspaceName = parentCtx.getRepositoryWorkspaceName();\r
172 \r
173             PoxPayloadIn workflowUpdate = new PoxPayloadIn(xmlPayload);\r
174             MultipartServiceContext ctx = (MultipartServiceContext) createServiceContext(WorkflowClient.SERVICE_NAME, workflowUpdate);\r
175             WorkflowDocumentModelHandler handler = createWorkflowDocumentHandler(ctx);\r
176             ctx.setRespositoryWorkspaceName(parentWorkspaceName); //find the document in the parent's workspace\r
177             getRepositoryClient(ctx).update(ctx, csid, handler);\r
178             result = ctx.getOutput();\r
179         } catch (Exception e) {\r
180             throw bigReThrow(e, ServiceMessages.UPDATE_FAILED + WorkflowClient.SERVICE_PAYLOAD_NAME, csid);\r
181         }\r
182         return result.getBytes();\r
183     }\r
184 }\r