sascha@286: package de.intevation.flys.client.server.meta; sascha@286: sascha@286: import org.w3c.dom.Document; sascha@286: import org.w3c.dom.Element; sascha@286: import org.w3c.dom.Node; sascha@286: import org.w3c.dom.NodeList; sascha@286: sascha@286: import de.intevation.flys.client.shared.model.DataCageTree; sascha@286: import de.intevation.flys.client.shared.model.DataCageNode; sascha@286: sascha@286: import java.util.ArrayList; sascha@286: import java.util.Map; sascha@286: import java.util.HashMap; sascha@286: sascha@286: public class Converter sascha@286: { sascha@286: public interface NodeConverter sascha@286: { sascha@286: DataCageNode convert(Element node, Converter converter); sascha@286: sascha@286: } // interface NodeConverter sascha@286: sascha@286: public static class NameConverter implements NodeConverter { sascha@286: public DataCageNode convert(Element node, Converter converter) { sascha@286: System.err.println("NameConverter called"); sascha@286: DataCageNode out = new DataCageNode(node.getAttribute("name")); sascha@286: converter.convertChildren(out, node); sascha@286: return out; sascha@286: } sascha@286: } // class NameConverter sascha@286: sascha@286: public static class I18NConverter implements NodeConverter { sascha@286: public DataCageNode convert(Element node, Converter converter) { sascha@286: System.err.println("I18NConverter called"); sascha@286: DataCageNode out = sascha@286: new DataCageNode("${" + node.getLocalName() + "}"); sascha@286: converter.convertChildren(out, node); sascha@286: return out; sascha@286: } sascha@286: } // I18NConverter sascha@286: sascha@286: protected Map converters; sascha@286: sascha@286: protected void convertChildren(DataCageNode parent, Element sub) { sascha@286: System.err.println("convertChildren called"); sascha@286: NodeList children = sub.getChildNodes(); sascha@286: for (int i = 0, N = children.getLength(); i < N; ++i) { sascha@286: Node child = children.item(i); sascha@286: if (child.getNodeType() == Node.ELEMENT_NODE) { sascha@286: String name = child.getLocalName(); sascha@286: NodeConverter converter = converters.get(name); sascha@286: if (converter != null) { sascha@286: DataCageNode son = converter.convert( sascha@286: (Element)child, this); sascha@286: parent.addChild(son); sascha@286: } sascha@286: } sascha@286: } // for all children sascha@286: } sascha@286: sascha@286: public Converter() { sascha@286: converters = new HashMap(); sascha@286: registerConverters(); sascha@286: } sascha@286: sascha@286: protected void registerConverters() { sascha@286: System.err.println("register converters called"); sascha@286: converters.put("datacage", new NameConverter()); sascha@286: converters.put("river", new NameConverter()); sascha@286: converters.put("gauge", new NameConverter()); sascha@286: converters.put("historical", new NameConverter()); sascha@286: converters.put("discharge-table-nn", new I18NConverter()); sascha@286: converters.put("discharge-table-gauge", new I18NConverter()); sascha@286: converters.put("fixations", new I18NConverter()); sascha@286: converters.put("fixation", new I18NConverter()); sascha@286: converters.put("columns", new I18NConverter()); sascha@286: converters.put("column", new NameConverter()); sascha@286: converters.put("flood-protections", new I18NConverter()); sascha@286: converters.put("flood-protection", new I18NConverter()); sascha@286: converters.put("flood-water-marks", new I18NConverter()); sascha@286: converters.put("flood-water-mark", new I18NConverter()); sascha@286: converters.put("water-levels", new I18NConverter()); sascha@286: converters.put("water-level", new I18NConverter()); sascha@286: converters.put("extra-longitudinal-sections", new I18NConverter()); sascha@286: converters.put("extra-longitudinal-section", new I18NConverter()); sascha@286: converters.put("longitudinal-section", new I18NConverter()); sascha@286: } sascha@286: sascha@286: public DataCageTree convert(Document document) { sascha@286: System.err.println("convert called"); sascha@286: sascha@286: ArrayList roots = new ArrayList(); sascha@286: NodeList nodes = document.getChildNodes(); sascha@286: for (int i = 0, N = nodes.getLength(); i < N; ++i) { sascha@286: Node node = nodes.item(i); sascha@286: if (node.getNodeType() == Node.ELEMENT_NODE) { sascha@286: System.err.println("search for name: " + node.getLocalName()); sascha@286: NodeConverter converter = converters.get(node.getLocalName()); sascha@286: if (converter != null) { sascha@286: roots.add(converter.convert((Element)node, this)); sascha@286: } sascha@286: } sascha@286: } sascha@286: return roots.isEmpty() sascha@286: ? new DataCageTree() sascha@286: : new DataCageTree(roots.get(0)); sascha@286: } sascha@286: } sascha@286: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :