Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java @ 79:e33c61735a4e
Implementation of the Static UI done
gnv-artifacts/trunk@101 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Thu, 17 Sep 2009 13:38:12 +0000 |
parents | 969faa37a11b |
children | 9b41f3688610 |
comparison
equal
deleted
inserted
replaced
78:969faa37a11b | 79:e33c61735a4e |
---|---|
6 import java.util.ArrayList; | 6 import java.util.ArrayList; |
7 import java.util.Collection; | 7 import java.util.Collection; |
8 import java.util.Date; | 8 import java.util.Date; |
9 import java.util.GregorianCalendar; | 9 import java.util.GregorianCalendar; |
10 import java.util.HashMap; | 10 import java.util.HashMap; |
11 import java.util.HashSet; | |
11 import java.util.Iterator; | 12 import java.util.Iterator; |
12 import java.util.Map; | 13 import java.util.Map; |
14 import java.util.Set; | |
13 | 15 |
14 import org.apache.log4j.Logger; | 16 import org.apache.log4j.Logger; |
15 import org.w3c.dom.Document; | 17 import org.w3c.dom.Document; |
16 import org.w3c.dom.Element; | 18 import org.w3c.dom.Element; |
17 import org.w3c.dom.Node; | 19 import org.w3c.dom.Node; |
25 import de.intevation.gnv.geobackend.base.query.exception.QueryException; | 27 import de.intevation.gnv.geobackend.base.query.exception.QueryException; |
26 import de.intevation.gnv.geobackend.util.DateUtils; | 28 import de.intevation.gnv.geobackend.util.DateUtils; |
27 import de.intevation.gnv.transition.describedata.DefaultKeyValueDescribeData; | 29 import de.intevation.gnv.transition.describedata.DefaultKeyValueDescribeData; |
28 import de.intevation.gnv.transition.describedata.KeyValueDescibeData; | 30 import de.intevation.gnv.transition.describedata.KeyValueDescibeData; |
29 import de.intevation.gnv.transition.describedata.MinMaxDescribeData; | 31 import de.intevation.gnv.transition.describedata.MinMaxDescribeData; |
32 import de.intevation.gnv.transition.describedata.NamedArrayList; | |
33 import de.intevation.gnv.transition.describedata.NamedCollection; | |
30 import de.intevation.gnv.transition.exception.TransitionException; | 34 import de.intevation.gnv.transition.exception.TransitionException; |
31 import de.intevation.gnv.utils.ArtifactXMLUtilities; | 35 import de.intevation.gnv.utils.ArtifactXMLUtilities; |
32 | 36 |
33 /** | 37 /** |
34 * @author Tim Englich <tim.englich@intevation.de> | 38 * @author Tim Englich <tim.englich@intevation.de> |
48 | 52 |
49 private String id = null; | 53 private String id = null; |
50 | 54 |
51 private String description = null; | 55 private String description = null; |
52 | 56 |
53 | 57 private String dataName = null; |
58 | |
59 private boolean dataMultiSelect = false; | |
54 | 60 |
55 protected String queryID = null; | 61 protected String queryID = null; |
56 | 62 |
57 private Collection<String> reachableTransitions = null; | 63 private Collection<String> reachableTransitions = null; |
58 | 64 |
59 private Collection<String> inputValueNames = null; | 65 protected Collection<String> inputValueNames = null; |
60 | 66 |
61 private Map<String,InputValue> inputValues = null; | 67 private Map<String,InputValue> inputValues = null; |
62 | 68 |
63 private Transition parent = null; | 69 private Transition parent = null; |
64 | 70 |
130 this.inputValueNames.add(inputValue.getName()); | 136 this.inputValueNames.add(inputValue.getName()); |
131 } | 137 } |
132 | 138 |
133 this.queryID = Config.getStringXPath(configuration,"queryID"); | 139 this.queryID = Config.getStringXPath(configuration,"queryID"); |
134 log.info("QueryID ==> "+ this.queryID); | 140 log.info("QueryID ==> "+ this.queryID); |
141 | |
142 this.dataName = Config.getStringXPath(configuration,"dataname"); | |
143 | |
144 String dataMultiSelectValue = Config.getStringXPath(configuration,"data-multiselect"); | |
145 if (dataMultiSelectValue != null){ | |
146 this.dataMultiSelect = Boolean.parseBoolean(dataMultiSelectValue); | |
147 } | |
135 | 148 |
136 } | 149 } |
137 | 150 |
138 /** | 151 /** |
139 * @see de.intevation.gnv.transition.Transition#getParent() | 152 * @see de.intevation.gnv.transition.Transition#getParent() |
161 InputValue inputValue = this.inputValues.get(tmpItem.getName()); | 174 InputValue inputValue = this.inputValues.get(tmpItem.getName()); |
162 if (inputValue != null){ | 175 if (inputValue != null){ |
163 if (this.inputData == null){ | 176 if (this.inputData == null){ |
164 this.inputData = new HashMap<String,InputData>(inputData.size()); | 177 this.inputData = new HashMap<String,InputData>(inputData.size()); |
165 } | 178 } |
166 // TODO validate Value; und Valueconcatenieren | 179 this.setSelection(tmpItem); |
167 this.inputData.put(tmpItem.getName(),tmpItem); | 180 this.inputData.put(tmpItem.getName(),tmpItem); |
168 | 181 |
169 }else{ | 182 }else{ |
170 String errMsg = "No Inputvalue given for Inputdata "+ tmpItem.getName(); | 183 String errMsg = "No Inputvalue given for Inputdata "+ tmpItem.getName(); |
171 log.warn(errMsg+ "Value will be ignored"); | 184 log.warn(errMsg+ "Value will be ignored"); |
173 } | 186 } |
174 } | 187 } |
175 }else{ | 188 }else{ |
176 log.warn("No Inputdata given"); | 189 log.warn("No Inputdata given"); |
177 } | 190 } |
178 | 191 } |
192 | |
193 private void setSelection(InputData inputData){ | |
194 log.debug("TransitionBase.setSelection"); | |
195 | |
196 Object o = this.getDescribeData(inputData.getName()); | |
197 if(o != null){ | |
198 if (o instanceof Collection<?>){ | |
199 Collection<KeyValueDescibeData> values = (Collection<KeyValueDescibeData>)o; | |
200 | |
201 String value = inputData.getValue(); | |
202 String[] selectedValues = value.split(","); | |
203 Set<String> selectedItems = new HashSet<String>(selectedValues.length); | |
204 for (int i = 0; i < selectedValues.length; i++){ | |
205 selectedItems.add(selectedValues[i].trim()); | |
206 } | |
207 // Selektion umsetzen | |
208 Iterator<KeyValueDescibeData> it = values.iterator(); | |
209 while (it.hasNext()){ | |
210 KeyValueDescibeData data = it.next(); | |
211 String key = ""+data.getKey(); | |
212 boolean selected = selectedItems.contains(key); | |
213 data.setSelected(selected); | |
214 } | |
215 }else if (o instanceof MinMaxDescribeData){ | |
216 MinMaxDescribeData data = (MinMaxDescribeData)o; | |
217 if (inputData.getName().equals(data.getMinName())){ | |
218 // TODO: müssen die werte geparst werden? | |
219 data.setMinValue(inputData.getValue()); | |
220 } | |
221 if (inputData.getName().equals(data.getMaxName())){ | |
222 // TODO: müssen die werte geparst werden? | |
223 data.setMaxValue(inputData.getValue()); | |
224 } | |
225 } | |
226 } | |
227 } | |
228 | |
229 private Object getDescribeData(String name){ | |
230 if (this.descibeData != null){ | |
231 Iterator<Object> it = this.descibeData.iterator(); | |
232 while (it.hasNext()){ | |
233 Object o = it.next(); | |
234 if (o instanceof NamedCollection<?>){ | |
235 if (name.equals(((NamedCollection<?>)o).getName())){ | |
236 return o; | |
237 } | |
238 }else if (o instanceof MinMaxDescribeData){ | |
239 if (name.equals(((MinMaxDescribeData)o).getMinName())){ | |
240 return o; | |
241 } | |
242 if (name.equals(((MinMaxDescribeData)o).getMaxName())){ | |
243 return o; | |
244 } | |
245 } | |
246 } | |
247 } | |
248 return null; | |
249 | |
179 } | 250 } |
180 | 251 |
181 /** | 252 /** |
182 * @see de.intevation.gnv.transition.Transition#isTransitionReachable(java.lang.String) | 253 * @see de.intevation.gnv.transition.Transition#isTransitionReachable(java.lang.String) |
183 */ | 254 */ |
223 */ | 294 */ |
224 protected void purifyResult(Collection<Result> result) { | 295 protected void purifyResult(Collection<Result> result) { |
225 if (this.descibeData == null){ | 296 if (this.descibeData == null){ |
226 this.descibeData = new ArrayList<Object>(); | 297 this.descibeData = new ArrayList<Object>(); |
227 } | 298 } |
228 | 299 Iterator<Result> rit = result.iterator(); |
229 Iterator<Result> it = result.iterator(); | 300 NamedCollection<KeyValueDescibeData> keyValueDescibeData = new NamedArrayList<KeyValueDescibeData>(this.dataName,result.size()); |
230 Collection<KeyValueDescibeData> keyValueDescibeData = new ArrayList<KeyValueDescibeData>(result.size()); | 301 keyValueDescibeData.setMultiSelect(this.dataMultiSelect); |
231 while(it.hasNext()){ | 302 while(rit.hasNext()){ |
232 Result resultValue = it.next(); | 303 Result resultValue = rit.next(); |
233 keyValueDescibeData.add(new DefaultKeyValueDescribeData(resultValue.getInteger("KEY").intValue(), resultValue.getString("VALUE"))); | 304 keyValueDescibeData.add(new DefaultKeyValueDescribeData(resultValue.getInteger("KEY").intValue(), resultValue.getString("VALUE"))); |
234 } | 305 } |
235 this.descibeData.add(keyValueDescibeData); | 306 this.descibeData.add(keyValueDescibeData); |
236 } | 307 } |
237 | 308 |
241 public void describe(Document document, Node rootNode) { | 312 public void describe(Document document, Node rootNode) { |
242 | 313 |
243 if(this.descibeData != null){ | 314 if(this.descibeData != null){ |
244 ArtifactXMLUtilities xmlutilities = new ArtifactXMLUtilities(); | 315 ArtifactXMLUtilities xmlutilities = new ArtifactXMLUtilities(); |
245 Iterator<Object> it = this.descibeData.iterator(); | 316 Iterator<Object> it = this.descibeData.iterator(); |
317 Node staticNode = xmlutilities.createArtifactElement(document, "static"); | |
318 Node dynamic = xmlutilities.createArtifactElement(document, "dynamic"); | |
319 rootNode.appendChild(staticNode); | |
320 rootNode.appendChild(dynamic); | |
246 while (it.hasNext()){ | 321 while (it.hasNext()){ |
247 | 322 |
248 Object o = it.next(); | 323 Object o = it.next(); |
249 if (!it.hasNext()){ | 324 if (o instanceof Collection<?>){ |
250 if (o instanceof Collection<?>){ | |
251 // TODO: HACK: | 325 // TODO: HACK: |
252 // BESSERE LÖSUNG FINDEN | 326 // BESSERE LÖSUNG FINDEN |
253 Object[] names = this.inputValueNames.toArray(); | 327 String name = null; |
254 String name = names[names.length-1].toString(); | 328 boolean multiselect = false; |
255 boolean multiselect = this.inputValues.get(name).isMultiselect(); | 329 if (o instanceof NamedCollection<?>){ |
330 NamedCollection<?> nc = ((NamedCollection<?>)o); | |
331 name = nc.getName(); | |
332 multiselect = nc.isMultiSelect(); | |
333 }else{ | |
334 Object[] names = this.inputValueNames.toArray(); | |
335 name = names[names.length-1].toString(); | |
336 } | |
337 | |
256 | 338 |
257 Element selectNode = xmlutilities.createXFormElement(document,multiselect ? "select" : "select1"); | 339 Element selectNode = xmlutilities.createXFormElement(document,multiselect ? "select" : "select1"); |
258 selectNode.setAttribute("ref", name); | 340 selectNode.setAttribute("ref", name); |
259 | 341 |
260 Element lableNode = xmlutilities.createXFormElement(document, "label"); | 342 Element lableNode = xmlutilities.createXFormElement(document, "label"); |
261 lableNode.setTextContent(name); | 343 lableNode.setTextContent(name); |
262 Element choiceNode = xmlutilities.createXFormElement(document, "choices"); | 344 Element choiceNode = xmlutilities.createXFormElement(document, "choices"); |
263 | 345 |
264 Collection<KeyValueDescibeData> values = (Collection)o; | 346 Collection<KeyValueDescibeData> values = (Collection<KeyValueDescibeData>)o; |
265 Iterator<KeyValueDescibeData> resultIt = values.iterator(); | 347 Iterator<KeyValueDescibeData> resultIt = values.iterator(); |
266 while (resultIt.hasNext()){ | 348 while (resultIt.hasNext()){ |
267 KeyValueDescibeData result = resultIt.next(); | 349 KeyValueDescibeData result = resultIt.next(); |
268 Element itemNode = xmlutilities.createXFormElement(document, "item"); | 350 Element itemNode = xmlutilities.createXFormElement(document, "item"); |
351 | |
352 if (result.isSelected()){ | |
353 itemNode.setAttribute("selected", "true"); | |
354 } | |
269 | 355 |
270 | 356 |
271 Element choiceLableNode = xmlutilities.createXFormElement(document, "label"); | 357 Element choiceLableNode = xmlutilities.createXFormElement(document, "label"); |
272 choiceLableNode.setTextContent(result.getValue()); | 358 choiceLableNode.setTextContent(result.getValue()); |
273 itemNode.appendChild(choiceLableNode); | 359 itemNode.appendChild(choiceLableNode); |
274 | 360 |
275 Element choicValueNode = xmlutilities.createXFormElement(document, "value"); | 361 Element choicValueNode = xmlutilities.createXFormElement(document, "value"); |
276 choicValueNode.setTextContent(""+result.getKey()); | 362 choicValueNode.setTextContent(""+result.getKey()); |
277 itemNode.appendChild(choicValueNode); | 363 itemNode.appendChild(choicValueNode); |
278 | |
279 choiceNode.appendChild(itemNode); | 364 choiceNode.appendChild(itemNode); |
280 } | 365 } |
281 selectNode.appendChild(lableNode); | 366 selectNode.appendChild(lableNode); |
282 selectNode.appendChild(choiceNode); | 367 selectNode.appendChild(choiceNode); |
283 rootNode.appendChild(selectNode); | 368 |
369 if (!it.hasNext()){ | |
370 dynamic.appendChild(selectNode); | |
371 }else{ | |
372 staticNode.appendChild(selectNode); | |
373 } | |
374 | |
284 }else if (o instanceof MinMaxDescribeData){ | 375 }else if (o instanceof MinMaxDescribeData){ |
285 MinMaxDescribeData descibeData = (MinMaxDescribeData)o; | 376 MinMaxDescribeData descibeData = (MinMaxDescribeData)o; |
286 Object min = descibeData.getMinValue(); | 377 Object min = descibeData.getMinValue(); |
287 Object max = descibeData.getMaxValue(); | 378 Object max = descibeData.getMaxValue(); |
288 if (min instanceof GregorianCalendar){ | 379 if (min instanceof GregorianCalendar){ |
313 | 404 |
314 Element inputMaxValueNode = xmlutilities.createXFormElement(document, "value"); | 405 Element inputMaxValueNode = xmlutilities.createXFormElement(document, "value"); |
315 inputMaxValueNode.setTextContent(max.toString()); | 406 inputMaxValueNode.setTextContent(max.toString()); |
316 inputMaxNode.appendChild(inputMaxValueNode); | 407 inputMaxNode.appendChild(inputMaxValueNode); |
317 | 408 |
318 rootNode.appendChild(inputMinNode); | 409 |
319 rootNode.appendChild(inputMaxNode); | 410 if (!it.hasNext()){ |
320 | 411 dynamic.appendChild(inputMinNode); |
412 dynamic.appendChild(inputMaxNode); | |
413 }else{ | |
414 staticNode.appendChild(inputMinNode); | |
415 staticNode.appendChild(inputMaxNode); | |
416 } | |
321 } | 417 } |
322 | 418 } |
323 } | 419 } |
324 } | 420 } |
325 } | |
326 | |
327 } | |
328 | 421 |
329 /** | 422 /** |
330 * @see de.intevation.gnv.transition.Transition#getDescibeData() | 423 * @see de.intevation.gnv.transition.Transition#getDescibeData() |
331 */ | 424 */ |
332 public Collection<Object> getDescibeData() { | 425 public Collection<Object> getDescibeData() { |