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() {

http://dive4elements.wald.intevation.org