2 * This document is a part of the source code and related artifacts
3 * for CollectionSpace, an open source collections management system
4 * for museums and related institutions:
6 * http://www.collectionspace.org
7 * http://wiki.collectionspace.org
9 * Copyright 2009 University of California at Berkeley
11 * Licensed under the Educational Community License (ECL), Version 2.0.
12 * You may not use this file except in compliance with this License.
14 * You may obtain a copy of the ECL 2.0 License at
16 * https://source.collectionspace.org/collection-space/LICENSE.txt
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an "AS IS" BASIS,
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
24 package org.collectionspace.services.dimension;
26 import javax.ws.rs.Consumes;
27 import javax.ws.rs.GET;
28 import javax.ws.rs.Path;
29 import javax.ws.rs.Produces;
30 import javax.ws.rs.DELETE;
31 import javax.ws.rs.POST;
32 import javax.ws.rs.PUT;
33 import javax.ws.rs.PathParam;
34 import javax.ws.rs.WebApplicationException;
35 import javax.ws.rs.core.Context;
36 import javax.ws.rs.core.MultivaluedMap;
37 import javax.ws.rs.core.Response;
38 import javax.ws.rs.core.UriBuilder;
39 import javax.ws.rs.core.UriInfo;
41 import org.collectionspace.services.client.PoxPayloadIn;
42 import org.collectionspace.services.client.PoxPayloadOut;
43 import org.collectionspace.services.common.AbstractMultiPartCollectionSpaceResourceImpl;
44 //import org.collectionspace.services.dimension.DimensionsCommonList.*;
46 import org.collectionspace.services.common.ClientType;
47 import org.collectionspace.services.common.ServiceMain;
48 //import org.collectionspace.services.common.context.MultipartServiceContext;
49 //import org.collectionspace.services.common.context.MultipartServiceContextFactory;
50 import org.collectionspace.services.common.context.ServiceContext;
51 import org.collectionspace.services.common.document.DocumentNotFoundException;
52 import org.collectionspace.services.common.document.DocumentHandler;
53 import org.jboss.resteasy.util.HttpResponseCodes;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
58 * The Class DimensionResource.
61 @Consumes("application/xml")
62 @Produces("application/xml")
63 public class DimensionResource extends
64 AbstractMultiPartCollectionSpaceResourceImpl {
66 /** The Constant serviceName. */
67 private final static String serviceName = "dimensions";
70 final Logger logger = LoggerFactory.getLogger(DimensionResource.class);
71 //FIXME retrieve client type from configuration
72 /** The Constant CLIENT_TYPE. */
73 final static ClientType CLIENT_TYPE = ServiceMain.getInstance().getClientType();
76 * Instantiates a new dimension resource.
78 public DimensionResource() {
83 * @see org.collectionspace.services.common.AbstractCollectionSpaceResourceImpl#getVersionString()
86 public String getVersionString() {
87 /** The last change revision. */
88 final String lastChangeRevision = "$LastChangedRevision$";
89 return lastChangeRevision;
93 * @see org.collectionspace.services.common.AbstractCollectionSpaceResourceImpl#getServiceName()
96 public String getServiceName() {
101 // public DocumentHandler createDocumentHandler(ServiceContext ctx) throws Exception {
102 // DocumentHandler docHandler = ctx.getDocumentHandler();
103 // if (ctx.getInput() != null) {
104 // Object obj = ((MultipartServiceContext)ctx).getInputPart(ctx.getCommonPartLabel(), DimensionsCommon.class);
105 // if (obj != null) {
106 // docHandler.setCommonPart((DimensionsCommon) obj);
109 // return docHandler;
113 * @see org.collectionspace.services.common.CollectionSpaceResource#getCommonPartClass()
116 public Class<DimensionsCommon> getCommonPartClass() {
117 return DimensionsCommon.class;
121 * Creates the dimension.
123 * @param xmlText an XML payload
125 * @return the response
128 public Response createDimension(String xmlText) {
130 PoxPayloadIn input = new PoxPayloadIn(xmlText);
131 ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext(input);
132 DocumentHandler handler = createDocumentHandler(ctx);
133 String csid = getRepositoryClient(ctx).create(ctx, handler);
134 //dimensionObject.setCsid(csid);
135 UriBuilder path = UriBuilder.fromResource(DimensionResource.class);
136 path.path("" + csid);
137 Response response = Response.created(path.build()).build();
139 } catch (Exception e) {
140 if (logger.isDebugEnabled()) {
141 logger.debug("Caught exception in createDimension", e);
143 Response response = Response.status(
144 Response.Status.INTERNAL_SERVER_ERROR).entity("Create failed").type("text/plain").build();
145 throw new WebApplicationException(response);
150 * Gets the dimension.
152 * @param csid the csid
154 * @return the dimension
158 public byte[] getDimension(
160 @PathParam("csid") String csid) {
161 if (logger.isDebugEnabled()) {
162 logger.debug("getDimension with csid=" + csid);
164 if (csid == null || "".equals(csid)) {
165 logger.error("getDimension: missing csid!");
166 Response response = Response.status(Response.Status.BAD_REQUEST).entity(
167 "get failed on Dimension csid=" + csid).type(
168 "text/plain").build();
169 throw new WebApplicationException(response);
171 PoxPayloadOut result = null;
173 MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
174 ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext(queryParams);
175 DocumentHandler handler = createDocumentHandler(ctx);
176 getRepositoryClient(ctx).get(ctx, csid, handler);
177 result = ctx.getOutput();
178 } catch (DocumentNotFoundException dnfe) {
179 if (logger.isDebugEnabled()) {
180 logger.debug("getDimension", dnfe);
182 Response response = Response.status(Response.Status.NOT_FOUND).entity(
183 "Get failed on Dimension csid=" + csid).type(
184 "text/plain").build();
185 throw new WebApplicationException(response);
186 } catch (Exception e) {
187 if (logger.isDebugEnabled()) {
188 logger.debug("getDimension", e);
190 Response response = Response.status(
191 Response.Status.INTERNAL_SERVER_ERROR).entity("Get failed").type("text/plain").build();
192 throw new WebApplicationException(response);
194 if (result == null) {
195 Response response = Response.status(Response.Status.NOT_FOUND).entity(
196 "Get failed, the requested Dimension CSID:" + csid + ": was not found.").type(
197 "text/plain").build();
198 throw new WebApplicationException(response);
200 return result.getBytes();
204 * Gets the dimension list.
208 * @return the dimension list
211 @Produces("application/xml")
212 public DimensionsCommonList getDimensionList(@Context UriInfo ui) {
213 DimensionsCommonList dimensionObjectList = new DimensionsCommonList();
214 MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
216 ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext(queryParams);
217 DocumentHandler handler = createDocumentHandler(ctx);
218 getRepositoryClient(ctx).getFiltered(ctx, handler);
219 dimensionObjectList = (DimensionsCommonList) handler.getCommonPartList();
220 } catch (Exception e) {
221 if (logger.isDebugEnabled()) {
222 logger.debug("Caught exception in getDimensionList", e);
224 Response response = Response.status(
225 Response.Status.INTERNAL_SERVER_ERROR).entity("Index failed").type("text/plain").build();
226 throw new WebApplicationException(response);
228 return dimensionObjectList;
234 * @param csid the csid
235 * @param xmlText an XML payload
237 * @return the multipart output
241 public byte[] updateDimension(
242 @PathParam("csid") String csid, String xmlText) {
243 if (logger.isDebugEnabled()) {
244 logger.debug("updateDimension with csid=" + csid);
246 if (csid == null || "".equals(csid)) {
247 logger.error("updateDimension: missing csid!");
248 Response response = Response.status(Response.Status.BAD_REQUEST).entity(
249 "update failed on Dimension csid=" + csid).type(
250 "text/plain").build();
251 throw new WebApplicationException(response);
253 PoxPayloadOut result = null;
255 PoxPayloadIn update = new PoxPayloadIn(xmlText);
256 ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext(update);
257 DocumentHandler handler = createDocumentHandler(ctx);
258 getRepositoryClient(ctx).update(ctx, csid, handler);
259 result = ctx.getOutput();
260 } catch (DocumentNotFoundException dnfe) {
261 if (logger.isDebugEnabled()) {
262 logger.debug("Caught exception in updateDimension", dnfe);
264 Response response = Response.status(Response.Status.NOT_FOUND).entity(
265 "Update failed on Dimension csid=" + csid).type(
266 "text/plain").build();
267 throw new WebApplicationException(response);
268 } catch (Exception e) {
269 Response response = Response.status(
270 Response.Status.INTERNAL_SERVER_ERROR).entity("Update failed").type("text/plain").build();
271 throw new WebApplicationException(response);
273 return result.getBytes();
279 * @param csid the csid
281 * @return the response
285 public Response deleteDimension(@PathParam("csid") String csid) {
287 if (logger.isDebugEnabled()) {
288 logger.debug("deleteDimension with csid=" + csid);
290 if (csid == null || "".equals(csid)) {
291 logger.error("deleteDimension: missing csid!");
292 Response response = Response.status(Response.Status.BAD_REQUEST).entity(
293 "delete failed on Dimension csid=" + csid).type(
294 "text/plain").build();
295 throw new WebApplicationException(response);
298 ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext();
299 getRepositoryClient(ctx).delete(ctx, csid);
300 return Response.status(HttpResponseCodes.SC_OK).build();
301 } catch (DocumentNotFoundException dnfe) {
302 if (logger.isDebugEnabled()) {
303 logger.debug("caught exception in deleteDimension", dnfe);
305 Response response = Response.status(Response.Status.NOT_FOUND).entity(
306 "Delete failed on Dimension csid=" + csid).type(
307 "text/plain").build();
308 throw new WebApplicationException(response);
309 } catch (Exception e) {
310 Response response = Response.status(
311 Response.Status.INTERNAL_SERVER_ERROR).entity("Delete failed").type("text/plain").build();
312 throw new WebApplicationException(response);