Mercurial > dive4elements > framework
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();