Mercurial > dive4elements > river
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()); |