# HG changeset patch # User Sascha L. Teichmann # Date 1312191700 0 # Node ID 63122b9dee1d4e802b779304234d1371605088f2 # Parent 86dd32b45d87a00eb068cb30e484f9b3dbf54d14 Added interface to listen events in the backend. artifacts/trunk@2435 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 86dd32b45d87 -r 63122b9dee1d ChangeLog --- a/ChangeLog Sun Jul 31 18:43:54 2011 +0000 +++ b/ChangeLog Mon Aug 01 09:41:40 2011 +0000 @@ -1,3 +1,15 @@ +2011-08-01 Sascha L. Teichmann + + * artifact-database/src/main/java/de/intevation/artifactdatabase/BackendListener.java: + New. Interface to listener for backend events. TODO: Implement more + events. + + * artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultBackendListener.java: + New. Trivial implementation of BackendListener. + + * artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java: + Added list of backend listeners. TODO: Add them at boot time. + 2011-07-31 Sascha L. Teichmann * artifact-database/pom.xml: Bumped Apache DBCP up to 1.4 diff -r 86dd32b45d87 -r 63122b9dee1d artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java --- a/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java Sun Jul 31 18:43:54 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java Mon Aug 01 09:41:40 2011 +0000 @@ -28,10 +28,13 @@ import java.sql.Timestamp; import java.sql.Types; +import java.util.List; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.concurrent.CopyOnWriteArrayList; + import org.apache.log4j.Logger; import org.w3c.dom.Document; @@ -134,6 +137,8 @@ protected SQLExecutor sqlExecutor; + protected List listeners; + protected DBConfig config; /** @@ -256,6 +261,7 @@ * Default constructor */ public Backend() { + listeners = new CopyOnWriteArrayList(); } public Backend(DBConfig config) { @@ -348,6 +354,10 @@ SQL_ALL_ARTIFACTS = sql.get("all.artifacts"); } + public void addListener(BackendListener listener) { + listeners.add(listener); + } + /** * Sets the factory lookup mechanism to decouple ArtifactDatabase * and Backend. @@ -718,9 +728,17 @@ throw new RuntimeException("failed insert artifact into database"); } + fireArtifactStored(artifact); + return id[0]; } + protected void fireArtifactStored(Artifact artifact) { + for (BackendListener listener: listeners) { + listener.artifactStored(artifact, this); + } + } + /** * Touches the access timestamp of a given artifact to prevent * that it will be removed from the database by the database cleaner. @@ -744,7 +762,7 @@ * artifact. */ public void store(final PersistentArtifact artifact) { - sqlExecutor.new Instance() { + boolean success = sqlExecutor.new Instance() { public boolean doIt() throws SQLException { prepareStatement(SQL_UPDATE); stmnt.setInt(2, artifact.getId()); @@ -759,6 +777,10 @@ return true; } }.runWrite(); + + if (success) { + fireArtifactStored(artifact.getArtifact()); + } } public User createUser( diff -r 86dd32b45d87 -r 63122b9dee1d artifact-database/src/main/java/de/intevation/artifactdatabase/BackendListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/BackendListener.java Mon Aug 01 09:41:40 2011 +0000 @@ -0,0 +1,9 @@ +package de.intevation.artifactdatabase; + +import de.intevation.artifacts.Artifact; + +public interface BackendListener +{ + void artifactStored(Artifact artifact, Backend backend); +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 86dd32b45d87 -r 63122b9dee1d artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultBackendListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultBackendListener.java Mon Aug 01 09:41:40 2011 +0000 @@ -0,0 +1,21 @@ +package de.intevation.artifactdatabase; + +import de.intevation.artifacts.Artifact; + +import org.apache.log4j.Logger; + +public class DefaultBackendListener +implements BackendListener +{ + private static Logger log = Logger.getLogger(DefaultBackendListener.class); + + public DefaultBackendListener() { + } + + @Override + public void artifactStored(Artifact artifact, Backend backend) { + log.debug("artifactStored"); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : +