Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 124:b7a9557957d1
Appende the static data to the static node of the DESCRIBE document.
flys-artifacts/trunk@1452 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 10 Mar 2011 13:31:36 +0000 |
parents | e0ded17a4846 |
children | 21d791e21aca |
comparison
equal
deleted
inserted
replaced
123:ebb1cb69d847 | 124:b7a9557957d1 |
---|---|
1 package de.intevation.flys.artifacts; | 1 package de.intevation.flys.artifacts; |
2 | 2 |
3 import java.util.List; | 3 import java.util.List; |
4 import java.util.Set; | |
5 | |
6 import javax.xml.xpath.XPathConstants; | |
4 | 7 |
5 import org.w3c.dom.Document; | 8 import org.w3c.dom.Document; |
6 import org.w3c.dom.Element; | 9 import org.w3c.dom.Element; |
10 import org.w3c.dom.Node; | |
7 | 11 |
8 import org.apache.log4j.Logger; | 12 import org.apache.log4j.Logger; |
9 | 13 |
10 import de.intevation.artifacts.ArtifactNamespaceContext; | 14 import de.intevation.artifacts.ArtifactNamespaceContext; |
11 import de.intevation.artifacts.CallContext; | 15 import de.intevation.artifacts.CallContext; |
12 | 16 |
13 import de.intevation.artifactdatabase.ProtocolUtils; | 17 import de.intevation.artifactdatabase.ProtocolUtils; |
18 import de.intevation.artifactdatabase.data.StateData; | |
14 import de.intevation.artifactdatabase.state.State; | 19 import de.intevation.artifactdatabase.state.State; |
15 import de.intevation.artifactdatabase.state.StateEngine; | 20 import de.intevation.artifactdatabase.state.StateEngine; |
16 import de.intevation.artifactdatabase.transition.TransitionEngine; | 21 import de.intevation.artifactdatabase.transition.TransitionEngine; |
17 | 22 |
18 import de.intevation.artifacts.common.utils.XMLUtils; | 23 import de.intevation.artifacts.common.utils.XMLUtils; |
31 private static Logger logger = Logger.getLogger(WINFOArtifact.class); | 36 private static Logger logger = Logger.getLogger(WINFOArtifact.class); |
32 | 37 |
33 | 38 |
34 /** The name of the artifact.*/ | 39 /** The name of the artifact.*/ |
35 public static final String ARTIFACT_NAME = "winfo"; | 40 public static final String ARTIFACT_NAME = "winfo"; |
41 | |
42 /** XPath */ | |
43 public static final String XPATH_STATIC_UI ="/art:result/art:ui/art:static"; | |
36 | 44 |
37 | 45 |
38 /** | 46 /** |
39 * The default constructor. | 47 * The default constructor. |
40 */ | 48 */ |
85 ProtocolUtils.appendState(creator, root, current); | 93 ProtocolUtils.appendState(creator, root, current); |
86 ProtocolUtils.appendReachableStates(creator, root, reachable); | 94 ProtocolUtils.appendReachableStates(creator, root, reachable); |
87 | 95 |
88 current.describe(description, root, context, identifier()); | 96 current.describe(description, root, context, identifier()); |
89 | 97 |
98 Node ui = (Node) XMLUtils.xpath( | |
99 description, | |
100 XPATH_STATIC_UI, | |
101 XPathConstants.NODE, | |
102 ArtifactNamespaceContext.INSTANCE); | |
103 | |
104 appendStaticUI(creator, ui); | |
105 | |
90 return description; | 106 return description; |
91 } | 107 } |
92 | 108 |
93 | 109 |
94 /** | 110 /** |
97 * @return the name of the concrete artifact. | 113 * @return the name of the concrete artifact. |
98 */ | 114 */ |
99 public String getName() { | 115 public String getName() { |
100 return ARTIFACT_NAME; | 116 return ARTIFACT_NAME; |
101 } | 117 } |
118 | |
119 | |
120 /** | |
121 * This method appends the static data - that has already been inserted by | |
122 * the user - to the static node of the DESCRIBE document. | |
123 * | |
124 * @param cr The ElementCreator that is used to create new elements. | |
125 * @param ui The static ui node. | |
126 */ | |
127 protected void appendStaticUI(XMLUtils.ElementCreator cr, Node ui) { | |
128 Set<String> keys = data.keySet(); | |
129 | |
130 // XXX This just handles single selection string values. If we need more | |
131 // complex (maybe multiselect) objects we should introduce a data | |
132 // structure for this - this structure should have a method that returns | |
133 // a <data> node that contains its items. | |
134 for (String k: keys) { | |
135 logger.debug("The key = " + k); | |
136 StateData d = getData(k); | |
137 | |
138 Element dataElement = cr.create("data"); | |
139 cr.addAttr(dataElement, "name", (String) d.getName(), true); | |
140 cr.addAttr(dataElement, "type", d.getType(), true); | |
141 | |
142 Element itemElement = cr.create("item"); | |
143 cr.addAttr(itemElement, "value", (String) d.getValue(), true); | |
144 // TODO Description (human readable) is missing | |
145 | |
146 dataElement.appendChild(itemElement); | |
147 ui.appendChild(dataElement); | |
148 } | |
149 } | |
102 } | 150 } |
103 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 151 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |