Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java @ 751:8d5bd3a08dd1
merged flys-artifacts/2.4
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:14 +0200 |
parents | 853dceead0f4 |
children | 59ae2a823e73 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java Fri Sep 28 12:14:14 2012 +0200 @@ -0,0 +1,150 @@ +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); +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : + 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)) { + writeFacet(doc, cr, output, fA); + } + } + } + + + protected boolean mergeFacets( + Document doc, + ElementCreator cr, + Element output, + ManagedFacet a, + List<Facet> list) + { + String name = a.getName() + a.getIndex(); + + if (list == null) { + logger.debug("No old facets found."); + return false; + } + + for (Facet facet: list) { + if (name.equals(facet.getName() + facet.getIndex())) { + writeFacet(doc, cr, output, (ManagedFacet) facet); + return true; + } + } + + return false; + } + + + protected void writeFacet( + Document doc, + ElementCreator cr, + Node output, + ManagedFacet f) + { + Element theme = cr.create("theme"); + cr.addAttr(theme, "artifact", f.getArtifact(), true); + cr.addAttr(theme, "facet", f.getName(), true); + cr.addAttr(theme, "pos", Integer.toString(f.getPosition()), true); + cr.addAttr(theme, "active", Integer.toString(f.getActive()), true); + cr.addAttr(theme, "index", Integer.toString(f.getIndex()), true); + cr.addAttr(theme, "description", f.getDescription(), true); + + output.appendChild(theme); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :