diff gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java @ 598:9681ac6b6527

Added the possibility to use the data which are send using the MapServer-Interface during the Workflow of the GNV-Artifacts. gnv-artifacts/trunk@656 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 02 Feb 2010 13:12:11 +0000
parents 5b9b74c08bbb
children 9a828e5a2390
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java	Mon Feb 01 14:52:05 2010 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java	Tue Feb 02 13:12:11 2010 +0000
@@ -3,13 +3,17 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
+import javax.xml.xpath.XPathConstants;
+
 import org.apache.log4j.Logger;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import de.intevation.artifactdatabase.ProxyArtifact;
 import de.intevation.artifactdatabase.XMLUtils;
@@ -21,8 +25,10 @@
 import de.intevation.gnv.artifacts.GNVArtifactBase;
 import de.intevation.gnv.artifacts.GNVDefaultArtifact;
 import de.intevation.gnv.artifacts.GNVProductArtifactFactory;
+import de.intevation.gnv.artifacts.PreSettingArtifact;
 import de.intevation.gnv.artifacts.fis.product.Product;
 import de.intevation.gnv.artifacts.ressource.RessourceFactory;
+import de.intevation.gnv.state.DefaultInputData;
 import de.intevation.gnv.state.InputData;
 
 
@@ -31,12 +37,20 @@
  */
 public class SelectProductArtifact extends GNVDefaultArtifact {
 
+    /**
+     * THE UID of this Class.
+     */
+    private static final long serialVersionUID = -7952357683127758677L;
+
     public static final String XPATH_UUID = "art:action/art:uuid/@value";
 
     public static final String XPATH_HASH = "art:action/art:hash/@value";
 
     public static final String XPATH_INPUT_DATA_VALUE =
         "art:action/art:data/art:input[@name='product']/@value";
+    
+    public static final String XPATH_SETUP_PARAMETER_NODES = 
+        "/art:action/art:factory/art:parameter";
 
     public static final String XFORM_URL    = "http://www.w3.org/2002/xforms";
     public static final String XFORM_PREFIX = "xform";
@@ -47,6 +61,8 @@
     private Product  current;
     private Artifact artifact;
     private String   name;
+    
+    private Map<String, InputData> preSettings = null;
 
     public SelectProductArtifact() {
         super();
@@ -62,6 +78,31 @@
         log.debug("SelectProductArtifact.setup()");
         super.setup(identifier, factory, context,data);
         this.name = factory.getName();
+        
+        // Read the Parameters that should be used for the setup from the
+        // Data-XML.Document.
+        NodeList parameterNodes = (NodeList) XMLUtils.xpath(data, 
+                XPATH_SETUP_PARAMETER_NODES,
+                XPathConstants.NODESET,
+                ArtifactNamespaceContext.INSTANCE);
+        if (parameterNodes != null && parameterNodes.getLength() > 0){
+            this.preSettings = new HashMap<String, InputData>();
+            for (int i = 0; i < parameterNodes.getLength(); i++){
+                Element parameterNode = (Element)parameterNodes.item(i);
+                String name = parameterNode.getAttribute("name");
+                String value = parameterNode.getAttribute("value");
+                log.debug("Name:  "+name);
+                log.debug("Value: "+value);
+                InputData inputData = this.preSettings.get(name);
+                if (inputData == null){
+                    inputData = new DefaultInputData(name, value);
+                    this.preSettings.put(name, inputData);
+                }else{
+                    inputData.concartValue(value);
+                }
+            }
+        }
+        
     }
 
 
@@ -165,7 +206,11 @@
             .getArtifactFactoryByName(current.getName());
         artifact                = factory.createArtifact(uuid, context, null);
 
-        Document feedDocument = feedDocument(uuid, hash);
+        
+        if (this.preSettings != null && artifact instanceof PreSettingArtifact){
+            ((PreSettingArtifact)artifact).setPreSettings(this.preSettings);
+        }
+        
         artifact.feed(feedDocument(uuid, hash), context);
 
         result = ((GNVArtifactBase) artifact).initialize(context);

http://dive4elements.wald.intevation.org