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 :

http://dive4elements.wald.intevation.org