Mercurial > dive4elements > gnv-client
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);