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