comparison gwt-client/src/main/java/org/dive4elements/river/client/server/DataFactory.java @ 8071:6e6506ec0ae0

Parse meta data for multi attribute data.
author Sascha L. Teichmann <teichmann@intevation.de>
date Tue, 05 Aug 2014 18:28:04 +0200
parents 2c221acebb76
children 238fc722f87a
comparison
equal deleted inserted replaced
8070:d77f53c1e5a1 8071:6e6506ec0ae0
6 * documentation coming with Dive4Elements River for details. 6 * documentation coming with Dive4Elements River for details.
7 */ 7 */
8 8
9 package org.dive4elements.river.client.server; 9 package org.dive4elements.river.client.server;
10 10
11 import java.util.Collections;
11 import java.util.HashMap; 12 import java.util.HashMap;
13 import java.util.Map;
12 14
13 import javax.xml.xpath.XPathConstants; 15 import javax.xml.xpath.XPathConstants;
14 16
17 import org.w3c.dom.Attr;
15 import org.w3c.dom.Element; 18 import org.w3c.dom.Element;
16 import org.w3c.dom.NamedNodeMap; 19 import org.w3c.dom.NamedNodeMap;
17 import org.w3c.dom.Node; 20 import org.w3c.dom.Node;
18 import org.w3c.dom.NodeList; 21 import org.w3c.dom.NodeList;
19
20 import org.apache.log4j.Logger; 22 import org.apache.log4j.Logger;
21
22 import org.dive4elements.artifacts.common.ArtifactNamespaceContext; 23 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
23 import org.dive4elements.artifacts.common.utils.XMLUtils; 24 import org.dive4elements.artifacts.common.utils.XMLUtils;
24
25 import org.dive4elements.river.client.shared.model.Data; 25 import org.dive4elements.river.client.shared.model.Data;
26 import org.dive4elements.river.client.shared.model.DataItem; 26 import org.dive4elements.river.client.shared.model.DataItem;
27 import org.dive4elements.river.client.shared.model.DefaultData; 27 import org.dive4elements.river.client.shared.model.DefaultData;
28 import org.dive4elements.river.client.shared.model.DefaultDataItem; 28 import org.dive4elements.river.client.shared.model.DefaultDataItem;
29 import org.dive4elements.river.client.shared.model.DoubleArrayData; 29 import org.dive4elements.river.client.shared.model.DoubleArrayData;
34 import org.dive4elements.river.client.shared.model.MultiAttributeData; 34 import org.dive4elements.river.client.shared.model.MultiAttributeData;
35 import org.dive4elements.river.client.shared.model.MultiDataItem; 35 import org.dive4elements.river.client.shared.model.MultiDataItem;
36 import org.dive4elements.river.client.shared.model.StringData; 36 import org.dive4elements.river.client.shared.model.StringData;
37 import org.dive4elements.river.client.shared.model.StringOptionsData; 37 import org.dive4elements.river.client.shared.model.StringOptionsData;
38 import org.dive4elements.river.client.shared.model.LongRangeData; 38 import org.dive4elements.river.client.shared.model.LongRangeData;
39
40 import org.dive4elements.river.client.shared.model.IntDataItem; 39 import org.dive4elements.river.client.shared.model.IntDataItem;
41 40
42 /** 41 /**
43 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> 42 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
44 */ 43 */
117 String name, 116 String name,
118 String label) { 117 String label) {
119 return new MultiAttributeData( 118 return new MultiAttributeData(
120 name, 119 name,
121 label, 120 label,
122 extractMultiDataItems(element)); 121 extractMultiDataItems(element),
122 extractMeta(element));
123 }
124
125
126 private static Map<String, Map<String, String>> extractMeta(Element element) {
127 NodeList nl = element.getElementsByTagName("meta");
128 int N = nl.getLength();
129 if (N < 1) {
130 logger.debug("No meta data found for multi attribute data");
131 return Collections.<String, Map<String, String>>emptyMap();
132 }
133 Map<String, Map<String, String>> map =
134 new HashMap<String, Map<String, String>>();
135
136 for (int i = 0; i < N; ++i) {
137 Element e = (Element)nl.item(i);
138 NamedNodeMap attrs = e.getAttributes();
139 Map<String, String> kvs = new HashMap<String, String>();
140 for (int j = 0, A = attrs.getLength(); j < A; ++j) {
141 Attr attr = (Attr)attrs.item(j);
142 kvs.put(attr.getName(), attr.getValue());
143 }
144 map.put(e.getTagName(), kvs);
145 }
146
147 return map;
123 } 148 }
124 149
125 150
126 protected static DataItem[] extractMultiDataItems(Element element) { 151 protected static DataItem[] extractMultiDataItems(Element element) {
127 NodeList itemList = (NodeList) XMLUtils.xpath( 152 NodeList itemList = (NodeList) XMLUtils.xpath(
143 Element tmp = (Element) itemList.item(i); 168 Element tmp = (Element) itemList.item(i);
144 169
145 HashMap<String, String> data = new HashMap<String, String>(); 170 HashMap<String, String> data = new HashMap<String, String>();
146 String label = tmp.getAttributeNS(NS_URI, "label"); 171 String label = tmp.getAttributeNS(NS_URI, "label");
147 NamedNodeMap attributes = tmp.getAttributes(); 172 NamedNodeMap attributes = tmp.getAttributes();
148 for (int j = 0; j < attributes.getLength(); j++) { 173 for (int j = 0, L = attributes.getLength(); j < L; j++) {
149 Node n = attributes.item(j); 174 Node n = attributes.item(j);
150 if (n.getNodeName().equals("label")) { 175 if (n.getNodeName().equals("label")) {
151 continue; 176 continue;
152 } 177 }
153 data.put(n.getNodeName(), n.getNodeValue()); 178 data.put(n.getNodeName(), n.getNodeValue());

http://dive4elements.wald.intevation.org