Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/server/meta/Converter.java @ 3509:bb5edff31866
Cosmetics.
flys-client/trunk@5279 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 28 Aug 2012 13:10:14 +0000 |
parents | b21840188264 |
children | 823c8afa1335 |
line wrap: on
line source
package de.intevation.flys.client.server.meta; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Attr; import org.w3c.dom.NamedNodeMap; import org.apache.log4j.Logger; import de.intevation.flys.client.shared.model.DataCageTree; import de.intevation.flys.client.shared.model.DataCageNode; import de.intevation.flys.client.shared.model.AttrList; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import de.intevation.artifacts.common.utils.XMLUtils; /** * Converts document parts (meta-data xml) to datacagenodes/trees, * which are shown in datacage widgets. */ public class Converter { private static final Logger logger = Logger.getLogger(Converter.class); public interface NodeConverter { DataCageNode convert(Element node, Converter converter); } // interface NodeConverter public static class NameConverter implements NodeConverter { public DataCageNode convert(Element node, Converter converter) { //System.err.println("NameConverter called"); DataCageNode out = new DataCageNode( node.getAttribute("name"), toAttrList(node.getAttributes())); converter.convertChildren(out, node); return out; } } // class NameConverter public static class I18NConverter implements NodeConverter { public DataCageNode convert(Element node, Converter converter) { //System.err.println("I18NConverter called"); String name = node.getLocalName(); String desc = node.hasAttribute("description") ? node.getAttribute("description") : "${" + name + "}"; DataCageNode out = new DataCageNode(name, desc, toAttrList(node.getAttributes())); converter.convertChildren(out, node); return out; } } // I18NConverter private static Map<String, NodeConverter> converters = new HashMap<String, NodeConverter>(); public static final NodeConverter NAME_CONVERTER = new NameConverter(); public static final NodeConverter I18N_CONVERTER = new I18NConverter(); static { converters.put("river", NAME_CONVERTER); converters.put("gauge", NAME_CONVERTER); converters.put("historical", NAME_CONVERTER); converters.put("column", NAME_CONVERTER); } /** Trivial constructor. */ public Converter() { } public DataCageTree convert(Document document) { logger.debug("convert called"); //System.err.println(XMLUtils.toString(document)); ArrayList<DataCageNode> roots = new ArrayList<DataCageNode>(); NodeList nodes = document.getChildNodes(); for (int i = 0, N = nodes.getLength(); i < N; ++i) { Node node = nodes.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { logger.debug("search for name: " + node.getLocalName()); NodeConverter converter = converters.get(node.getLocalName()); if (converter == null) { converter = I18N_CONVERTER; } roots.add(converter.convert((Element)node, this)); } } return roots.isEmpty() ? new DataCageTree() : new DataCageTree(roots.get(0)); } protected void convertChildren(DataCageNode parent, Element sub) { //System.err.println("convertChildren called"); NodeList children = sub.getChildNodes(); for (int i = 0, N = children.getLength(); i < N; ++i) { Node child = children.item(i); if (child.getNodeType() == Node.ELEMENT_NODE) { String name = child.getLocalName(); NodeConverter converter = converters.get(name); if (converter == null) { converter = I18N_CONVERTER; } DataCageNode son = converter.convert( (Element)child, this); parent.addChild(son); if (((Element)child).hasAttribute("description")) logger.debug("nwd: " + ((Element)child).getAttribute("description")); } } // for all children } /** * Creates key/value pairs from Nodes Attributes. */ public static AttrList toAttrList(NamedNodeMap nodeMap) { if (nodeMap == null) { return null; } int N = nodeMap.getLength(); if (N == 0) { return null; } AttrList result = new AttrList(N); for (int i = 0; i < N; ++i) { Node node = nodeMap.item(i); if (node.getNodeType() == Node.ATTRIBUTE_NODE) { Attr attr = (Attr)node; String key = attr.getName(); String value = attr.getValue(); result.add(key, value); } } return result; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :