Mercurial > dive4elements > framework
diff artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java @ 253:a2df2b48d2aa
Enabled the artifact database to handle requests specific to collection attributes and collection item attributes.
artifacts/trunk@1746 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 26 Apr 2011 07:43:40 +0000 |
parents | 6de74b0b878e |
children | 22a90706d32d |
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java Tue Apr 26 06:56:01 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java Tue Apr 26 07:43:40 2011 +0000 @@ -168,6 +168,12 @@ public static final String SQL_COLLECTION_ITEMS_INSERT = SQL.get("collection.items.insert"); + public static final String SQL_COLLECTION_GET_ATTRIBUTE = + SQL.get("collection.get.attribute"); + + public static final String SQL_COLLECTION_SET_ATTRIBUTE = + SQL.get("collection.set.attribute"); + public static final String SQL_COLLECTION_ITEM_GET_ATTRIBUTE = SQL.get("collection.item.get.attribute"); @@ -1202,6 +1208,70 @@ return exec.runWrite(); } + public Document getCollectionAttribute(final String collectionId) { + if (!isValidIdentifier(collectionId)) { + logger.debug("collection id is not valid: " + collectionId); + } + + final byte[][] data = new byte[1][1]; + + SQLExecutor exec = new SQLExecutor() { + public boolean doIt() throws SQLException { + prepareStatement(SQL_COLLECTION_GET_ATTRIBUTE); + stmnt.setString(1, collectionId); + result = stmnt.executeQuery(); + if (!result.next()) { + logger.debug("No such collection."); + return false; + } + + data[0] = result.getBytes(1); + return true; + } + }; + + return exec.runRead() + ? XMLUtils.fromByteArray(data[0], true) + : null; + } + + public boolean setCollectionAttribute( + final String collectionId, + Document attribute + ) { + if (!isValidIdentifier(collectionId)) { + logger.debug("collection id is not valid: " + collectionId); + return false; + } + + final byte [] data = XMLUtils.toByteArray(attribute, true); + + return new SQLExecutor() { + public boolean doIt() throws SQLException { + + // set the column in collection items + prepareStatement(SQL_COLLECTION_SET_ATTRIBUTE); + if (data == null) { + stmnt.setNull(1, Types.BINARY); + } + else { + stmnt.setBytes(1, data); + } + stmnt.setString(2, collectionId); + stmnt.execute(); + reset(); + + // touch the collection + prepareStatement(SQL_COLLECTIONS_TOUCH_BY_GID); + stmnt.setString(1, collectionId); + stmnt.execute(); + + conn.commit(); + return true; + } + }.runWrite(); + } + public Document getCollectionItemAttribute( final String collectionId, final String artifactId