Mercurial > dive4elements > framework
diff artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java @ 230:fbd57d2eeaef
Changed semantics of locked artifact ids.
artifacts/trunk@1634 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 31 Mar 2011 14:48:28 +0000 |
parents | b2115f484edb |
children | 1ea35226a6de |
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java Thu Mar 31 08:58:42 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/DatabaseCleaner.java Thu Mar 31 14:48:28 2011 +0000 @@ -19,6 +19,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.Collections; import javax.sql.DataSource; @@ -57,6 +59,10 @@ } // interface ArtifactReviver + public interface LockedIdsProvider { + Set<Integer> getLockedIds(); + } // interface LockedIdsProvider + private static Logger logger = Logger.getLogger(DatabaseCleaner.class); /** @@ -66,6 +72,8 @@ */ public static final int MAX_ROWS = 50; + public static final Set<Integer> EMPTY_IDS = Collections.emptySet(); + /** * The SQL statement to select the outdated artifacts. */ @@ -110,7 +118,7 @@ * A specialized Id filter which only delete some artifacts. * This is used to prevent deletion of living artifacts. */ - protected Id.Filter filter; + protected LockedIdsProvider lockedIdsProvider; /** * The reviver used to bring the dead artifact on last @@ -144,8 +152,8 @@ * would create severe internal problems. * @param filter */ - public void setFilter(Id.Filter filter) { - this.filter = filter; + public void setLockedIdsProvider(LockedIdsProvider lockedIdsProvider) { + this.lockedIdsProvider = lockedIdsProvider; } /** @@ -179,14 +187,14 @@ return SLEEP_DEFAULT; } - private static final class IdData - extends Id - { + private static final class IdData { + + int id; byte [] data; String factoryName; public IdData(int id, String factoryName, byte [] data) { - super(id); + this.id = id; this.factoryName = factoryName; this.data = data; } @@ -224,15 +232,22 @@ fetchIds.setMaxRows(MAX_ROWS); for (;;) { - List ids = new ArrayList(); + List<IdData> ids = new ArrayList<IdData>(); + + Set<Integer> filter = lockedIdsProvider != null + ? lockedIdsProvider.getLockedIds() + : EMPTY_IDS; result = fetchIds.executeQuery(); while (result.next()) { - ids.add(new IdData( - result.getInt(1), - result.getString(2), - result.getBytes(3))); + int id = result.getInt(1); + if (!filter.contains(id)) { + ids.add(new IdData( + id, + result.getString(2), + result.getBytes(3))); + } } result.close(); result = null; @@ -241,12 +256,8 @@ break; } - if (filter != null) { - ids = filter.filterIds(ids); - } - for (int i = ids.size()-1; i >= 0; --i) { - IdData idData = (IdData)ids.get(i); + IdData idData = ids.get(i); Artifact artifact = reviver.reviveArtifact( idData.factoryName, idData.data); idData.data = null;