Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java @ 1972:3c3e81fca092
Added a CollectionDescriptionHelper that helps generating DESCRIBE documents for Collections.
flys-artifacts/trunk@3391 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 13 Dec 2011 08:43:48 +0000 |
parents | 37a7b3841565 |
children | 0b466bd4ab24 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Mon Dec 12 11:19:56 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Tue Dec 13 08:43:48 2011 +0000 @@ -3,7 +3,6 @@ import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -79,28 +78,9 @@ public Document describe(CallContext context) { log.debug("FLYSArtifactCollection.describe: " + identifier); - Document doc = XMLUtils.newDocument(); - - XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( - doc, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX); - - Date creationTime = getCreationTime(); - String creation = creationTime != null - ? Long.toString(creationTime.getTime()) - : ""; - - Element collection = ec.create("artifact-collection"); - Element artifacts = ec.create("artifacts"); - - ec.addAttr(collection, "name", getName(), true); - ec.addAttr(collection, "uuid", identifier(), true); - ec.addAttr(collection, "creation", creation, true); - ec.addAttr(collection, "ttl", String.valueOf(getTTL()), true); - - collection.appendChild(artifacts); - doc.appendChild(collection); + CollectionDescriptionHelper helper = new CollectionDescriptionHelper( + getName(), identifier(), getCreationTime(), getTTL(), + context); ArtifactDatabase db = context.getDatabase(); Document oldAttrs = getAttribute(); @@ -109,7 +89,7 @@ String[] aUUIDs = getArtifactUUIDs(context); Node newAttr = mergeAttributes(db, context, oldAttrs, aUUIDs); - collection.appendChild(doc.importNode(newAttr, true)); + helper.setAttribute(newAttr); // Make it an empty array if null. if (aUUIDs == null) { @@ -117,22 +97,18 @@ } for (String uuid: aUUIDs) { - try { - artifacts.appendChild( - buildArtifactNode(db, uuid, context, ec)); - } - catch (ArtifactDatabaseException dbe) { - log.warn(dbe, dbe); - } + helper.addArtifact(uuid); } } catch (ArtifactDatabaseException ade) { - log.error(ade, ade); + log.error("Error while merging attribute documents.", ade); - collection.appendChild( - doc.importNode(oldAttrs.getFirstChild(), true)); + helper.setAttribute(oldAttrs); } + Document doc = helper.toXML(); + log.debug("HELPER DOC: " + XMLUtils.toString(doc)); + return doc; } @@ -354,7 +330,8 @@ return dataProviders; } - + + /** * @return masterartifact or null if exception/not found. */ @@ -365,7 +342,7 @@ CallMeta callMeta = context.getMeta(); Document document = db.getCollectionsMasterArtifact( identifier(), callMeta); - + String masterUUID = XMLUtils.xpathString( document, XPATH_MASTER_UUID, ArtifactNamespaceContext.INSTANCE); FLYSArtifact masterArtifact = @@ -396,15 +373,15 @@ FLYSContext.STATE_ENGINE_KEY); FLYSArtifact masterArtifact = getMasterArtifact(context); - + XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator( doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX); - + AttributeParser aParser = new AttributeParser(); OutputParser oParser = new OutputParser(db, context); - + if (uuids != null) { for (String uuid: uuids) { try { @@ -830,63 +807,6 @@ /** - * Create the Artifacts Node that contains outputmode and statedata. - * @param uuid uuid of the artifact. - */ - protected Element buildArtifactNode( - ArtifactDatabase database, - String uuid, - CallContext context, - XMLUtils.ElementCreator ec) - throws ArtifactDatabaseException - { - log.debug("Append artifact '" + uuid + "' to collection description"); - - // TODO - String hash = "MYHASH"; - - Element ci = ec.create("artifact"); - ec.addAttr(ci, "uuid", uuid, true); - ec.addAttr(ci, "hash", hash, true); - - // XXX I am not sure if it works well every time with an empty document - // in the describe operation of an artifact. - Document description = database.describe(uuid, null, context.getMeta()); - - // Add outputmode element(s). - Node outputModes = (Node) XMLUtils.xpath( - description, - XPATH_ARTIFACT_OUTPUTMODES, - XPathConstants.NODE, - ArtifactNamespaceContext.INSTANCE); - - if (outputModes != null) { - Document doc = ci.getOwnerDocument(); - ci.appendChild(doc.importNode(outputModes, true)); - } - - // Add state-data element(s). - Node dataNode = ci.appendChild( - ci.getOwnerDocument().createElement("art:data-items")); - - NodeList dataNodes = (NodeList) XMLUtils.xpath( - description, - XPATH_ARTIFACT_STATE_DATA, - XPathConstants.NODESET, - ArtifactNamespaceContext.INSTANCE); - - if (dataNodes != null) { - Document doc = ci.getOwnerDocument(); - for (int i = 0; i < dataNodes.getLength(); i++) { - dataNode.appendChild(doc.importNode(dataNodes.item(i), true)); - } - } - - return ci; - } - - - /** * Inner class to structure/order the themes of a chart. */ private static class ThemeList {