Mercurial > dive4elements > river
annotate flys-client/src/main/java/de/intevation/flys/client/server/meta/Converter.java @ 557:92c200887b20
#21 There might be just a single window for each project now. Users can't open a project twice.
flys-client/trunk@2083 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 08 Jun 2011 13:21:46 +0000 |
parents | 2e02db03e576 |
children | 70b728a9f4e8 |
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.ArrayList; |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 import java.util.Map; |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 import java.util.HashMap; |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 public class Converter |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 public interface NodeConverter |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 DataCageNode convert(Element node, Converter converter); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 } // interface NodeConverter |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 public static class NameConverter implements NodeConverter { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 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
|
25 System.err.println("NameConverter called"); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 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
|
27 converter.convertChildren(out, node); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 return out; |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 } |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 } // class NameConverter |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 public static class I18NConverter implements NodeConverter { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 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
|
34 System.err.println("I18NConverter called"); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 DataCageNode out = |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 new DataCageNode("${" + node.getLocalName() + "}"); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 converter.convertChildren(out, node); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 return out; |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 } |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 } // I18NConverter |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 protected Map<String, NodeConverter> converters; |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 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
|
45 System.err.println("convertChildren called"); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 NodeList children = sub.getChildNodes(); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 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
|
48 Node child = children.item(i); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 if (child.getNodeType() == Node.ELEMENT_NODE) { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 String name = child.getLocalName(); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 NodeConverter converter = converters.get(name); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 if (converter != null) { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 DataCageNode son = converter.convert( |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 (Element)child, this); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 parent.addChild(son); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 } |
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 } // for all children |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
59 } |
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 public Converter() { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 converters = new HashMap<String, NodeConverter>(); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
63 registerConverters(); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
64 } |
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 protected void registerConverters() { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 System.err.println("register converters called"); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 converters.put("datacage", new NameConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 converters.put("river", new NameConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 converters.put("gauge", new NameConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 converters.put("historical", new NameConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
72 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
|
73 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
|
74 converters.put("fixations", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 converters.put("fixation", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 converters.put("columns", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 converters.put("column", new NameConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 converters.put("flood-protections", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 converters.put("flood-protection", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 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
|
81 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
|
82 converters.put("water-levels", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 converters.put("water-level", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
84 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
|
85 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
|
86 converters.put("longitudinal-section", new I18NConverter()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 } |
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 public DataCageTree convert(Document document) { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
90 System.err.println("convert called"); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
91 |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
92 ArrayList<DataCageNode> roots = new ArrayList<DataCageNode>(); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
93 NodeList nodes = document.getChildNodes(); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 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
|
95 Node node = nodes.item(i); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
96 if (node.getNodeType() == Node.ELEMENT_NODE) { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
97 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
|
98 NodeConverter converter = converters.get(node.getLocalName()); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 if (converter != null) { |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
100 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
|
101 } |
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 return roots.isEmpty() |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
105 ? new DataCageTree() |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
106 : new DataCageTree(roots.get(0)); |
0fa8bf8a2295
Datacage: Better converter for incoming XML tree
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
107 } |
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 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |