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