diff artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java @ 175:16e6e661e6bf

Added code to delete collections. artifacts/trunk@1401 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 04 Mar 2011 17:11:40 +0000
parents 25d472a67a9f
children a0eff2227588
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java	Fri Mar 04 16:43:03 2011 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java	Fri Mar 04 17:11:40 2011 +0000
@@ -146,6 +146,15 @@
     public static final String SQL_COLLECTIONS_CREATION_TIME =
         SQL.get("collection.creation.time");
 
+    public static final String SQL_COLLECTIONS_ID_BY_GID =
+        SQL.get("collection.creation.time");
+
+    public static final String SQL_DELETE_COLLECTION_ITEMS =
+        SQL.get("delete.collection.items");
+
+    public static final String SQL_DELETE_COLLECTION =
+        SQL.get("delete.collection");
+
     /** The singleton.*/
     protected static Backend instance;
 
@@ -1044,9 +1053,46 @@
     }
 
 
-    public boolean deleteCollection(String collectionId) {
-        // TODO: Implement me!
-        return false;
+    public boolean deleteCollection(final String collectionId) {
+        if (!StringUtils.checkUUID(collectionId)) {
+            logger.debug("Invalid collection id: '" + collectionId + "'");
+            return false;
+        }
+        SQLExecutor exec = new SQLExecutor() {
+            public boolean doIt() throws SQLException {
+                // fetch collection id
+                prepareStatement(SQL_COLLECTIONS_ID_BY_GID);
+                stmnt.setString(1, collectionId);
+                result = stmnt.executeQuery();
+                if (!result.next()) {
+                    logger.debug("No such collection: " + collectionId);
+                    return false;
+                }
+                int id = result.getInt(1);
+                reset();
+
+                // outdate artifacts that are only in this collection
+                prepareStatement(SQL_OUTDATE_ARTIFACTS_COLLECTION);
+                stmnt.setInt(1, id);
+                stmnt.setInt(2, id);
+                stmnt.execute();
+                reset();
+
+                // delete the collection items
+                prepareStatement(SQL_DELETE_COLLECTION_ITEMS);
+                stmnt.setInt(1, id);
+                stmnt.execute();
+                reset();
+
+                // delete the collection
+                prepareStatement(SQL_DELETE_COLLECTION);
+                stmnt.setInt(1, id);
+                stmnt.execute();
+                conn.commit();
+                return true;
+            }
+        };
+        return exec.runWrite();
     }
 
     public Document getCollectionAttribute(

http://dive4elements.wald.intevation.org