Mercurial > dive4elements > framework
diff artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java @ 310:63122b9dee1d
Added interface to listen events in the backend.
artifacts/trunk@2435 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 01 Aug 2011 09:41:40 +0000 |
parents | 86dd32b45d87 |
children | 1d517e051e95 |
line wrap: on
line diff
--- 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<BackendListener> listeners; + protected DBConfig config; /** @@ -256,6 +261,7 @@ * Default constructor */ public Backend() { + listeners = new CopyOnWriteArrayList<BackendListener>(); } 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(