diff gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java @ 478:0e0c64c821dc

Added support to step back to the point for choosing a product. gnv-artifacts/trunk@547 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 15 Jan 2010 18:21:49 +0000
parents c0504976e606
children d47b478e662b
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java	Fri Jan 15 10:13:18 2010 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java	Fri Jan 15 18:21:49 2010 +0000
@@ -6,6 +6,7 @@
 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;
@@ -23,11 +24,11 @@
 import de.intevation.artifacts.CallContext;
 import de.intevation.artifacts.CallMeta;
 import de.intevation.gnv.artifacts.GNVArtifactBase;
+import de.intevation.gnv.artifacts.GNVProductArtifactFactory;
 import de.intevation.gnv.artifacts.context.GNVArtifactContext;
 import de.intevation.gnv.artifacts.fis.product.DefaultProduct;
 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;
 import de.intevation.gnv.utils.ArtifactFactoryUtilities;
 
@@ -37,12 +38,6 @@
  */
 public class SelectProductArtifact extends DefaultArtifact {
 
-    public static final String XPATH_IDENTIFIER_REPLACE = "IDENTIFIER";
-
-    public static final String XPATH_ARTIFACT_CONFIGURATION =
-        "/artifact-database/artifacts/artifact[@name='"
-        + XPATH_IDENTIFIER_REPLACE + "']";
-
     public static final String XPATH_UUID = "art:action/art:uuid/@value";
 
     public static final String XPATH_HASH = "art:action/art:hash/@value";
@@ -50,24 +45,12 @@
     public static final String XPATH_INPUT_DATA_VALUE =
         "art:action/art:data/art:input[@name='product']/@value";
 
-    /**
-     * this xpath is related to the config.xml document which doesn't have any
-     * prefixes yet
-     */
-    public static final String XPATH_PRODUCTS = "products/product";
-
-    /**
-     * this xpath is related to the config.xml document which doesn't have any
-     * prefixes yet
-     */
-    public static final String XPATH_PRODUCT_PARAMETER = "parameters/parameter";
-
     public static final String XFORM_URL    = "http://www.w3.org/2002/xforms";
     public static final String XFORM_PREFIX = "xform";
 
     private static Logger log = Logger.getLogger(SelectProductArtifact.class);
 
-    private HashMap  products;
+    private Map      products;
     private Product  current;
     private Artifact artifact;
     private String   name;
@@ -86,53 +69,11 @@
         log.debug("setup()");
         super.setup(identifier, factory, context);
         this.name = factory.getName();
-
-        if (context instanceof GNVArtifactContext) {
-            GNVArtifactContext gnvContext   = (GNVArtifactContext) context;
-            Document           doc          = gnvContext.getConfig();
-            Node               artifactNode = getConfigurationFragment(doc);
-
-            NodeList products = (NodeList) XMLUtils.xpath(
-                artifactNode, XPATH_PRODUCTS, XPathConstants.NODESET);
-
-            if (products != null) {
-                this.products = new HashMap(products.getLength());
-
-                for (int i = 0; i < products.getLength(); i++) {
-                    Element  productNode    = (Element)products.item(i);
-                    String   productName    = productNode.getAttribute("name");
-                    NodeList parameterNodes = (NodeList) XMLUtils.xpath(
-                        productNode,
-                        XPATH_PRODUCT_PARAMETER,
-                        XPathConstants.NODESET
-                    );
+    }
 
-                    Collection<InputData> parameter = null;
-                    if (parameterNodes != null) {
-                        parameter = new ArrayList(parameterNodes.getLength());
 
-                        for (int j = 0; j < parameterNodes.getLength(); j++) {
-                            Element parameterNode = (Element)parameterNodes.item(j);
-                            String name  = parameterNode.getAttribute("name");
-                            String value = parameterNode.getAttribute("value");
-                            parameter.add(new DefaultInputData(name, value));
-                        }
-                    }
-                    Node artifactFactoryNode = (Node) XMLUtils.xpath(
-                        productNode, "artifact-factory", XPathConstants.NODE
-                    );
-
-                    ArtifactFactory artifactFactory =
-                        new ArtifactFactoryUtilities().createArtitfactFactor(
-                            doc, artifactFactoryNode
-                        );
-
-                    this.products.put(productName, new DefaultProduct(
-                        productName, parameter, artifactFactory)
-                    );
-                }
-            }
-        }
+    public void setProducts(Map products) {
+        this.products = products;
     }
 
 
@@ -224,9 +165,12 @@
             target, XPATH_HASH, ArtifactNamespaceContext.INSTANCE
         );
 
-        artifact = current.getArtifactFactory().createArtifact(
-            uuid, context
-        );
+        // fetch ArtifactFactory from context and create a new Artifact
+        ArtifactFactory factory = context.getDatabase()
+            .getInternalArtifactFactory(this.name);
+        factory                 = ((GNVProductArtifactFactory)factory)
+            .getArtifactFactoryByName(current.getName());
+        artifact                = factory.createArtifact(uuid, context);
 
         Document feedDocument = feedDocument(uuid, hash);
         artifact.feed(feedDocument(uuid, hash), context);
@@ -386,15 +330,6 @@
     }
 
 
-    protected Node getConfigurationFragment(Document document) {
-        String xpathQuery = XPATH_ARTIFACT_CONFIGURATION.replaceAll(
-            XPATH_IDENTIFIER_REPLACE, name
-        );
-
-        return (Node) XMLUtils.xpath(document, xpathQuery, XPathConstants.NODE);
-    }
-
-
     protected Document feedDocument(String uuid, String hash) {
         Document document = XMLUtils.newDocument();
 

http://dive4elements.wald.intevation.org