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(

http://dive4elements.wald.intevation.org