diff artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java @ 70:ce488c1d3fc4

Serve services over artifact database. artifacts/trunk@597 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 22 Jan 2010 11:08:40 +0000
parents 541814404822
children d4c4c23847f5
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java	Fri Jan 22 10:19:27 2010 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java	Fri Jan 22 11:08:40 2010 +0000
@@ -1,26 +1,28 @@
 package de.intevation.artifactdatabase;
 
+import de.intevation.artifactdatabase.Backend.PersistentArtifact;
+
+import de.intevation.artifacts.Artifact;
+import de.intevation.artifacts.ArtifactDatabase;
+import de.intevation.artifacts.ArtifactDatabaseException;
+import de.intevation.artifacts.ArtifactFactory;
+import de.intevation.artifacts.CallContext;
+import de.intevation.artifacts.CallMeta;
+import de.intevation.artifacts.Service;
+import de.intevation.artifacts.ServiceFactory;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.ArrayList;
 import java.util.List;
 
-import de.intevation.artifacts.ArtifactDatabaseException;
-import de.intevation.artifacts.ArtifactDatabase;
-import de.intevation.artifacts.ArtifactFactory;
-import de.intevation.artifacts.Artifact;
-import de.intevation.artifacts.CallContext;
-import de.intevation.artifacts.CallMeta;
-
-import de.intevation.artifactdatabase.Backend.PersistentArtifact;
-
 import org.apache.log4j.Logger;
 
 import org.w3c.dom.Document;
 
-import java.io.OutputStream;
-import java.io.IOException;
-
 /**
  *  @author Sascha L. Teichmann
  */
@@ -48,6 +50,9 @@
     public static final String INTERNAL_ERROR =
         "Creation of artifact failed";
 
+    public static final String NO_SUCH_SERVICE =
+        "No such service";
+
     public class CallContextImpl
     implements   CallContext
     {
@@ -163,6 +168,9 @@
     protected String [][] factoryNamesAndDescription;
     protected HashMap     name2factory;
 
+    protected String [][] serviceNamesAndDescription;
+    protected HashMap     name2service;
+
     protected Backend     backend;
     protected Object      context;
 
@@ -178,6 +186,16 @@
     public ArtifactDatabaseImpl(FactoryBootstrap bootstrap, Backend backend) {
 
         backgroundIds = new HashSet();
+
+        setupArtifactFactories(bootstrap);
+        setupServices(bootstrap);
+
+        context = bootstrap.getContext();
+
+        wireWithBackend(backend);
+    }
+
+    protected void setupArtifactFactories(FactoryBootstrap bootstrap) {
         name2factory  = new HashMap();
 
         ArtifactFactory [] factories = bootstrap.getArtifactFactories();
@@ -195,10 +213,32 @@
 
             name2factory.put(name, factory);
         }
+    }
 
-        context = bootstrap.getContext();
+    protected void setupServices(FactoryBootstrap bootstrap) {
 
-        wireWithBackend(backend);
+        name2service  = new HashMap();
+
+        ServiceFactory [] serviceFactories =
+            bootstrap.getServiceFactories();
+
+        serviceNamesAndDescription =
+            new String[serviceFactories.length][];
+
+        for (int i = 0; i < serviceFactories.length; ++i) {
+            ServiceFactory factory = serviceFactories[i];
+
+            String name        = factory.getName();
+            String description = factory.getDescription();
+
+            serviceNamesAndDescription[i] =
+                new String [] { name, description };
+
+            name2service.put(
+                name,
+                factory.createService(bootstrap.getContext()));
+        }
+
     }
 
     public void wireWithBackend(Backend backend) {
@@ -384,11 +424,23 @@
     }
 
     public String [][] serviceNamesAndDescriptions() {
-        throw new IllegalArgumentException("Describing services is not implemented yet");
+        return serviceNamesAndDescription;
     }
 
-    public Document process(String service, Document input, CallMeta callMeta) {
-        throw new IllegalArgumentException("Service processing is not implemented yet");
+    public Document process(
+        String   serviceName, 
+        Document input,
+        CallMeta callMeta
+    )
+    throws ArtifactDatabaseException
+    {
+        Service service = (Service)name2service.get(serviceName);
+
+        if (service == null) {
+            throw new ArtifactDatabaseException(NO_SUCH_SERVICE);
+        }
+
+        return service.process(input, context, callMeta);
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

http://dive4elements.wald.intevation.org