Mercurial > dive4elements > gnv-client
diff 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 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Wed Sep 16 12:38:24 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Thu Sep 17 13:38:12 2009 +0000 @@ -8,8 +8,10 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.Map; +import java.util.Set; import org.apache.log4j.Logger; import org.w3c.dom.Document; @@ -27,6 +29,8 @@ import de.intevation.gnv.transition.describedata.DefaultKeyValueDescribeData; import de.intevation.gnv.transition.describedata.KeyValueDescibeData; import de.intevation.gnv.transition.describedata.MinMaxDescribeData; +import de.intevation.gnv.transition.describedata.NamedArrayList; +import de.intevation.gnv.transition.describedata.NamedCollection; import de.intevation.gnv.transition.exception.TransitionException; import de.intevation.gnv.utils.ArtifactXMLUtilities; @@ -50,13 +54,15 @@ private String description = null; - + private String dataName = null; + + private boolean dataMultiSelect = false; protected String queryID = null; private Collection<String> reachableTransitions = null; - private Collection<String> inputValueNames = null; + protected Collection<String> inputValueNames = null; private Map<String,InputValue> inputValues = null; @@ -133,6 +139,13 @@ this.queryID = Config.getStringXPath(configuration,"queryID"); log.info("QueryID ==> "+ this.queryID); + this.dataName = Config.getStringXPath(configuration,"dataname"); + + String dataMultiSelectValue = Config.getStringXPath(configuration,"data-multiselect"); + if (dataMultiSelectValue != null){ + this.dataMultiSelect = Boolean.parseBoolean(dataMultiSelectValue); + } + } /** @@ -163,7 +176,7 @@ if (this.inputData == null){ this.inputData = new HashMap<String,InputData>(inputData.size()); } - // TODO validate Value; und Valueconcatenieren + this.setSelection(tmpItem); this.inputData.put(tmpItem.getName(),tmpItem); }else{ @@ -175,7 +188,65 @@ }else{ log.warn("No Inputdata given"); } + } + private void setSelection(InputData inputData){ + log.debug("TransitionBase.setSelection"); + + Object o = this.getDescribeData(inputData.getName()); + if(o != null){ + if (o instanceof Collection<?>){ + Collection<KeyValueDescibeData> values = (Collection<KeyValueDescibeData>)o; + + String value = inputData.getValue(); + String[] selectedValues = value.split(","); + Set<String> selectedItems = new HashSet<String>(selectedValues.length); + for (int i = 0; i < selectedValues.length; i++){ + selectedItems.add(selectedValues[i].trim()); + } + // Selektion umsetzen + Iterator<KeyValueDescibeData> it = values.iterator(); + while (it.hasNext()){ + KeyValueDescibeData data = it.next(); + String key = ""+data.getKey(); + boolean selected = selectedItems.contains(key); + data.setSelected(selected); + } + }else if (o instanceof MinMaxDescribeData){ + MinMaxDescribeData data = (MinMaxDescribeData)o; + if (inputData.getName().equals(data.getMinName())){ + // TODO: müssen die werte geparst werden? + data.setMinValue(inputData.getValue()); + } + if (inputData.getName().equals(data.getMaxName())){ + // TODO: müssen die werte geparst werden? + data.setMaxValue(inputData.getValue()); + } + } + } + } + + private Object getDescribeData(String name){ + if (this.descibeData != null){ + Iterator<Object> it = this.descibeData.iterator(); + while (it.hasNext()){ + Object o = it.next(); + if (o instanceof NamedCollection<?>){ + if (name.equals(((NamedCollection<?>)o).getName())){ + return o; + } + }else if (o instanceof MinMaxDescribeData){ + if (name.equals(((MinMaxDescribeData)o).getMinName())){ + return o; + } + if (name.equals(((MinMaxDescribeData)o).getMaxName())){ + return o; + } + } + } + } + return null; + } /** @@ -225,11 +296,11 @@ if (this.descibeData == null){ this.descibeData = new ArrayList<Object>(); } - - Iterator<Result> it = result.iterator(); - Collection<KeyValueDescibeData> keyValueDescibeData = new ArrayList<KeyValueDescibeData>(result.size()); - while(it.hasNext()){ - Result resultValue = it.next(); + Iterator<Result> rit = result.iterator(); + NamedCollection<KeyValueDescibeData> keyValueDescibeData = new NamedArrayList<KeyValueDescibeData>(this.dataName,result.size()); + keyValueDescibeData.setMultiSelect(this.dataMultiSelect); + while(rit.hasNext()){ + Result resultValue = rit.next(); keyValueDescibeData.add(new DefaultKeyValueDescribeData(resultValue.getInteger("KEY").intValue(), resultValue.getString("VALUE"))); } this.descibeData.add(keyValueDescibeData); @@ -243,16 +314,27 @@ if(this.descibeData != null){ ArtifactXMLUtilities xmlutilities = new ArtifactXMLUtilities(); Iterator<Object> it = this.descibeData.iterator(); + Node staticNode = xmlutilities.createArtifactElement(document, "static"); + Node dynamic = xmlutilities.createArtifactElement(document, "dynamic"); + rootNode.appendChild(staticNode); + rootNode.appendChild(dynamic); while (it.hasNext()){ Object o = it.next(); - if (!it.hasNext()){ - if (o instanceof Collection<?>){ + if (o instanceof Collection<?>){ // TODO: HACK: // BESSERE LÖSUNG FINDEN - Object[] names = this.inputValueNames.toArray(); - String name = names[names.length-1].toString(); - boolean multiselect = this.inputValues.get(name).isMultiselect(); + String name = null; + boolean multiselect = false; + if (o instanceof NamedCollection<?>){ + NamedCollection<?> nc = ((NamedCollection<?>)o); + name = nc.getName(); + multiselect = nc.isMultiSelect(); + }else{ + Object[] names = this.inputValueNames.toArray(); + name = names[names.length-1].toString(); + } + Element selectNode = xmlutilities.createXFormElement(document,multiselect ? "select" : "select1"); selectNode.setAttribute("ref", name); @@ -261,12 +343,16 @@ lableNode.setTextContent(name); Element choiceNode = xmlutilities.createXFormElement(document, "choices"); - Collection<KeyValueDescibeData> values = (Collection)o; + Collection<KeyValueDescibeData> values = (Collection<KeyValueDescibeData>)o; Iterator<KeyValueDescibeData> resultIt = values.iterator(); while (resultIt.hasNext()){ KeyValueDescibeData result = resultIt.next(); Element itemNode = xmlutilities.createXFormElement(document, "item"); + if (result.isSelected()){ + itemNode.setAttribute("selected", "true"); + } + Element choiceLableNode = xmlutilities.createXFormElement(document, "label"); choiceLableNode.setTextContent(result.getValue()); @@ -275,12 +361,17 @@ Element choicValueNode = xmlutilities.createXFormElement(document, "value"); choicValueNode.setTextContent(""+result.getKey()); itemNode.appendChild(choicValueNode); - choiceNode.appendChild(itemNode); } selectNode.appendChild(lableNode); selectNode.appendChild(choiceNode); - rootNode.appendChild(selectNode); + + if (!it.hasNext()){ + dynamic.appendChild(selectNode); + }else{ + staticNode.appendChild(selectNode); + } + }else if (o instanceof MinMaxDescribeData){ MinMaxDescribeData descibeData = (MinMaxDescribeData)o; Object min = descibeData.getMinValue(); @@ -315,16 +406,18 @@ inputMaxValueNode.setTextContent(max.toString()); inputMaxNode.appendChild(inputMaxValueNode); - rootNode.appendChild(inputMinNode); - rootNode.appendChild(inputMaxNode); + if (!it.hasNext()){ + dynamic.appendChild(inputMinNode); + dynamic.appendChild(inputMaxNode); + }else{ + staticNode.appendChild(inputMinNode); + staticNode.appendChild(inputMaxNode); + } } - } } } - - } /** * @see de.intevation.gnv.transition.Transition#getDescibeData()