# HG changeset patch # User Ingo Weinzierl # Date 1299515445 0 # Node ID fbaeb5931d106b61b036510ea16c819a8775b13d # Parent 946e2245a6c0e29281a8073f33f16793a94db6ff Implemented addCollectionArtifact() and listCollectionArtifacts() of the artifact database. artifacts/trunk@1419 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 946e2245a6c0 -r fbaeb5931d10 ChangeLog --- a/ChangeLog Mon Mar 07 16:24:27 2011 +0000 +++ b/ChangeLog Mon Mar 07 16:30:45 2011 +0000 @@ -1,3 +1,15 @@ +2011-03-07 Ingo Weinzierl + + * artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java, + artifacts/src/main/java/de/intevation/artifacts/ArtifactDatabase.java: + Modified the method signature of addCollectionArtifact(). This method + got the incoming document as further parameter. + Furthermore, listCollectionArtifacts() and addCollectionArtifact() are + implemented now. + + * artifact-database/src/main/java/de/intevation/artifactdatabase/rest/CollectionResource.java: + Adapted the method call of addCollectionArtifact(). + 2011-03-07 Ingo Weinzierl * artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultCollectionItem.java: diff -r 946e2245a6c0 -r fbaeb5931d10 artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java --- a/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java Mon Mar 07 16:24:27 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/ArtifactDatabaseImpl.java Mon Mar 07 16:30:45 2011 +0000 @@ -20,6 +20,7 @@ import de.intevation.artifacts.ArtifactSerializer; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.CollectionItem; import de.intevation.artifacts.Service; import de.intevation.artifacts.ServiceFactory; import de.intevation.artifacts.User; @@ -213,6 +214,13 @@ public static final String XPATH_COLLECTION_NAME = "/art:action/art:type/art:collection/@name"; + /** + * XPath to figure out the attributes for an artifact that is put into a + * collection. + */ + public static final String XPATH_COLLECTION_ITEM_ATTRIBUTE = + "/art:action/art:type/art:artifact/art:attribute"; + /** * Inner class that implements the call context handed @@ -1242,16 +1250,32 @@ throw new ArtifactDatabaseException("Not implemented, yet!"); } - public Document addCollectionArtifact(String collectionId, String artifactId, - CallMeta callMeta) throws ArtifactDatabaseException + public Document addCollectionArtifact( + String collectionId, + String artifactId, + Document input, + CallMeta callMeta) + throws ArtifactDatabaseException { logger.debug( "Add artifact '" + artifactId + "' collection '" +collectionId+"'"); + Document attr = XMLUtils.newDocument(); + + Node attrNode = (Node) XMLUtils.xpath( + input, + XPATH_COLLECTION_ITEM_ATTRIBUTE, + XPathConstants.NODE, + ArtifactNamespaceContext.INSTANCE); + + if (attrNode != null) { + attr.appendChild(attr.importNode(attrNode, true)); + } + boolean success = backend.addCollectionArtifact( collectionId, artifactId, - null); // XXX: Needed to be extracted from input + attr); Document result = XMLUtils.newDocument(); @@ -1274,8 +1298,43 @@ } public Document listCollectionArtifacts(String collectionId, - CallMeta callMeta) throws ArtifactDatabaseException { - throw new ArtifactDatabaseException("Not implemented, yet!"); + CallMeta callMeta) throws ArtifactDatabaseException + { + CollectionItem[] items = backend.listCollectionArtifacts(collectionId); + + Document result = XMLUtils.newDocument(); + + XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( + result, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + Element root = ec.create("result"); + Element ac = ec.create("artifact-collection"); + ec.addAttr(ac, "uuid", collectionId, true); + + for (CollectionItem item: items) { + Element i = ec.create("collection-item"); + Element attr = ec.create("attribute"); + ec.addAttr(i, "uuid", item.getArtifactIdentifier(), true); + + Document attribute = item.getAttribute(); + if (attribute != null) { + Node firstChild = attribute.getFirstChild(); + attr.appendChild(result.importNode(firstChild, true)); + } + else { + logger.debug("No attributes for the collection item!"); + } + + i.appendChild(attr); + ac.appendChild(i); + } + + root.appendChild(ac); + result.appendChild(root); + + return result; } public DeferredOutput outCollection(String collectionId, diff -r 946e2245a6c0 -r fbaeb5931d10 artifact-database/src/main/java/de/intevation/artifactdatabase/rest/CollectionResource.java --- a/artifact-database/src/main/java/de/intevation/artifactdatabase/rest/CollectionResource.java Mon Mar 07 16:24:27 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/rest/CollectionResource.java Mon Mar 07 16:30:45 2011 +0000 @@ -112,7 +112,7 @@ String art = getArtifactIdentifier(source); logger.info("Add artifact '" + art + "' to collection."); - out = db.addCollectionArtifact(identifier, art, meta); + out = db.addCollectionArtifact(identifier, art, source, meta); } else if (action.equals(ACTION_REMOVE_ARTIFACT)) { String art = getArtifactIdentifier(source); diff -r 946e2245a6c0 -r fbaeb5931d10 artifacts/src/main/java/de/intevation/artifacts/ArtifactDatabase.java --- a/artifacts/src/main/java/de/intevation/artifacts/ArtifactDatabase.java Mon Mar 07 16:24:27 2011 +0000 +++ b/artifacts/src/main/java/de/intevation/artifacts/ArtifactDatabase.java Mon Mar 07 16:30:45 2011 +0000 @@ -211,7 +211,7 @@ throws ArtifactDatabaseException; Document addCollectionArtifact(String collectionId, String artifactId, - CallMeta callMeta) throws ArtifactDatabaseException; + Document input, CallMeta callMeta) throws ArtifactDatabaseException; Document removeCollectionArtifact(String collectionId, String artifactId, CallMeta callMeta) throws ArtifactDatabaseException;