# HG changeset patch # User Sascha L. Teichmann # Date 1311863161 0 # Node ID 2b05c4a0c6fd3c6717b1de6afa674c8edc8a1b96 # Parent 4ea5f5a2284e15a79d0f976d6d5ca52e511b6724 Datacage: clear database before initial scan flys-artifacts/trunk@2416 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 4ea5f5a2284e -r 2b05c4a0c6fd flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Thu Jul 28 13:32:27 2011 +0000 +++ b/flys-artifacts/ChangeLog Thu Jul 28 14:26:01 2011 +0000 @@ -1,3 +1,9 @@ +2011-07-27 Sascha L. Teichmann + + * src/main/java/de/intevation/flys/artifacts/datacage/Datacage.java, + src/main/resources/datacage-sql/org-h2-driver.properties: Clear database + before initial scan. + 2011-07-27 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/datacage/DBConnection.java: diff -r 4ea5f5a2284e -r 2b05c4a0c6fd flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Datacage.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Datacage.java Thu Jul 28 13:32:27 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Datacage.java Thu Jul 28 14:26:01 2011 +0000 @@ -1,5 +1,7 @@ package de.intevation.flys.artifacts.datacage; +import java.sql.SQLException; + import de.intevation.artifacts.GlobalContext; import de.intevation.artifactdatabase.db.SQL; @@ -7,6 +9,14 @@ import de.intevation.artifactdatabase.LifetimeListener; +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.ArtifactDatabase; +import de.intevation.artifacts.ArtifactDatabaseException; + +import de.intevation.flys.artifacts.FLYSArtifact; + +import de.intevation.artifacts.common.utils.LRUCache; + import org.apache.log4j.Logger; import org.w3c.dom.Document; @@ -16,8 +26,51 @@ { private static Logger log = Logger.getLogger(Datacage.class); + public static final String ARTEFACT_DATABASE_KEY = + "global.artifact.database"; + + private String SQL_DELETE_ALL_USERS = "delete.all.users"; + private String SQL_INSERT_USER = "insert.user"; + protected SQLExecutor sqlExecutor; + public class InitialScan + implements ArtifactDatabase.ArtifactLoadedCallback + { + protected LRUCache users; + + public InitialScan() { + } + + @Override + public void artifactLoaded( + String userId, + String collectionId, + String artifactId, + Artifact artifact + ) { + if (!(artifact instanceof FLYSArtifact)) { + log.warn("ignoring none FLYS artifacts"); + return; + } + + FLYSArtifact flysArtifact = (FLYSArtifact)artifact; + // TODO: implement me! + } + + public boolean scan(ArtifactDatabase adb) { + try { + adb.loadAllArtifacts(this); + } + catch (ArtifactDatabaseException ade) { + log.error(ade); + return false; + } + return true; + } + } // class InitialScan + + public Datacage() { } @@ -30,14 +83,55 @@ } protected void setupSQL(SQL sql) { - log.debug("implement me!"); + SQL_DELETE_ALL_USERS = sql.get(SQL_DELETE_ALL_USERS); + SQL_INSERT_USER = sql.get(SQL_INSERT_USER); } @Override public void systemUp(GlobalContext context) { log.debug("systemUp"); + initialScan(context); } + protected void initialScan(GlobalContext context) { + log.debug("initialScan"); + + Object adbObject = context.get(ARTEFACT_DATABASE_KEY); + + if (!(adbObject instanceof ArtifactDatabase)) { + log.error("missing artefact database. Cannot scan"); + return; + } + + ArtifactDatabase adb = (ArtifactDatabase)adbObject; + + if (!cleanDatabase()) { + log.error("cleaning database failed"); + return; + } + + InitialScan is = new InitialScan(); + + if (!is.scan(adb)) { + log.error("initial scan failed"); + return; + } + + } + + protected boolean cleanDatabase() { + + return sqlExecutor.new Instance() { + @Override + public boolean doIt() throws SQLException { + prepareStatement(SQL_DELETE_ALL_USERS); + stmnt.execute(); + return true; + } + }.runWrite(); + } + + @Override public void systemDown(GlobalContext context) { log.debug("systemDown"); diff -r 4ea5f5a2284e -r 2b05c4a0c6fd flys-artifacts/src/main/resources/datacage-sql/org-h2-driver.properties --- a/flys-artifacts/src/main/resources/datacage-sql/org-h2-driver.properties Thu Jul 28 13:32:27 2011 +0000 +++ b/flys-artifacts/src/main/resources/datacage-sql/org-h2-driver.properties Thu Jul 28 14:26:01 2011 +0000 @@ -1,1 +1,2 @@ -# WRITE ME! +delete.all.users = DELETE FROM users +insert.user = INSERT INTO users (gid) VALUES (?)