Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java @ 1025:02c327ffbad7
Datacage: Extended schema for artifacts and collections
to have creation times, too.
flys-artifacts/trunk@2484 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 10 Aug 2011 14:57:12 +0000 |
parents | 59ae2a823e73 |
children | a3108f0a2fe7 |
line wrap: on
line source
package de.intevation.flys.collections; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.Output; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; import de.intevation.flys.artifacts.model.ManagedFacet; public class AttributeWriter { protected Map<String, Output> oldAttr; protected Map<String, Output> newAttr; private static Logger logger = Logger.getLogger(AttributeWriter.class); public AttributeWriter( Map<String, Output> oldAttr, Map<String, Output> newAttr) { this.oldAttr = oldAttr; this.newAttr = newAttr; } protected Document write() { Document doc = XMLUtils.newDocument(); ElementCreator cr = new ElementCreator( doc, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX); Element attribute = cr.create("attribute"); Element outs = cr.create("outputs"); attribute.appendChild(outs); doc.appendChild(attribute); for (String outName: newAttr.keySet()) { Output a = newAttr.get(outName); Output b = oldAttr.get(outName); writeOutput(doc, outs, cr, a, b); } return doc; } protected void writeOutput( Document doc, Node outs, ElementCreator cr, Output a, Output b) { Element output = cr.create("output"); cr.addAttr(output, "name", a.getName()); outs.appendChild(output); List<Facet> facetsA = a.getFacets(); List<Facet> facetsB = null; if (b != null) { facetsB = b.getFacets(); } writeFacets(doc, cr, output, facetsA, facetsB); } protected void writeFacets( Document doc, ElementCreator cr, Element output, List<Facet> a, List<Facet> b) { int num = a.size(); for (int i = 0; i < num; i++) { ManagedFacet fA = (ManagedFacet) a.get(i); if (!mergeFacets(doc, cr, output, fA, b)) { Node n = fA.toXML(doc); if (n != null) { output.appendChild(n); } } } } protected boolean mergeFacets( Document doc, ElementCreator cr, Element output, ManagedFacet a, List<Facet> list) { String nameA = a.getName() + a.getIndex(); if (list == null) { logger.debug("No old facets found."); return false; } for (Facet facet: list) { String nameB = facet.getName() + facet.getIndex(); if (nameA.equals(nameB)) { Node n = facet.toXML(doc); if (n != null) { output.appendChild(n); } return true; } } return false; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :