sascha@982: package de.intevation.flys.artifacts.datacage; sascha@982: sascha@984: import java.sql.SQLException; sascha@984: sascha@982: import de.intevation.artifacts.GlobalContext; sascha@982: sascha@983: import de.intevation.artifactdatabase.db.SQL; sascha@983: import de.intevation.artifactdatabase.db.SQLExecutor; sascha@983: sascha@982: import de.intevation.artifactdatabase.LifetimeListener; sascha@982: sascha@984: import de.intevation.artifacts.Artifact; sascha@984: import de.intevation.artifacts.ArtifactDatabase; sascha@984: import de.intevation.artifacts.ArtifactDatabaseException; sascha@984: sascha@984: import de.intevation.flys.artifacts.FLYSArtifact; sascha@984: sascha@984: import de.intevation.artifacts.common.utils.LRUCache; sascha@984: sascha@982: import org.apache.log4j.Logger; sascha@982: sascha@982: import org.w3c.dom.Document; sascha@982: sascha@982: public class Datacage sascha@982: implements LifetimeListener sascha@982: { sascha@982: private static Logger log = Logger.getLogger(Datacage.class); sascha@982: sascha@984: public static final String ARTEFACT_DATABASE_KEY = sascha@984: "global.artifact.database"; sascha@984: sascha@984: private String SQL_DELETE_ALL_USERS = "delete.all.users"; sascha@984: private String SQL_INSERT_USER = "insert.user"; sascha@984: sascha@983: protected SQLExecutor sqlExecutor; sascha@983: sascha@984: public class InitialScan sascha@984: implements ArtifactDatabase.ArtifactLoadedCallback sascha@984: { sascha@984: protected LRUCache users; sascha@984: sascha@984: public InitialScan() { sascha@984: } sascha@984: sascha@984: @Override sascha@984: public void artifactLoaded( sascha@984: String userId, sascha@984: String collectionId, sascha@984: String artifactId, sascha@984: Artifact artifact sascha@984: ) { sascha@984: if (!(artifact instanceof FLYSArtifact)) { sascha@984: log.warn("ignoring none FLYS artifacts"); sascha@984: return; sascha@984: } sascha@984: sascha@984: FLYSArtifact flysArtifact = (FLYSArtifact)artifact; sascha@984: // TODO: implement me! sascha@984: } sascha@984: sascha@984: public boolean scan(ArtifactDatabase adb) { sascha@984: try { sascha@984: adb.loadAllArtifacts(this); sascha@984: } sascha@984: catch (ArtifactDatabaseException ade) { sascha@984: log.error(ade); sascha@984: return false; sascha@984: } sascha@984: return true; sascha@984: } sascha@984: } // class InitialScan sascha@984: sascha@984: sascha@982: public Datacage() { sascha@982: } sascha@982: sascha@982: @Override sascha@982: public void setup(Document document) { sascha@982: log.debug("setup"); sascha@983: DBConfig config = DBConfig.getInstance(); sascha@983: setupSQL(config.getSQL()); sascha@983: sqlExecutor = new SQLExecutor(config.getDBConnection()); sascha@983: } sascha@983: sascha@983: protected void setupSQL(SQL sql) { sascha@984: SQL_DELETE_ALL_USERS = sql.get(SQL_DELETE_ALL_USERS); sascha@984: SQL_INSERT_USER = sql.get(SQL_INSERT_USER); sascha@982: } sascha@982: sascha@982: @Override sascha@982: public void systemUp(GlobalContext context) { sascha@982: log.debug("systemUp"); sascha@984: initialScan(context); sascha@982: } sascha@982: sascha@984: protected void initialScan(GlobalContext context) { sascha@984: log.debug("initialScan"); sascha@984: sascha@984: Object adbObject = context.get(ARTEFACT_DATABASE_KEY); sascha@984: sascha@984: if (!(adbObject instanceof ArtifactDatabase)) { sascha@984: log.error("missing artefact database. Cannot scan"); sascha@984: return; sascha@984: } sascha@984: sascha@984: ArtifactDatabase adb = (ArtifactDatabase)adbObject; sascha@984: sascha@984: if (!cleanDatabase()) { sascha@984: log.error("cleaning database failed"); sascha@984: return; sascha@984: } sascha@984: sascha@984: InitialScan is = new InitialScan(); sascha@984: sascha@984: if (!is.scan(adb)) { sascha@984: log.error("initial scan failed"); sascha@984: return; sascha@984: } sascha@984: sascha@984: } sascha@984: sascha@984: protected boolean cleanDatabase() { sascha@984: sascha@984: return sqlExecutor.new Instance() { sascha@984: @Override sascha@984: public boolean doIt() throws SQLException { sascha@984: prepareStatement(SQL_DELETE_ALL_USERS); sascha@984: stmnt.execute(); sascha@984: return true; sascha@984: } sascha@984: }.runWrite(); sascha@984: } sascha@984: sascha@984: sascha@982: @Override sascha@982: public void systemDown(GlobalContext context) { sascha@982: log.debug("systemDown"); sascha@982: } sascha@982: } sascha@982: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :