diff artifact-database/src/main/java/de/intevation/artifactdatabase/rest/CreateResource.java @ 26:83a059c204f8

Connected /create with artifact db. artifacts/trunk@61 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 10 Sep 2009 12:29:57 +0000
parents 72abee95fd64
children c2d53bd30ab8
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/rest/CreateResource.java	Thu Sep 10 09:23:53 2009 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/rest/CreateResource.java	Thu Sep 10 12:29:57 2009 +0000
@@ -22,6 +22,10 @@
 
 import java.io.IOException;
 
+import de.intevation.artifacts.ArtifactNamespaceContext;
+import de.intevation.artifacts.ArtifactDatabase;
+import de.intevation.artifacts.Artifact;
+
 /**
  * @author Sascha L. Teichmann (sascha.teichmann@intevation)
  */
@@ -32,6 +36,12 @@
 
     public static final String PATH = "/create";
 
+    public static final String XPATH_FACTORY = "/action/factory/@name";
+
+    public static final String NO_FACTORY_MESSAGE = "No factory given";
+
+    public static final String NO_ARTIFACT_CREATED = "No artifact created";
+
     @Post
     public Representation represent() {
 
@@ -50,8 +60,35 @@
             response.setStatus(Status.CLIENT_ERROR_BAD_REQUEST, ioe);
             return new EmptyRepresentation();
         }
+
+        String factory = XMLUtils.xpathString(
+            inputDocument,
+            XPATH_FACTORY,
+            ArtifactNamespaceContext.INSTANCE);
+
+        if (factory == null || factory.length() == 0) {
+            Response response = getResponse();
+            response.setStatus(Status.CLIENT_ERROR_BAD_REQUEST, NO_FACTORY_MESSAGE);
+            return new EmptyRepresentation();
+        }
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("Create artifact with factory '" + factory + "'");
+        }
+
+        ArtifactDatabase db = (ArtifactDatabase)getContext()
+            .getAttributes().get("database");
+
+        Artifact artifact = db.createArtifactWithFactory(factory);
+
+        if (artifact == null) {
+            Response response = getResponse();
+            response.setStatus(Status.CLIENT_ERROR_UNPROCESSABLE_ENTITY, NO_ARTIFACT_CREATED);
+            return new EmptyRepresentation();
+        }
         
-        Document outputDocument = XMLUtils.newDocument();
+        Document outputDocument = artifact.describe(
+            db.getArtifactContext());
 
         return new DomRepresentation(
             MediaType.APPLICATION_XML, outputDocument);

http://dive4elements.wald.intevation.org