Mercurial > dive4elements > river
annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/Builder.java @ 970:e456aca4eb7b
meta data service: Adjusted to use the DataCage recommendations.
flys-artifacts/trunk@2395 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 22 Jul 2011 10:41:30 +0000 |
parents | f48cef242e7f |
children | 0c8aca463bd4 |
rev | line source |
---|---|
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.flys.artifacts.services.meta; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 import java.util.regex.Matcher; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 import java.util.ArrayList; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 import java.util.List; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
7 import java.util.HashMap; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 import java.util.Map; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 import org.w3c.dom.Document; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 import org.w3c.dom.NodeList; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 import org.w3c.dom.Node; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 import org.w3c.dom.Element; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 |
957
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
15 import javax.xml.xpath.XPath; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
16 import javax.xml.xpath.XPathFactory; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
17 import javax.xml.xpath.XPathExpressionException; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
18 import javax.xml.xpath.XPathConstants; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
19 |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 import java.sql.SQLException; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 import java.sql.Connection; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 import de.intevation.artifacts.common.utils.XMLUtils; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 import org.apache.log4j.Logger; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 public class Builder |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 private static Logger log = Logger.getLogger(Builder.class); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 public static final String DC_NAMESPACE_URI = |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 "http://www.intevation.org/2011/Datacage"; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 |
957
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
34 private static final Document EVAL_DOCUMENT = |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
35 XMLUtils.newDocument(); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
36 |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
37 private static final XPathFactory XPATH_FACTORY = |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
38 XPathFactory.newInstance(); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
39 |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
40 protected Document template; |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
42 protected static Document getOwnerDocument(Node node) { |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
43 Document document = node.getOwnerDocument(); |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
44 return document != null ? document : (Document)node; |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
45 } |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
46 |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
47 |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 public class BuildHelper |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 { |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
50 protected Node output; |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
51 protected Document owner; |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
52 protected StackFrames frames; |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
53 protected Connection connection; |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 protected Map<String, CompiledStatement> statements; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
56 public BuildHelper( |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
57 Node output, |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
58 Connection connection, |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
59 Map<String, Object> parameters |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
60 ) { |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 this.output = output; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 this.connection = connection; |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
63 frames = new StackFrames(parameters); |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
64 statements = new HashMap<String, CompiledStatement>(); |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
65 owner = getOwnerDocument(output); |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 public void build(List<Node> elements) throws SQLException { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 try { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 for (Node current: elements) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 build(output, current); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
72 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 finally { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 for (CompiledStatement cs: statements.values()) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 cs.close(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 statements.clear(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
82 protected void context(Node parent, Element current) |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 throws SQLException |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
84 { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
85 NodeList elements = current.getElementsByTagNameNS( |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 DC_NAMESPACE_URI, "elements"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
88 if (elements.getLength() < 1) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
89 log.warn("no elements found -> ignore"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
90 return; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
91 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
92 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
93 NodeList subs = elements.item(0).getChildNodes(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 int S = subs.getLength(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
95 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
96 if (S < 1) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
97 log.warn("elements is empty -> ignore"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
98 return; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
100 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
101 NodeList stmntNode = current.getElementsByTagNameNS( |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 DC_NAMESPACE_URI, "statement"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
103 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
104 if (stmntNode.getLength() < 1) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
105 log.warn("dc:context: too less statements"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
106 return; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
107 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
108 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
109 String stmntText = stmntNode.item(0).getTextContent(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
111 if (stmntText == null |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
112 || (stmntText = stmntText.trim()).length() == 0) { |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
113 log.warn("dc:context: no sql statement found -> ignored"); |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
114 return; |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
115 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
116 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
117 CompiledStatement cs = statements.get(stmntText); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
118 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
119 if (cs == null) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
120 cs = new CompiledStatement(stmntText); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
121 statements.put(stmntText, cs); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
122 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
123 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
124 ResultData rd = cs.execute(connection, frames); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
125 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
126 String [] columns = rd.getColumnLabels(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
127 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
128 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
129 for (Object [] row: rd.getRows()) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
130 frames.enter(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
131 try { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
132 frames.put(columns, row); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
133 for (int i = 0; i < S; ++i) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
134 build(parent, subs.item(i)); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
135 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
136 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
137 finally { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
138 frames.leave(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
139 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
140 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
141 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
142 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
143 protected void element(Node parent, Element current) |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
144 throws SQLException |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
145 { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
146 String attr = expand(current.getAttribute("name")); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
147 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
148 if (log.isDebugEnabled()) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
149 log.debug("dc:element -> '" + attr + "'"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
150 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
151 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
152 if (attr.length() == 0) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
153 log.warn("no name attribute found"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
154 return; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
155 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
156 |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
157 Element element = owner.createElement(attr); |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 NodeList children = current.getChildNodes(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 for (int i = 0, N = children.getLength(); i < N; ++i) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 build(element, children.item(i)); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
162 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
163 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
164 parent.appendChild(element); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
165 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
166 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
167 protected void text(Node parent, Element current) |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
168 throws SQLException |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
169 { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
170 log.debug("dc:text"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
171 String value = expand(current.getTextContent()); |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
172 parent.appendChild(owner.createTextNode(value)); |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
173 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
174 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
176 protected void attribute(Node parent, Element current) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
177 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 if (parent.getNodeType() != Node.ELEMENT_NODE) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 log.warn("need element here"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
180 return; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
183 String name = expand(current.getAttribute("name")); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 String value = expand(current.getAttribute("value")); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
186 Element element = (Element)parent; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 element.setAttribute(name, value); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 |
962
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
191 protected void callMacro(Node parent, Element current) |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
192 throws SQLException |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
193 { |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
194 String name = current.getAttribute("name"); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
195 |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
196 if (name.length() == 0) { |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
197 log.warn("missing 'name' attribute in 'call-macro'"); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
198 return; |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
199 } |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
200 |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
201 NodeList macros = template.getElementsByTagNameNS( |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
202 DC_NAMESPACE_URI, "macro"); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
203 |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
204 for (int i = 0, N = macros.getLength(); i < N; ++i) { |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
205 Element macro = (Element)macros.item(i); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
206 if (name.equals(macro.getAttribute("name"))) { |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
207 NodeList subs = macro.getChildNodes(); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
208 for (int j = 0, M = subs.getLength(); j < M; ++j) { |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
209 build(parent, subs.item(j)); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
210 } |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
211 return; |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
212 } |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
213 } |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
214 |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
215 log.warn("no macro '" + name + "' found."); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
216 } |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
217 |
961
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
218 protected void ifClause(Node parent, Element current) |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
219 throws SQLException |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
220 { |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
221 String test = current.getAttribute("test"); |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
222 |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
223 if (test.length() == 0) { |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
224 log.warn("missing 'test' attribute in 'if'"); |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
225 return; |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
226 } |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
227 |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
228 Boolean result = evaluateXPath(test); |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
229 |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
230 if (result != null && result.booleanValue()) { |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
231 NodeList subs = current.getChildNodes(); |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
232 for (int i = 0, N = subs.getLength(); i < N; ++i) { |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
233 build(parent, subs.item(i)); |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
234 } |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
235 } |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
236 } |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
237 |
957
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
238 protected void choose(Node parent, Element current) |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
239 throws SQLException |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
240 { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
241 Node branch = null; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
242 |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
243 NodeList children = current.getChildNodes(); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
244 for (int i = 0, N = children.getLength(); i < N; ++i) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
245 Node child = children.item(i); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
246 String ns = child.getNamespaceURI(); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
247 if (ns == null |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
248 || !ns.equals(DC_NAMESPACE_URI) |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
249 || child.getNodeType() != Node.ELEMENT_NODE |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
250 ) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
251 continue; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
252 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
253 String name = child.getLocalName(); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
254 if ("when".equals(name)) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
255 Element when = (Element)child; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
256 String test = when.getAttribute("test"); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
257 if (test.length() == 0) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
258 log.warn("no 'test' attribute found for when"); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
259 continue; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
260 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
261 |
959
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
262 Boolean result = evaluateXPath(test); |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
263 if (result != null && result.booleanValue()) { |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
264 branch = child; |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
265 break; |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
266 } |
957
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
267 |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
268 continue; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
269 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
270 else if ("otherwise".equals(name)) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
271 branch = child; |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
272 // No break here. |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
273 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
274 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
275 |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
276 if (branch != null) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
277 NodeList subs = branch.getChildNodes(); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
278 for (int i = 0, N = subs.getLength(); i < N; ++i) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
279 build(parent, subs.item(i)); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
280 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
281 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
282 } |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
283 |
959
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
284 protected Boolean evaluateXPath(String expr) { |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
285 try { |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
286 XPath xpath = XPATH_FACTORY.newXPath(); |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
287 xpath.setXPathVariableResolver(frames); |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
288 xpath.setXPathFunctionResolver(FunctionResolver.FUNCTIONS); |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
289 Object result = xpath.evaluate( |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
290 expr, EVAL_DOCUMENT, XPathConstants.BOOLEAN); |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
291 |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
292 return result instanceof Boolean |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
293 ? (Boolean)result |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
294 : null; |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
295 } |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
296 catch (XPathExpressionException xfce) { |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
297 log.error(xfce); |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
298 } |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
299 return null; |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
300 } |
a2b20ed3d3b4
Datacage: Added custom provider for XPath functions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
957
diff
changeset
|
301 |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
302 protected void convert(Node parent, Element current) { |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
303 |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
304 String variable = expand(current.getAttribute("var")); |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
305 String type = expand(current.getAttribute("type")); |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
306 |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
307 if (frames.containsKey(variable)) { |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
308 Object object = TypeConverter.convert( |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
309 frames.get(variable), |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
310 type); |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
311 frames.put(variable, object); |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
312 } |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
313 } |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
314 |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
315 protected String expand(String s) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
316 Matcher m = CompiledStatement.VAR.matcher(s); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
317 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
318 StringBuffer sb = new StringBuffer(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
319 while (m.find()) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
320 String key = m.group(1); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
321 Object value = frames.get(key); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
322 m.appendReplacement(sb, value != null ? value.toString() : ""); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
323 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
324 m.appendTail(sb); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
325 return sb.toString(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
326 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
327 |
742
c09c9e05ecfa
Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
415
diff
changeset
|
328 protected void build(Node parent, Node current) |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
329 throws SQLException |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
330 { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
331 String ns = current.getNamespaceURI(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
332 if (ns != null && ns.equals(DC_NAMESPACE_URI)) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
333 if (current.getNodeType() != Node.ELEMENT_NODE) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
334 log.warn("need elements here"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
335 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
336 else { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
337 String localName = current.getLocalName(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
338 if ("context".equals(localName)) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
339 context(parent, (Element)current); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
340 } |
957
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
341 else if ("choose".equals(localName)) { |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
342 choose(parent, (Element)current); |
e91996b46e3c
Meta data template: Added new choose/when/otherwise construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
742
diff
changeset
|
343 } |
961
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
344 else if ("if".equals(localName)) { |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
345 ifClause(parent, (Element)current); |
3ba4f5a88c20
Datacage template: Added a new 'if' construct similiar to XSLT
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
959
diff
changeset
|
346 } |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
347 else if ("attribute".equals(localName)) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
348 attribute(parent, (Element)current); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
349 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
350 else if ("element".equals(localName)) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
351 element(parent, (Element)current); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
352 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
353 else if ("text".equals(localName)) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
354 text(parent, (Element)current); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
355 } |
415
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
356 else if ("convert".equals(localName)) { |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
357 convert(parent, (Element)current); |
7c018f466d6d
Datacage: Added river parameter to meta data services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
410
diff
changeset
|
358 } |
962
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
359 else if ("call-macro".equals(localName)) { |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
360 callMacro(parent, (Element)current); |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
361 } |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
362 else if ("macro".equals(localName)) { |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
363 // simply ignore the definition. |
2de1808503be
Datacage template: Added a macro mechanism.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
961
diff
changeset
|
364 } |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
365 else { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
366 log.warn("unknown '" + localName + "' -> ignore"); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
367 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
368 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
369 return; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
370 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
371 |
410
df02137b3b28
Datacage service: Cleanup served XML document.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
372
diff
changeset
|
372 if (current.getNodeType() == Node.TEXT_NODE) { |
df02137b3b28
Datacage service: Cleanup served XML document.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
372
diff
changeset
|
373 String txt = current.getNodeValue(); |
df02137b3b28
Datacage service: Cleanup served XML document.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
372
diff
changeset
|
374 if (txt != null && txt.trim().length() == 0) { |
df02137b3b28
Datacage service: Cleanup served XML document.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
372
diff
changeset
|
375 return; |
df02137b3b28
Datacage service: Cleanup served XML document.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
372
diff
changeset
|
376 } |
df02137b3b28
Datacage service: Cleanup served XML document.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
372
diff
changeset
|
377 } |
df02137b3b28
Datacage service: Cleanup served XML document.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
372
diff
changeset
|
378 |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
379 Node copy = owner.importNode(current, false); |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
380 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
381 NodeList children = current.getChildNodes(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
382 for (int i = 0, N = children.getLength(); i < N; ++i) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
383 build(copy, children.item(i)); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
384 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
385 parent.appendChild(copy); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
386 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
387 } // class BuildHelper |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
388 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
389 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
390 public Builder() { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
391 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
392 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
393 public Builder(Document template) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
394 this.template = template; |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
395 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
396 |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
397 protected static List<Node> rootsToList(NodeList roots) { |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
398 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
399 List<Node> elements = new ArrayList<Node>(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
400 |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
401 for (int i = 0, N = roots.getLength(); i < N; ++i) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
402 NodeList rootChildren = roots.item(i).getChildNodes(); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
403 for (int j = 0, M = rootChildren.getLength(); j < M; ++j) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
404 Node child = rootChildren.item(j); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
405 if (child.getNodeType() == Node.ELEMENT_NODE) { |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
406 elements.add(child); |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
407 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
408 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
409 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
410 |
963
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
411 return elements; |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
412 } |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
413 |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
414 public void build( |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
415 Connection connection, |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
416 Node output, |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
417 Map<String, Object> parameters |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
418 ) |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
419 throws SQLException |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
420 { |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
421 BuildHelper helper = new BuildHelper(output, connection, parameters); |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
422 |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
423 NodeList roots = template.getElementsByTagNameNS( |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
424 DC_NAMESPACE_URI, "template"); |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
425 |
f48cef242e7f
Datacage: recommendation mechanism now accepts nodes to append results.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
962
diff
changeset
|
426 helper.build(rootsToList(roots)); |
372
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
427 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
428 } |
fc3cf0ef777e
Added meta data service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
429 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |