annotate flys-client/src/main/java/de/intevation/flys/client/server/meta/Converter.java @ 286:0fa8bf8a2295

Datacage: Better converter for incoming XML tree flys-client/trunk@1916 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 13 May 2011 09:06:13 +0000
parents
children 2e02db03e576
rev   line source
286
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.client.server.meta;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import org.w3c.dom.Document;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 import org.w3c.dom.Element;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 import org.w3c.dom.Node;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 import org.w3c.dom.NodeList;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 import de.intevation.flys.client.shared.model.DataCageTree;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 import de.intevation.flys.client.shared.model.DataCageNode;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 import java.util.List;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 import java.util.ArrayList;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 import java.util.Map;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 import java.util.HashMap;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 public class Converter
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 public interface NodeConverter
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 DataCageNode convert(Element node, Converter converter);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 } // interface NodeConverter
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 public static class NameConverter implements NodeConverter {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 public DataCageNode convert(Element node, Converter converter) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 System.err.println("NameConverter called");
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 DataCageNode out = new DataCageNode(node.getAttribute("name"));
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 converter.convertChildren(out, node);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 return out;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 } // class NameConverter
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 public static class I18NConverter implements NodeConverter {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 public DataCageNode convert(Element node, Converter converter) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 System.err.println("I18NConverter called");
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 DataCageNode out =
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 new DataCageNode("${" + node.getLocalName() + "}");
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 converter.convertChildren(out, node);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 return out;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 } // I18NConverter
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 protected Map<String, NodeConverter> converters;
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 protected void convertChildren(DataCageNode parent, Element sub) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 System.err.println("convertChildren called");
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 NodeList children = sub.getChildNodes();
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 for (int i = 0, N = children.getLength(); i < N; ++i) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 Node child = children.item(i);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 if (child.getNodeType() == Node.ELEMENT_NODE) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 String name = child.getLocalName();
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 NodeConverter converter = converters.get(name);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 if (converter != null) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 DataCageNode son = converter.convert(
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 (Element)child, this);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 parent.addChild(son);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 } // for all children
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 public Converter() {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 converters = new HashMap<String, NodeConverter>();
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 registerConverters();
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 protected void registerConverters() {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 System.err.println("register converters called");
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 converters.put("datacage", new NameConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 converters.put("river", new NameConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 converters.put("gauge", new NameConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 converters.put("historical", new NameConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 converters.put("discharge-table-nn", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 converters.put("discharge-table-gauge", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 converters.put("fixations", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 converters.put("fixation", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 converters.put("columns", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 converters.put("column", new NameConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 converters.put("flood-protections", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 converters.put("flood-protection", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 converters.put("flood-water-marks", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 converters.put("flood-water-mark", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 converters.put("water-levels", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 converters.put("water-level", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 converters.put("extra-longitudinal-sections", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 converters.put("extra-longitudinal-section", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 converters.put("longitudinal-section", new I18NConverter());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 public DataCageTree convert(Document document) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 System.err.println("convert called");
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 ArrayList<DataCageNode> roots = new ArrayList<DataCageNode>();
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94 NodeList nodes = document.getChildNodes();
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 for (int i = 0, N = nodes.getLength(); i < N; ++i) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 Node node = nodes.item(i);
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 if (node.getNodeType() == Node.ELEMENT_NODE) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 System.err.println("search for name: " + node.getLocalName());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 NodeConverter converter = converters.get(node.getLocalName());
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 if (converter != null) {
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 roots.add(converter.convert((Element)node, this));
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 return roots.isEmpty()
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106 ? new DataCageTree()
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 : new DataCageTree(roots.get(0));
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 }
0fa8bf8a2295 Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org