Mercurial > dive4elements > framework
diff artifact-database/src/main/java/de/intevation/artifactdatabase/rest/ArtifactOutResource.java @ 143:7e20702a90ed
Implemented an abstract class for the output of artifacts and collections. Added a CollectionOutResource.
artifacts/trunk@1368 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 02 Mar 2011 16:02:47 +0000 |
parents | 7fc0650f194c |
children | d9a99b28a847 |
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/rest/ArtifactOutResource.java Wed Mar 02 15:10:34 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/rest/ArtifactOutResource.java Wed Mar 02 16:02:47 2011 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 by Intevation GmbH + * Copyright (c) 2010, 2011 by Intevation GmbH * * This program is free software under the LGPL (>=v2.1) * Read the file LGPL.txt coming with the software for details @@ -8,112 +8,57 @@ package de.intevation.artifactdatabase.rest; -import de.intevation.artifactdatabase.XMLUtils; - import de.intevation.artifacts.ArtifactDatabase; import de.intevation.artifacts.ArtifactDatabaseException; -import de.intevation.artifacts.ArtifactNamespaceContext; - -import java.io.IOException; +import de.intevation.artifacts.CallMeta; import org.apache.log4j.Logger; import org.restlet.Request; -import org.restlet.Response; - -import org.restlet.data.MediaType; -import org.restlet.data.Status; - -import org.restlet.ext.xml.DomRepresentation; - -import org.restlet.representation.EmptyRepresentation; -import org.restlet.representation.Representation; - -import org.restlet.resource.ResourceException; import org.w3c.dom.Document; /** * Resource to serve the out()-outputs of artifacts. * @author <a href="mailto:sascha.teichmann@intevation">Sascha L. Teichmann</a> + * @author <a href="mailto:ingo.weinzierl@intevation">Ingo Weinzierl</a> */ public class ArtifactOutResource -extends BaseResource +extends BaseOutResource { /** * server URL where to find the resource. */ public static final String PATH = "/artifact/{uuid}/{type}"; - /** - * XPath to figure out the MIME type of the requested result. - */ - public static final String XPATH_MIME_TYPE = - "/art:action/art:out/art:mime-type/@value"; - - /** - * Default result MIME type: octet stream - */ - public static final MediaType DEFAULT_MIME_TYPE = - MediaType.APPLICATION_OCTET_STREAM; - private static Logger logger = Logger.getLogger(ArtifactOutResource.class); - @Override - protected Representation innerPost(Representation requestRepr) - throws ResourceException - { - Document inputDocument = null; - try { - DomRepresentation input = new DomRepresentation(requestRepr); - input.setNamespaceAware(true); - inputDocument = input.getDocument(); - } - catch (IOException ioe) { - logger.error(ioe.getMessage()); - Response response = getResponse(); - response.setStatus(Status.CLIENT_ERROR_BAD_REQUEST, ioe); - return new EmptyRepresentation(); - } - ArtifactDatabase db = (ArtifactDatabase)getContext() - .getAttributes().get("database"); - + /** + * Returns the identifier of the collection. + * + * @return the identifier of the collection. + */ + protected String getIdentifier() { Request request = getRequest(); - String identifier = (String)request.getAttributes().get("uuid"); - - if (logger.isDebugEnabled()) { - logger.debug("looking for artifact id '" + identifier + "'"); - } - - String mimeTypeString = XMLUtils.xpathString( - inputDocument, - XPATH_MIME_TYPE, - ArtifactNamespaceContext.INSTANCE); - - MediaType mimeType = DEFAULT_MIME_TYPE; + return (String) request.getAttributes().get("uuid"); + } - if (mimeTypeString != null && mimeTypeString.length() != 0) { - try { - mimeType = MediaType.valueOf(mimeTypeString); - } - catch (Exception e) { - logger.error(e.getLocalizedMessage()); - } - } - try { - return new OutRepresentation( - mimeType, - db.out(identifier, inputDocument, getCallMeta())); - } - catch (ArtifactDatabaseException adbe) { - Response response = getResponse(); - response.setStatus( - Status.CLIENT_ERROR_NOT_FOUND, adbe.getMessage()); - return new EmptyRepresentation(); - } + /** + * Call the ArtifactDatabase.out method. + */ + protected ArtifactDatabase.DeferredOutput doOut( + String identifier, + Document input, + ArtifactDatabase db, + CallMeta meta) + throws ArtifactDatabaseException + { + logger.debug("ArtifactOutResource.doOut"); + + return db.out(identifier, input, meta); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :