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

http://dive4elements.wald.intevation.org