diff artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java @ 292:39c0ff00d188

Introduced a hook concept - currently used for 'post-feed' and 'post-advance'. artifacts/trunk@2327 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 13 Jul 2011 13:12:08 +0000
parents 084d68974d4a
children a367a0d011af
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java	Wed Jul 13 11:00:30 2011 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java	Wed Jul 13 13:12:08 2011 +0000
@@ -23,6 +23,7 @@
 import de.intevation.artifacts.CallContext;
 import de.intevation.artifacts.CallMeta;
 import de.intevation.artifacts.CollectionItem;
+import de.intevation.artifacts.Hook;
 import de.intevation.artifacts.Service;
 import de.intevation.artifacts.ServiceFactory;
 import de.intevation.artifacts.User;
@@ -38,6 +39,7 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.xml.xpath.XPathConstants;
@@ -418,6 +420,16 @@
     protected CallContext.Listener callContextListener;
 
     /**
+     * Hooks that are executed after an artifact has been fed.
+     */
+    protected List<Hook> postFeedHooks;
+
+    /**
+     * Hooks that are executed after an artifact has advanced.
+     */
+    protected List<Hook> postAdvanceHooks;
+
+    /**
      * Default constructor.
      */
     public ArtifactDatabaseImpl() {
@@ -449,6 +461,7 @@
         setupServices(bootstrap);
         setupUserFactory(bootstrap);
         setupCallContextListener(bootstrap);
+        setupHooks(bootstrap);
 
         context      = bootstrap.getContext();
         exportSecret = bootstrap.getExportSecret();
@@ -466,6 +479,15 @@
         this.callContextListener = callContextListener;
     }
 
+
+    public void setPostFeedHook(List<Hook> postFeedHooks) {
+        this.postFeedHooks = postFeedHooks;
+    }
+
+    public void setPostAdvanceHook(List<Hook> postAdvanceHooks) {
+        this.postAdvanceHooks = postAdvanceHooks;
+    }
+
     /**
      * Used to extract the artifact collection factory from bootstrap.
      *
@@ -509,6 +531,12 @@
         setCallContextListener(bootstrap.getCallContextListener());
     }
 
+
+    protected void setupHooks(FactoryBootstrap bootstrap) {
+        setPostFeedHook(bootstrap.getPostFeedHooks());
+        setPostAdvanceHook(bootstrap.getPostAdvanceHooks());
+    }
+
     /**
      * Used to extract the user factory from the bootstrap.
      */
@@ -734,7 +762,16 @@
             artifact);
 
         try {
-            return artifact.getArtifact().advance(target, cc);
+            Artifact art = artifact.getArtifact();
+            Document res = art.advance(target, cc);
+
+            if (postAdvanceHooks != null) {
+                for (Hook hook: postAdvanceHooks) {
+                    hook.execute(art, cc);
+                }
+            }
+
+            return res;
         }
         finally {
             cc.postCall();
@@ -758,7 +795,16 @@
             artifact);
 
         try {
-            return artifact.getArtifact().feed(data, cc);
+            Artifact art = artifact.getArtifact();
+            Document res = art.feed(data, cc);
+
+            if (postFeedHooks != null) {
+                for (Hook hook: postFeedHooks) {
+                    hook.execute(art, cc);
+                }
+            }
+
+            return res;
         }
         finally {
             cc.postCall();

http://dive4elements.wald.intevation.org