comparison gwt-client/src/main/java/org/dive4elements/river/client/server/meta/Converter.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-client/src/main/java/org/dive4elements/river/client/server/meta/Converter.java@821a02bbfb4e
children 172338b1407f
comparison
equal deleted inserted replaced
5837:d9901a08d0a6 5838:5aa05a7a34b7
1 package org.dive4elements.river.client.server.meta;
2
3 import org.w3c.dom.Document;
4 import org.w3c.dom.Element;
5 import org.w3c.dom.Node;
6 import org.w3c.dom.NodeList;
7 import org.w3c.dom.Attr;
8 import org.w3c.dom.NamedNodeMap;
9
10 import org.apache.log4j.Logger;
11
12 import org.dive4elements.river.client.shared.model.DataCageTree;
13 import org.dive4elements.river.client.shared.model.DataCageNode;
14 import org.dive4elements.river.client.shared.model.AttrList;
15
16 import java.util.ArrayList;
17 import java.util.Map;
18 import java.util.HashMap;
19
20 import org.dive4elements.artifacts.common.utils.XMLUtils;
21
22 /**
23 * Converts document parts (meta-data xml) to datacagenodes/trees,
24 * which are shown in datacage widgets.
25 */
26 public class Converter
27 {
28 private static final Logger logger = Logger.getLogger(Converter.class);
29
30
31 public interface NodeConverter
32 {
33 DataCageNode convert(Element node, Converter converter);
34
35 } // interface NodeConverter
36
37 public static class NameConverter implements NodeConverter {
38 public DataCageNode convert(Element node, Converter converter) {
39 //System.err.println("NameConverter called");
40 DataCageNode out = new DataCageNode(
41 node.getAttribute("name"),
42 toAttrList(node.getAttributes()));
43 converter.convertChildren(out, node);
44 return out;
45 }
46 } // class NameConverter
47
48 public static class I18NConverter implements NodeConverter {
49 public DataCageNode convert(Element node, Converter converter) {
50 //System.err.println("I18NConverter called");
51
52 String name = node.getLocalName();
53 String desc = node.hasAttribute("description")
54 ? node.getAttribute("description")
55 : "${" + name + "}";
56
57 DataCageNode out =
58 new DataCageNode(name, desc, toAttrList(node.getAttributes()));
59
60 converter.convertChildren(out, node);
61 return out;
62 }
63 } // I18NConverter
64
65 private static Map<String, NodeConverter> converters = new HashMap<String, NodeConverter>();
66
67 public static final NodeConverter NAME_CONVERTER = new NameConverter();
68 public static final NodeConverter I18N_CONVERTER = new I18NConverter();
69
70 static {
71 converters.put("river", NAME_CONVERTER);
72 converters.put("gauge", NAME_CONVERTER);
73 converters.put("historical", NAME_CONVERTER);
74 converters.put("column", NAME_CONVERTER);
75 }
76
77
78 /** Trivial constructor. */
79 public Converter() {
80 }
81
82
83 public DataCageTree convert(Document document) {
84 logger.debug("convert called");
85
86 if (logger.isDebugEnabled()) {
87 logger.debug(XMLUtils.toString(document));
88 }
89
90 ArrayList<DataCageNode> roots = new ArrayList<DataCageNode>();
91 NodeList nodes = document.getChildNodes();
92 for (int i = 0, N = nodes.getLength(); i < N; ++i) {
93 Node node = nodes.item(i);
94 if (node.getNodeType() == Node.ELEMENT_NODE) {
95 Element ele = (Element)node;
96 roots.add(convertElement(ele));
97 }
98 }
99 return roots.isEmpty()
100 ? new DataCageTree()
101 : new DataCageTree(roots.get(0));
102 }
103
104 protected void convertChildren(DataCageNode parent, Element sub) {
105 //System.err.println("convertChildren called");
106 NodeList children = sub.getChildNodes();
107 for (int i = 0, N = children.getLength(); i < N; ++i) {
108 Node child = children.item(i);
109 if (child.getNodeType() == Node.ELEMENT_NODE) {
110 Element childele = (Element)child;
111 parent.addChild(convertElement(childele));
112
113 if (childele.hasAttribute("description"))
114 logger.debug("nwd: " + childele.getAttribute("description"));
115 }
116 } // for all children
117 }
118
119 private DataCageNode convertElement(Element element) {
120 String name = element.getLocalName();
121
122 logger.debug("search for name: " + name);
123
124 NodeConverter converter = converters.get(name);
125 if (converter == null) {
126 converter = I18N_CONVERTER;
127 }
128 return converter.convert(element, this);
129
130 }
131
132
133 /**
134 * Creates key/value pairs from Nodes Attributes.
135 */
136 public static AttrList toAttrList(NamedNodeMap nodeMap) {
137 if (nodeMap == null) {
138 return null;
139 }
140 int N = nodeMap.getLength();
141
142 if (N == 0) {
143 return null;
144 }
145
146 AttrList result = new AttrList(N);
147
148 for (int i = 0; i < N; ++i) {
149 Node node = nodeMap.item(i);
150 if (node.getNodeType() == Node.ATTRIBUTE_NODE) {
151 Attr attr = (Attr)node;
152 String key = attr.getName();
153 String value = attr.getValue();
154 result.add(key, value);
155 }
156 }
157
158 return result;
159 }
160 }
161 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org