Mercurial > dive4elements > framework
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: