diff gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java @ 81:9b41f3688610

Added Support for TimeSeriesMesh gnv-artifacts/trunk@106 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Mon, 21 Sep 2009 11:50:47 +0000
parents e33c61735a4e
children 5eb62df21f9a
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java	Thu Sep 17 14:25:24 2009 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java	Mon Sep 21 11:50:47 2009 +0000
@@ -10,6 +10,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -31,6 +32,7 @@
 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.describedata.SingleValueDescribeData;
 import de.intevation.gnv.transition.exception.TransitionException;
 import de.intevation.gnv.utils.ArtifactXMLUtilities;
 
@@ -54,7 +56,7 @@
     
     private String description = null;
     
-    private String dataName = null;
+    protected String dataName = null;
     
     private boolean dataMultiSelect = false;
 
@@ -130,7 +132,20 @@
         this.inputValueNames = new ArrayList<String>(inputValuesNodes.getLength());
         for (int i = 0 ; i < inputValuesNodes.getLength(); i++){
             Node inputValueNode = inputValuesNodes.item(i);
-            InputValue inputValue = new DefaultInputValue(Config.getStringXPath(inputValueNode,"@name"), Config.getStringXPath(inputValueNode,"@type"), Boolean.parseBoolean(Config.getStringXPath(inputValueNode,"@multiselect")));
+            String usedinQueryValue = Config.getStringXPath(inputValueNode,"@usedinquery");
+            int usedinQuery = 1;
+            if (usedinQueryValue != null){
+                try {
+                    usedinQuery = Integer.parseInt(usedinQueryValue);
+                } catch (NumberFormatException e) {
+                    log.warn("Used in Query Value cannot be transformed into a Number");
+                }
+            }
+            InputValue inputValue = new DefaultInputValue(
+                    Config.getStringXPath(inputValueNode,"@name"), 
+                    Config.getStringXPath(inputValueNode,"@type"), 
+                    Boolean.parseBoolean(Config.getStringXPath(inputValueNode,"@multiselect")),
+                    usedinQuery);
             log.debug(inputValue.toString());
             this.inputValues.put(inputValue.getName(),inputValue);
             this.inputValueNames.add(inputValue.getName());
@@ -272,17 +287,30 @@
     public void advance() throws TransitionException {
         log.debug("TransitionBase.advance");
         try {
-            String[] filterValues = new String[this.inputValueNames.size()];
+            List<String> list = new ArrayList<String>();
+            
+           
             Iterator<String> it = this.inputValueNames.iterator();
             int i = 0;
             while (it.hasNext()){
                 String value = it.next();
                 InputData data = this.inputData.get(value);
-                filterValues[i++] = data.getValue();
+                int size = this.inputValues.get(data.getName()).usedInQueries();
+                for (int j = 0; j < size; j++){
+                    list.add(data.getValue());
+                }
             }
-            QueryExecutor queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor();
-            Collection<Result> result = queryExecutor.executeQuery(this.queryID, filterValues);
-            this.purifyResult(result);
+            String[] filterValues = list.toArray(new String[0]);
+            Collection<Result> result =  null;
+            try {
+                if (this.queryID != null){
+                    QueryExecutor queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor();
+                    result = queryExecutor.executeQuery(this.queryID, filterValues);
+                }
+                this.purifyResult(result);
+            } catch (RuntimeException e) {
+                log.error(e,e);
+            }
         } catch (QueryException e) {
             log.error(e,e);
             throw new TransitionException(e);
@@ -414,7 +442,29 @@
                             staticNode.appendChild(inputMinNode);
                             staticNode.appendChild(inputMaxNode);
                         }
+                    }else if (o instanceof SingleValueDescribeData){
+                        
+                        SingleValueDescribeData svdb = (SingleValueDescribeData)o;
+                        
+                        Element inputNode = xmlutilities.createXFormElement(document, "input");
+                        inputNode.setAttribute("ref", svdb.getName());
+                        
+                        Element inputLableNode = xmlutilities.createXFormElement(document, "label");
+                        inputLableNode.setTextContent(svdb.getName());
+                        inputNode.appendChild(inputLableNode);
+                        
+                        Element inputValueNode = xmlutilities.createXFormElement(document, "value");
+                        inputValueNode.setTextContent(svdb.getValue());
+                        inputNode.appendChild(inputValueNode);
+                        
+                        
+                        if (!it.hasNext()){
+                            dynamic.appendChild(inputNode);
+                        }else{
+                            staticNode.appendChild(inputNode);
+                        }
                     }
+                
                 }
             }
         }
@@ -438,6 +488,6 @@
      * @see de.intevation.gnv.transition.Transition#getInputData()
      */
     public Collection<InputData> getInputData() throws TransitionException {
-        return this.inputData.values();
+        return this.inputData !=  null ? this.inputData.values() : null;
     }
 }

http://dive4elements.wald.intevation.org