Mercurial > dive4elements > gnv-client
changeset 475:c0504976e606
Renamed FISSelectArtifact to SelectProductArtifact which fits better, because the intent of this artifact is to choose a product - not a fis.
gnv-artifacts/trunk@542 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 14 Jan 2010 11:07:27 +0000 |
parents | ab29e4ff2fda |
children | ffb38c6c928e |
files | gnv-artifacts/ChangeLog gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactFactory.java gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/FISSelectArtifact.java gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java |
diffstat | 5 files changed, 455 insertions(+), 444 deletions(-) [+] |
line wrap: on
line diff
--- a/gnv-artifacts/ChangeLog Thu Jan 14 10:34:05 2010 +0000 +++ b/gnv-artifacts/ChangeLog Thu Jan 14 11:07:27 2010 +0000 @@ -1,3 +1,14 @@ +2010-01-13 Ingo Weinzierl <ingo_weinzierl@web.de> + + * src/main/java/de/intevation/gnv/artifacts/fis/FISSelectArtifact.java, + src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java: + Renamed FISSelectArtifact to SelectProductArtifact which fits better, + because the intent of this artifact is to choose a product - not a FIS. + + * src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java, + src/main/java/de/intevation/gnv/artifacts/GNVArtifactFactory.java: + Replaced FISSelectArtifact with SelectProductArtifact. + 2010-01-13 Sascha L. Teichmann <sascha.teichmann@intevation.de> * src/test/java/de/intevation/gnv/artifacts/util/ShapeFileWriterTestCase.java,
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java Thu Jan 14 10:34:05 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java Thu Jan 14 11:07:27 2010 +0000 @@ -32,7 +32,7 @@ import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.cache.CacheFactory; import de.intevation.gnv.artifacts.context.GNVArtifactContext; -import de.intevation.gnv.artifacts.fis.FISSelectArtifact; +import de.intevation.gnv.artifacts.fis.SelectProductArtifact; import de.intevation.gnv.artifacts.fis.product.Product; import de.intevation.gnv.artifacts.ressource.RessourceFactory; import de.intevation.gnv.state.DefaultInputData; @@ -187,7 +187,7 @@ // goto initial step else if(targetState.equals(INITIAL_STATE)) { - FISSelectArtifact select = new FISSelectArtifact(); + SelectProductArtifact select = new SelectProductArtifact(); select.setup(identifier, new GNVArtifactFactory(), context); context.putContextValue(ProxyArtifact.REPLACE_PROXY, select);
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactFactory.java Thu Jan 14 10:34:05 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactFactory.java Thu Jan 14 11:07:27 2010 +0000 @@ -3,7 +3,7 @@ import de.intevation.artifactdatabase.DefaultArtifactFactory; import de.intevation.artifactdatabase.ProxyArtifact; import de.intevation.artifacts.Artifact; -import de.intevation.gnv.artifacts.fis.FISSelectArtifact; +import de.intevation.gnv.artifacts.fis.SelectProductArtifact; import org.apache.log4j.Logger; @@ -22,7 +22,7 @@ Artifact artifact = super.createArtifact(identifier, context); if (artifact instanceof ProxyArtifact) { - FISSelectArtifact select = new FISSelectArtifact(); + SelectProductArtifact select = new SelectProductArtifact(); select.setup(identifier, this, context); ((ProxyArtifact) artifact).setProxied(select);
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/FISSelectArtifact.java Thu Jan 14 10:34:05 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,440 +0,0 @@ -package de.intevation.gnv.artifacts.fis; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -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.DefaultArtifact; -import de.intevation.artifactdatabase.ProxyArtifact; -import de.intevation.artifactdatabase.XMLUtils; -import de.intevation.artifacts.Artifact; -import de.intevation.artifacts.ArtifactFactory; -import de.intevation.artifacts.ArtifactNamespaceContext; -import de.intevation.artifacts.CallContext; -import de.intevation.artifacts.CallMeta; -import de.intevation.gnv.artifacts.GNVArtifactBase; -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; - - -/** - * @author Ingo Weinzierl <ingo.weinzierl@intevation.de> - */ -public class FISSelectArtifact 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"; - - 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(FISSelectArtifact.class); - - private HashMap products; - private Product current; - private Artifact artifact; - private String name; - - public FISSelectArtifact() { - super(); - } - - - @Override - public void setup( - String identifier, - ArtifactFactory factory, - Object context - ) { - 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) - ); - } - } - } - } - - - @Override - public Document feed(Document target, CallContext context) { - log.debug("FISSelectArtifact.feed()"); - - if (artifact == null) { - Document document = XMLUtils.newDocument(); - String productName = XMLUtils.xpathString( - target, - XPATH_INPUT_DATA_VALUE, - ArtifactNamespaceContext.INSTANCE - ); - - current = (Product) products.get(productName); - - String reportNode = null; - String resultNode = null; - String msg = null; - - if (current != null) { - reportNode = "result"; - resultNode = "success"; - msg = "Feed was successfully. New Artifact created."; - } - else { - reportNode = "exceptionreport"; - resultNode = "exception"; - msg = "Product does not exist."; - } - - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX - ); - - Element report = creator.create(reportNode); - Element success = creator.create(resultNode); - success.setTextContent(msg); - report.appendChild(success); - document.appendChild(report); - - return document; - } - else { - return artifact.feed(target, context); - } - } - - - @Override - public Document advance(Document target, CallContext context) { - log.debug("FISSelectArtifact.advance()"); - - if (artifact != null) { - Document result = artifact.advance(target, context); - context.putContextValue(ProxyArtifact.REPLACE_PROXY, artifact); - return result; - } - - Document result = XMLUtils.newDocument(); - if (current == null) { - // artifact needs to be feeded first - String msg = "Artifact is not configured properly. Call 'feed' fist."; - log.error(msg); - - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - result, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX - ); - - Element report = creator.create("exceptionreport"); - Element exception = creator.create("exception"); - exception.setTextContent(msg); - report.appendChild(exception); - result.appendChild(report); - - return result; - } - - String uuid = XMLUtils.xpathString( - target, XPATH_UUID, ArtifactNamespaceContext.INSTANCE - ); - - String hash = XMLUtils.xpathString( - target, XPATH_HASH, ArtifactNamespaceContext.INSTANCE - ); - - artifact = current.getArtifactFactory().createArtifact( - uuid, context - ); - - Document feedDocument = feedDocument(uuid, hash); - artifact.feed(feedDocument(uuid, hash), context); - - result = ((GNVArtifactBase) artifact).initialize(context); - if (artifact instanceof GNVArtifactBase) { - ((GNVArtifactBase) artifact).setProduct(current); - } - context.putContextValue(ProxyArtifact.REPLACE_PROXY, artifact); - return result; - } - - - @Override - public Document describe(Document data, CallContext context) { - log.debug("FISSelectArtifact.describe()"); - - // create root node - Document document = XMLUtils.newDocument(); - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX - ); - - Element rootNode = creator.create("result"); - Element typeNode = creator.create("type"); - creator.addAttr(typeNode, "name", "describe"); - rootNode.appendChild(typeNode); - - Element uuidNode = creator.create("uuid"); - creator.addAttr(uuidNode, "value", super.identifier); - rootNode.appendChild(uuidNode); - - Element hashNode = creator.create("hash"); - creator.addAttr(hashNode, "value", hash()); - rootNode.appendChild(hashNode); - - // create output node - Element out = creator.create("outputs"); - rootNode.appendChild(out); - - // create current state - Element state = creator.create("state"); - creator.addAttr(state, "name", "choose-product"); - creator.addAttr(state, "description", "Auswahl des Produktes."); - rootNode.appendChild(state); - - // create reachable states - Element rStates = creator.create("reachable-states"); - appendProducts(document, rStates, context); - rootNode.appendChild(rStates); - - // create model - Element model = creator.create("model"); - Element input = creator.create("input"); - creator.addAttr(input, "name", "product"); - creator.addAttr(input, "type", "String"); - model.appendChild(input); - rootNode.appendChild(model); - - // create ui - Element ui = creator.create("ui"); - Element dynamic = creator.create("dynamic"); - appendSelectProducts(document, dynamic, context.getMeta()); - ui.appendChild(dynamic); - rootNode.appendChild(ui); - - document.appendChild(rootNode); - return document; - } - - - @Override - public void out(Document document, OutputStream out, CallContext context) - throws IOException - { - log.debug("FISSelectArtifact.out()"); - if (artifact != null) { - artifact.out(document, out, context); - } - } - - - protected void appendProducts( - Document document, - Node parent, - Object context - ) { - Iterator iter = products.values().iterator(); - - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX - ); - - while(iter.hasNext()) { - Product prod = (Product) iter.next(); - String name = prod.getName(); - - Element current = creator.create("state"); - creator.addAttr(current, "name", name); - creator.addAttr(current, "description", name); - parent.appendChild(current); - } - } - - - protected void appendSelectProducts( - Document document, - Node node, - CallMeta callMeta - ) { - RessourceFactory ressource = RessourceFactory.getInstance(); - - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - XFORM_URL, - XFORM_PREFIX - ); - - String selectboxName = "product"; - Element selectNode = creator.create("select1"); - creator.addAttr(selectNode, "ref", selectboxName); - - Element lableNode = creator.create("label"); - lableNode.setTextContent(ressource.getRessource(callMeta.getLanguages(), - selectboxName, - selectboxName - ) - ); - - Element choiceNode = creator.create("choices"); - selectNode.appendChild(lableNode); - selectNode.appendChild(choiceNode); - - Iterator it = products.values().iterator(); - while (it.hasNext()) { - Product p = (Product) it.next(); - Element itemNode = creator.create("item"); - Element choiceLableNode = creator.create("label"); - choiceLableNode.setTextContent(ressource.getRessource( - callMeta.getLanguages(), - p.getName(), - p.getName() - )); - itemNode.appendChild(choiceLableNode); - - Element choiceValueNode = creator.create("value"); - choiceValueNode.setTextContent(p.getName()); - itemNode.appendChild(choiceValueNode); - choiceNode.appendChild(itemNode); - } - - node.appendChild(selectNode); - } - - - 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(); - - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX - ); - Element rootNode = creator.create("action"); - - Element typeNode = creator.create("type"); - creator.addAttr(typeNode, "name", "feed"); - rootNode.appendChild(typeNode); - - Element uuidNode = creator.create("uuid"); - creator.addAttr(uuidNode, "value", uuid); - rootNode.appendChild(uuidNode); - - Element hashNode = creator.create("hash"); - creator.addAttr(hashNode, "value", hash); - rootNode.appendChild(hashNode); - - Element dataNode = creator.create("data"); - rootNode.appendChild(dataNode); - - Collection<InputData> parameter = this.current.getParameter(); - if (parameter != null) { - Iterator<InputData> parameterIt = parameter.iterator(); - - while (parameterIt.hasNext()) { - InputData inputData = parameterIt.next(); - - Element inputNode = creator.create("input"); - creator.addAttr(inputNode, "name", inputData.getName()); - creator.addAttr(inputNode, "value", inputData.getValue()); - dataNode.appendChild(inputNode); - } - } - document.appendChild(rootNode); - return document; - } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java Thu Jan 14 11:07:27 2010 +0000 @@ -0,0 +1,440 @@ +package de.intevation.gnv.artifacts.fis; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +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.DefaultArtifact; +import de.intevation.artifactdatabase.ProxyArtifact; +import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.CallContext; +import de.intevation.artifacts.CallMeta; +import de.intevation.gnv.artifacts.GNVArtifactBase; +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; + + +/** + * @author Ingo Weinzierl <ingo.weinzierl@intevation.de> + */ +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"; + + 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 Product current; + private Artifact artifact; + private String name; + + public SelectProductArtifact() { + super(); + } + + + @Override + public void setup( + String identifier, + ArtifactFactory factory, + Object context + ) { + 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) + ); + } + } + } + } + + + @Override + public Document feed(Document target, CallContext context) { + log.debug("SelectProductArtifact.feed()"); + + if (artifact == null) { + Document document = XMLUtils.newDocument(); + String productName = XMLUtils.xpathString( + target, + XPATH_INPUT_DATA_VALUE, + ArtifactNamespaceContext.INSTANCE + ); + + current = (Product) products.get(productName); + + String reportNode = null; + String resultNode = null; + String msg = null; + + if (current != null) { + reportNode = "result"; + resultNode = "success"; + msg = "Feed was successfully. New Artifact created."; + } + else { + reportNode = "exceptionreport"; + resultNode = "exception"; + msg = "Product does not exist."; + } + + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX + ); + + Element report = creator.create(reportNode); + Element success = creator.create(resultNode); + success.setTextContent(msg); + report.appendChild(success); + document.appendChild(report); + + return document; + } + else { + return artifact.feed(target, context); + } + } + + + @Override + public Document advance(Document target, CallContext context) { + log.debug("SelectProductArtifact.advance()"); + + if (artifact != null) { + Document result = artifact.advance(target, context); + context.putContextValue(ProxyArtifact.REPLACE_PROXY, artifact); + return result; + } + + Document result = XMLUtils.newDocument(); + if (current == null) { + // artifact needs to be feeded first + String msg = "Artifact is not configured properly. Call 'feed' fist."; + log.error(msg); + + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + result, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX + ); + + Element report = creator.create("exceptionreport"); + Element exception = creator.create("exception"); + exception.setTextContent(msg); + report.appendChild(exception); + result.appendChild(report); + + return result; + } + + String uuid = XMLUtils.xpathString( + target, XPATH_UUID, ArtifactNamespaceContext.INSTANCE + ); + + String hash = XMLUtils.xpathString( + target, XPATH_HASH, ArtifactNamespaceContext.INSTANCE + ); + + artifact = current.getArtifactFactory().createArtifact( + uuid, context + ); + + Document feedDocument = feedDocument(uuid, hash); + artifact.feed(feedDocument(uuid, hash), context); + + result = ((GNVArtifactBase) artifact).initialize(context); + if (artifact instanceof GNVArtifactBase) { + ((GNVArtifactBase) artifact).setProduct(current); + } + context.putContextValue(ProxyArtifact.REPLACE_PROXY, artifact); + return result; + } + + + @Override + public Document describe(Document data, CallContext context) { + log.debug("SelectProductArtifact.describe()"); + + // create root node + Document document = XMLUtils.newDocument(); + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX + ); + + Element rootNode = creator.create("result"); + Element typeNode = creator.create("type"); + creator.addAttr(typeNode, "name", "describe"); + rootNode.appendChild(typeNode); + + Element uuidNode = creator.create("uuid"); + creator.addAttr(uuidNode, "value", super.identifier); + rootNode.appendChild(uuidNode); + + Element hashNode = creator.create("hash"); + creator.addAttr(hashNode, "value", hash()); + rootNode.appendChild(hashNode); + + // create output node + Element out = creator.create("outputs"); + rootNode.appendChild(out); + + // create current state + Element state = creator.create("state"); + creator.addAttr(state, "name", "choose-product"); + creator.addAttr(state, "description", "Auswahl des Produktes."); + rootNode.appendChild(state); + + // create reachable states + Element rStates = creator.create("reachable-states"); + appendProducts(document, rStates, context); + rootNode.appendChild(rStates); + + // create model + Element model = creator.create("model"); + Element input = creator.create("input"); + creator.addAttr(input, "name", "product"); + creator.addAttr(input, "type", "String"); + model.appendChild(input); + rootNode.appendChild(model); + + // create ui + Element ui = creator.create("ui"); + Element dynamic = creator.create("dynamic"); + appendSelectProducts(document, dynamic, context.getMeta()); + ui.appendChild(dynamic); + rootNode.appendChild(ui); + + document.appendChild(rootNode); + return document; + } + + + @Override + public void out(Document document, OutputStream out, CallContext context) + throws IOException + { + log.debug("SelectProductArtifact.out()"); + if (artifact != null) { + artifact.out(document, out, context); + } + } + + + protected void appendProducts( + Document document, + Node parent, + Object context + ) { + Iterator iter = products.values().iterator(); + + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX + ); + + while(iter.hasNext()) { + Product prod = (Product) iter.next(); + String name = prod.getName(); + + Element current = creator.create("state"); + creator.addAttr(current, "name", name); + creator.addAttr(current, "description", name); + parent.appendChild(current); + } + } + + + protected void appendSelectProducts( + Document document, + Node node, + CallMeta callMeta + ) { + RessourceFactory ressource = RessourceFactory.getInstance(); + + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + XFORM_URL, + XFORM_PREFIX + ); + + String selectboxName = "product"; + Element selectNode = creator.create("select1"); + creator.addAttr(selectNode, "ref", selectboxName); + + Element lableNode = creator.create("label"); + lableNode.setTextContent(ressource.getRessource(callMeta.getLanguages(), + selectboxName, + selectboxName + ) + ); + + Element choiceNode = creator.create("choices"); + selectNode.appendChild(lableNode); + selectNode.appendChild(choiceNode); + + Iterator it = products.values().iterator(); + while (it.hasNext()) { + Product p = (Product) it.next(); + Element itemNode = creator.create("item"); + Element choiceLableNode = creator.create("label"); + choiceLableNode.setTextContent(ressource.getRessource( + callMeta.getLanguages(), + p.getName(), + p.getName() + )); + itemNode.appendChild(choiceLableNode); + + Element choiceValueNode = creator.create("value"); + choiceValueNode.setTextContent(p.getName()); + itemNode.appendChild(choiceValueNode); + choiceNode.appendChild(itemNode); + } + + node.appendChild(selectNode); + } + + + 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(); + + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX + ); + Element rootNode = creator.create("action"); + + Element typeNode = creator.create("type"); + creator.addAttr(typeNode, "name", "feed"); + rootNode.appendChild(typeNode); + + Element uuidNode = creator.create("uuid"); + creator.addAttr(uuidNode, "value", uuid); + rootNode.appendChild(uuidNode); + + Element hashNode = creator.create("hash"); + creator.addAttr(hashNode, "value", hash); + rootNode.appendChild(hashNode); + + Element dataNode = creator.create("data"); + rootNode.appendChild(dataNode); + + Collection<InputData> parameter = this.current.getParameter(); + if (parameter != null) { + Iterator<InputData> parameterIt = parameter.iterator(); + + while (parameterIt.hasNext()) { + InputData inputData = parameterIt.next(); + + Element inputNode = creator.create("input"); + creator.addAttr(inputNode, "name", inputData.getName()); + creator.addAttr(inputNode, "value", inputData.getValue()); + dataNode.appendChild(inputNode); + } + } + document.appendChild(rootNode); + return document; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: