]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
20fe2241b4dd69225d2ba7d6c64a69bc5e2c056a
[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.context.MultipartServiceContext;\r
42 import org.collectionspace.services.common.context.MultipartServiceContextFactory;\r
43 import org.collectionspace.services.common.context.ServiceContext;\r
44 import org.collectionspace.services.common.context.ServiceContextFactory;\r
45 import org.collectionspace.services.common.document.DocumentHandler;\r
46 import org.collectionspace.services.common.document.DocumentNotFoundException;\r
47 import org.collectionspace.services.common.security.UnauthorizedException;\r
48 import org.collectionspace.services.common.workflow.service.nuxeo.WorkflowDocumentModelHandler;\r
49 import org.collectionspace.services.workflow.WorkflowsCommon;\r
50 import org.jboss.resteasy.client.ClientResponse;\r
51 \r
52 import org.slf4j.Logger;\r
53 import org.slf4j.LoggerFactory;\r
54 \r
55 /**\r
56  * The Class AbstractMultiPartCollectionSpaceResourceImpl.\r
57  */\r
58 public abstract class AbstractMultiPartCollectionSpaceResourceImpl extends\r
59                 AbstractCollectionSpaceResourceImpl<PoxPayloadIn, PoxPayloadOut> {\r
60 \r
61     protected final Logger logger = LoggerFactory.getLogger(this.getClass());\r
62 \r
63     @Override\r
64     public ServiceContextFactory<PoxPayloadIn, PoxPayloadOut> getServiceContextFactory() {\r
65         return MultipartServiceContextFactory.get();\r
66     }\r
67 \r
68     protected WebApplicationException bigReThrow(Exception e, String serviceMsg)\r
69     throws WebApplicationException {\r
70         return bigReThrow(e, serviceMsg, "");\r
71     }\r
72 \r
73         protected WebApplicationException bigReThrow(Exception e,\r
74                         String serviceMsg, String csid) throws WebApplicationException {\r
75                 Response response;\r
76                 if (logger.isDebugEnabled()) {\r
77                         logger.debug(getClass().getName(), e);\r
78                 }\r
79                 if (e instanceof UnauthorizedException) {\r
80                         response = Response.status(Response.Status.UNAUTHORIZED)\r
81                                         .entity(serviceMsg + e.getMessage()).type("text/plain")\r
82                                         .build();\r
83                         return new WebApplicationException(response);\r
84                 } else if (e instanceof DocumentNotFoundException) {\r
85                         response = Response\r
86                                         .status(Response.Status.NOT_FOUND)\r
87                                         .entity(serviceMsg + " on " + getClass().getName()\r
88                                                         + " csid=" + csid).type("text/plain").build();\r
89                         return new WebApplicationException(response);\r
90                 } else if (e instanceof WebApplicationException) {\r
91                         //\r
92                         // subresource may have already thrown this exception\r
93                         // so just pass it on\r
94                         return (WebApplicationException)e;\r
95                 } else { // e is now instanceof Exception\r
96                         response = Response.status(Response.Status.INTERNAL_SERVER_ERROR)\r
97                                         .entity(serviceMsg).type("text/plain").build();\r
98                         return new WebApplicationException(response);\r
99                 }\r
100         }\r
101     \r
102     @Override\r
103     public DocumentHandler createDocumentHandler(ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx) throws Exception {\r
104         return createDocumentHandler(ctx, ctx.getCommonPartLabel(), getCommonPartClass());\r
105     }\r
106     \r
107     /**\r
108      * Creates the document handler.\r
109      * \r
110      * @param serviceContext the service context\r
111      * @param schemaName the schema name\r
112      * @param commonClass the common class\r
113      * \r
114      * @return the document handler\r
115      * \r
116      * @throws Exception the exception\r
117      */\r
118     public DocumentHandler createDocumentHandler(ServiceContext<PoxPayloadIn, PoxPayloadOut> serviceContext,\r
119                 String schemaName, \r
120                 Class<?> commonClass) throws Exception {\r
121         DocumentHandler result = null;\r
122         \r
123         MultipartServiceContext ctx = (MultipartServiceContext)serviceContext;\r
124         Object commonPart = null;\r
125         if (ctx.getInput() != null) {\r
126                 commonPart = ctx.getInputPart(schemaName);\r
127         }\r
128         result = super.createDocumentHandler(ctx, commonPart);\r
129         \r
130         return result;\r
131     }\r
132     \r
133     /**\r
134      * Creates the document handler.\r
135      * \r
136      * @param ctx the ctx\r
137      * @param commonClass the common class\r
138      * \r
139      * @return the document handler\r
140      * \r
141      * @throws Exception the exception\r
142      */\r
143     public DocumentHandler createDocumentHandler(\r
144                 ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx,\r
145                 Class<Object> commonClass) throws Exception {\r
146         return createDocumentHandler(ctx, ctx.getCommonPartLabel(), commonClass);\r
147     }\r
148     \r
149     /**\r
150      * Creates the contact document handler.\r
151      * \r
152      * @param ctx the ctx\r
153      * @param inAuthority the in authority\r
154      * @param inItem the in item\r
155      * \r
156      * @return the document handler\r
157      * \r
158      * @throws Exception the exception\r
159      */\r
160     private WorkflowDocumentModelHandler createWorkflowDocumentHandler(\r
161                 ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx) throws Exception {\r
162         \r
163         WorkflowDocumentModelHandler docHandler = (WorkflowDocumentModelHandler)createDocumentHandler(ctx,\r
164                         WorkflowClient.SERVICE_COMMONPART_NAME,\r
165                         WorkflowsCommon.class);         \r
166         \r
167         return docHandler;\r
168     }\r
169     \r
170     /*\r
171      * JAX-RS Annotated methods\r
172      */\r
173        \r
174     @GET\r
175     @Path("{csid}/workflow")\r
176     public byte[] getWorkflow(\r
177             @PathParam("csid") String csid) {\r
178         PoxPayloadOut result = null;\r
179 \r
180         try {           \r
181             ServiceContext<PoxPayloadIn, PoxPayloadOut> parentCtx = createServiceContext();\r
182             String parentWorkspaceName = parentCtx.getRepositoryWorkspaceName();\r
183                 \r
184                 MultipartServiceContext ctx = (MultipartServiceContext) createServiceContext(WorkflowClient.SERVICE_NAME);\r
185                 WorkflowDocumentModelHandler handler = createWorkflowDocumentHandler(ctx);\r
186                 ctx.setRespositoryWorkspaceName(parentWorkspaceName); //find the document in the parent's workspace\r
187             getRepositoryClient(ctx).get(ctx, csid, handler);\r
188             result = ctx.getOutput();\r
189         } catch (Exception e) {\r
190             throw bigReThrow(e, ServiceMessages.READ_FAILED + WorkflowClient.SERVICE_PAYLOAD_NAME, csid);\r
191         }\r
192                 \r
193         return result.getBytes();\r
194     }\r
195     \r
196     @PUT\r
197     @Path("{csid}/workflow")\r
198     public byte[] updateWorkflow(@PathParam("csid") String csid, String xmlPayload) {\r
199         PoxPayloadOut result = null;\r
200         try {\r
201                 ServiceContext<PoxPayloadIn, PoxPayloadOut> parentCtx = createServiceContext();\r
202                 String parentWorkspaceName = parentCtx.getRepositoryWorkspaceName();\r
203                 \r
204                 PoxPayloadIn workflowUpdate = new PoxPayloadIn(xmlPayload);\r
205                 MultipartServiceContext ctx = (MultipartServiceContext) createServiceContext(WorkflowClient.SERVICE_NAME, workflowUpdate);\r
206                 WorkflowDocumentModelHandler handler = createWorkflowDocumentHandler(ctx);\r
207                 ctx.setRespositoryWorkspaceName(parentWorkspaceName); //find the document in the parent's workspace\r
208                 getRepositoryClient(ctx).update(ctx, csid, handler);\r
209                 result = ctx.getOutput();\r
210         } catch (Exception e) {\r
211             throw bigReThrow(e, ServiceMessages.UPDATE_FAILED + WorkflowClient.SERVICE_PAYLOAD_NAME, csid);\r
212         }\r
213         return result.getBytes();\r
214     }    \r
215 }\r