diff artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java @ 41:5e4bc24ea438

Made serilization more flexible. DB update required!!! Fixed problem with touching artifacts in database. artifacts/trunk@119 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 23 Sep 2009 16:55:12 +0000
parents f7d2cd59a0d5
children 4ae4dc99127d
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java	Wed Sep 23 08:27:35 2009 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java	Wed Sep 23 16:55:12 2009 +0000
@@ -24,7 +24,7 @@
  *  @author Sascha L. Teichmann
  */
 public class ArtifactDatabaseImpl
-implements   ArtifactDatabase, Id.Filter
+implements   ArtifactDatabase, Id.Filter, Backend.FactoryLookup
 {
     private static Logger logger =
         Logger.getLogger(ArtifactDatabaseImpl.class);
@@ -139,6 +139,10 @@
     public ArtifactDatabaseImpl() {
     }
 
+    public ArtifactDatabaseImpl(FactoryBootstrap bootstrap) {
+        this(bootstrap, null);
+    }
+
     public ArtifactDatabaseImpl(FactoryBootstrap bootstrap, Backend backend) {
 
         backgroundIds = new HashSet();
@@ -162,7 +166,14 @@
 
         context = bootstrap.getContext();
 
-        this.backend = backend;
+        wireWithBackend(backend);
+    }
+
+    public void wireWithBackend(Backend backend) {
+        if (backend != null) {
+            this.backend = backend;
+            backend.setFactoryLookup(this);
+        }
     }
 
     protected void fromBackground(PersistentArtifact artifact, int action) {
@@ -212,11 +223,14 @@
         return factoryNamesAndDescription;
     }
 
+    public ArtifactFactory getArtifactFactory(String factoryName) {
+        return (ArtifactFactory)name2factory.get(factoryName);
+    }
+
     public Document createArtifactWithFactory(String factoryName)
         throws ArtifactDatabaseException 
     {
-        ArtifactFactory factory = (ArtifactFactory)name2factory.get(
-            factoryName);
+        ArtifactFactory factory = getArtifactFactory(factoryName);
 
         if (factory == null) {
             throw new ArtifactDatabaseException(NO_SUCH_FACTORY);
@@ -235,6 +249,7 @@
         try {
             persistentArtifact = backend.storeInitially(
                 artifact,
+                factory,
                 factory.timeToLiveUntouched(artifact, context));
         }
         catch (Exception e) {

http://dive4elements.wald.intevation.org