Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/collections/CollectionDescriptionHelper.java @ 3785:a5f65e8983be
Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk
........
r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line
fix issue865 - missing showarea theme prop.
........
r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line
Add robustness checks to prevent NPEs
........
r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line
i18n for area label (fix issue487).
........
r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line
Update themes to show point descriptions
........
r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines
Removed incorrect characteristic diameter.
........
r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines
Fixed some stupid bugs in bed quality data factory and calculation.
........
r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line
The usual whitespace and import cleanups.
........
r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line
Use generics aware Collections.emptyList().
........
r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line
Some more little steps towards "Auslagerung extremer Wasserspiegellagen".
........
r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line
A and B facets of fix analyis are now deactivated by default
........
r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines
Add the gauge station to the GaugeOverviewInfoService xml response
........
r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines
Added CSV export to bed quality calculation.
........
r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines
Fix date in changelog entry
........
r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line
Removed trailing whitespace.
........
flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 19 Sep 2012 14:58:31 +0000 |
parents | 4a76da133144 |
children |
line wrap: on
line source
package de.intevation.flys.collections; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import de.intevation.artifacts.ArtifactDatabase; import de.intevation.artifacts.ArtifactDatabaseException; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; public class CollectionDescriptionHelper { private static final Logger logger = Logger.getLogger(CollectionDescriptionHelper.class); public static final String XPATH_ARTIFACT_STATE_DATA = "/art:result/art:ui/art:static/art:state/art:data"; /** Constant XPath that points to the outputmodes of an artifact. */ public static final String XPATH_ARTIFACT_OUTPUTMODES = "/art:result/art:outputmodes"; protected ElementCreator ec; protected CallContext context; protected ArtifactDatabase database; protected String name; protected String uuid; protected Date creation; protected long ttl; protected List<String> artifacts; protected CollectionAttribute attribute; /** * @param name The name of the collection. * @param uuid The uuid of the collection. * @param creation The creation time of the collection. * @param ttl The time to live of the collection. */ public CollectionDescriptionHelper( String name, String uuid, Date creation, long ttl, CallContext callContext ) { this.name = name; this.uuid = uuid; this.creation = creation; this.ttl = ttl; this.context = callContext; this.database = callContext.getDatabase(); this.artifacts = new ArrayList<String>(); } public void addArtifact(String uuid) { if (uuid != null && uuid.length() > 0) { artifacts.add(uuid); } } public void setAttribute(CollectionAttribute attribute) { if (attribute != null) { this.attribute = attribute; } } public Document toXML() { Document doc = XMLUtils.newDocument(); ec = new ElementCreator( doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX); Element root = ec.create("artifact-collection"); doc.appendChild(root); String creationTime = creation != null ? Long.toString(creation.getTime()) : ""; ec.addAttr(root, "name", name, true); ec.addAttr(root, "uuid", uuid, true); ec.addAttr(root, "creation", creationTime, true); ec.addAttr(root, "ttl", String.valueOf(ttl), true); appendArtifacts(root); appendAttribute(root); return doc; } /** * Appends parts of the DESCRIBE document of each Artifact to <i>root</i>. * * @param root The root node. */ protected void appendArtifacts(Element root) { Element artifactsEl = ec.create("artifacts"); for (String uuid: artifacts) { try { Element e = buildArtifactNode(uuid); if (e != null) { artifactsEl.appendChild(e); } } catch (ArtifactDatabaseException dbe) { logger.warn(dbe, dbe); } } root.appendChild(artifactsEl); } /** * Create the Artifacts Node that contains outputmode and statedata. * * @param uuid uuid of the artifact. */ protected Element buildArtifactNode(String uuid) throws ArtifactDatabaseException { logger.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, D = dataNodes.getLength(); i < D; i++) { dataNode.appendChild(doc.importNode(dataNodes.item(i), true)); } } return ci; } protected void appendAttribute(Element root) { if (attribute != null) { Document owner = root.getOwnerDocument(); Document attr = attribute.toXML(); root.appendChild(owner.importNode(attr.getFirstChild(), true)); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :