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 :

http://dive4elements.wald.intevation.org