comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/MapArtifact.java @ 3193:2f922be407ea

Moved common code of the *Artifacts into FLYSArtifact. flys-artifacts/trunk@4809 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 27 Jun 2012 13:45:55 +0000
parents 4bd3d8bbb60c
children 453d2d0c4258
comparison
equal deleted inserted replaced
3192:cd309f8597f6 3193:2f922be407ea
4 4
5 import java.util.List; 5 import java.util.List;
6 6
7 import org.w3c.dom.Document; 7 import org.w3c.dom.Document;
8 import org.w3c.dom.Element; 8 import org.w3c.dom.Element;
9 import org.w3c.dom.Node;
10 9
11 import de.intevation.artifacts.ArtifactFactory; 10 import de.intevation.artifacts.ArtifactFactory;
12 import de.intevation.artifacts.CallMeta; 11 import de.intevation.artifacts.CallMeta;
13 import de.intevation.artifacts.CallContext; 12 import de.intevation.artifacts.CallContext;
14 13
19 import de.intevation.artifactdatabase.ProtocolUtils; 18 import de.intevation.artifactdatabase.ProtocolUtils;
20 import de.intevation.artifactdatabase.state.Facet; 19 import de.intevation.artifactdatabase.state.Facet;
21 import de.intevation.artifactdatabase.state.State; 20 import de.intevation.artifactdatabase.state.State;
22 import de.intevation.artifactdatabase.state.StateEngine; 21 import de.intevation.artifactdatabase.state.StateEngine;
23 import de.intevation.artifactdatabase.state.Output; 22 import de.intevation.artifactdatabase.state.Output;
24 import de.intevation.artifactdatabase.transition.TransitionEngine;
25 23
26 import de.intevation.flys.model.River; 24 import de.intevation.flys.model.River;
27 import de.intevation.flys.utils.FLYSUtils; 25 import de.intevation.flys.utils.FLYSUtils;
28 26
29 import de.intevation.flys.artifacts.RiverAxisArtifact.RiverAxisState; 27 import de.intevation.flys.artifacts.RiverAxisArtifact.RiverAxisState;
56 setCurrentState(states.get(0)); 54 setCurrentState(states.get(0));
57 } 55 }
58 56
59 57
60 @Override 58 @Override
61 public Document describe(Document data, CallContext context) { 59 protected void appendBackgroundActivity(
62 logger.debug("Describe: the current state is: " + getCurrentStateId());
63
64 if (logger.isDebugEnabled()) {
65 dumpArtifact();
66 }
67
68 FLYSContext flysContext = FLYSUtils.getFlysContext(context);
69
70 StateEngine stateEngine = (StateEngine) flysContext.get(
71 FLYSContext.STATE_ENGINE_KEY);
72
73 TransitionEngine transitionEngine = (TransitionEngine) flysContext.get(
74 FLYSContext.TRANSITION_ENGINE_KEY);
75
76 List<State> reachable = transitionEngine.getReachableStates(
77 this, getCurrentState(context), stateEngine);
78
79 Document description = XMLUtils.newDocument();
80 XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator(
81 description,
82 ArtifactNamespaceContext.NAMESPACE_URI,
83 ArtifactNamespaceContext.NAMESPACE_PREFIX);
84
85 Element root = ProtocolUtils.createRootNode(creator);
86 description.appendChild(root);
87
88 State current = getCurrentState(context);
89
90 ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash());
91 ProtocolUtils.appendState(creator, root, current);
92 ProtocolUtils.appendReachableStates(creator, root, reachable);
93
94 appendBackgroundActivity(creator, root, context);
95
96 Element name = ProtocolUtils.createArtNode(
97 creator, "name",
98 new String[] { "value" },
99 new String[] { getName() });
100
101 Element ui = ProtocolUtils.createArtNode(
102 creator, "ui", null, null);
103
104 Element staticUI = ProtocolUtils.createArtNode(
105 creator, "static", null, null);
106
107 Element outs = ProtocolUtils.createArtNode(
108 creator, "outputmodes", null, null);
109 appendOutputModes(description, outs, context, identifier());
110
111 appendStaticUI(description, staticUI, context, identifier());
112
113 Element dynamic = current.describe(
114 this,
115 description,
116 root,
117 context,
118 identifier());
119
120 if (dynamic != null) {
121 ui.appendChild(dynamic);
122 }
123
124 ui.appendChild(staticUI);
125
126 root.appendChild(name);
127 root.appendChild(ui);
128 root.appendChild(outs);
129
130 return description;
131
132 }
133
134
135 protected static void appendBackgroundActivity(
136 ElementCreator cr, 60 ElementCreator cr,
137 Element root, 61 Element root,
138 CallContext context 62 CallContext context
139 ) { 63 ) {
140 Element inBackground = cr.create("background-processing"); 64 Element inBackground = cr.create("background-processing");
149 73
150 74
151 /** 75 /**
152 * Append output mode nodes to a document. 76 * Append output mode nodes to a document.
153 */ 77 */
78 @Override
154 protected void appendOutputModes( 79 protected void appendOutputModes(
155 Document doc, 80 Document doc,
156 Element outs, 81 Element outs,
157 CallContext context, 82 CallContext context,
158 String uuid) 83 String uuid)
220 catch (IllegalArgumentException iae) { 145 catch (IllegalArgumentException iae) {
221 // state is not valid, so we do not append its outputs. 146 // state is not valid, so we do not append its outputs.
222 } 147 }
223 } 148 }
224 149
225
226 /**
227 * This method appends the static data - that has already been inserted by
228 * the user - to the static node of the DESCRIBE document.
229 *
230 * @param doc The document.
231 * @param ui The root node.
232 * @param context The CallContext.
233 * @param uuid The identifier of the artifact.
234 */
235 protected void appendStaticUI(
236 Document doc,
237 Node ui,
238 CallContext context,
239 String uuid)
240 {
241 List<String> stateIds = getPreviousStateIds();
242
243 logger.debug("previous states: " + stateIds);
244 FLYSContext flysContext = FLYSUtils.getFlysContext(context);
245 StateEngine engine = (StateEngine) flysContext.get(
246 FLYSContext.STATE_ENGINE_KEY);
247
248 for (String stateId: stateIds) {
249 logger.debug("Append static data for state: " + stateId);
250 DefaultState state = (DefaultState) engine.getState(stateId);
251
252 ui.appendChild(state.describeStatic(this, doc, ui, context, uuid));
253 }
254 }
255
256
257 public static class MapState extends RiverAxisState { 150 public static class MapState extends RiverAxisState {
258 151
259 @Override 152 @Override
260 public Object computeAdvance( 153 public Object computeAdvance(
261 FLYSArtifact artifact, 154 FLYSArtifact artifact,

http://dive4elements.wald.intevation.org