annotate gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVProductArtifactFactory.java @ 1028:41234fcf4c7e

Some Bugfixes which prevent Exceptions executing the Examples in the config-manual gnv-artifacts/trunk@1052 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 04 May 2010 12:40:21 +0000
parents 05bf8534a35a
children f953c9a559d8
rev   line source
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.gnv.artifacts;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
3 import java.util.ArrayList;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4 import java.util.Collection;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
5 import java.util.HashMap;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6 import java.util.Map;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 import javax.xml.xpath.XPathConstants;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9
479
d47b478e662b Cleaned up imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 478
diff changeset
10 import org.apache.log4j.Logger;
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import org.w3c.dom.Document;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12 import org.w3c.dom.Node;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import org.w3c.dom.NodeList;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14
1028
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
15 import de.intevation.artifactdatabase.DefaultArtifactFactory;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
16 import de.intevation.artifactdatabase.ProxyArtifact;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
17 import de.intevation.artifactdatabase.XMLUtils;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
18 import de.intevation.artifacts.Artifact;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
19 import de.intevation.artifacts.ArtifactFactory;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
20 import de.intevation.gnv.artifacts.fis.SelectProductArtifact;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
21 import de.intevation.gnv.artifacts.fis.product.DefaultProduct;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
22 import de.intevation.gnv.state.DefaultInputData;
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
23
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 /**
789
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
25 * This factory is called to create a {@link
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
26 * de.intevation.gnv.artifacts.fis.SelectProductArtifact} which lets the user
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
27 * select a product supported by the selected fis.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
28 *
780
c4156275c1e1 Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 779
diff changeset
29 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 */
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 public class GNVProductArtifactFactory extends DefaultArtifactFactory {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 public static final String XPATH_REPLACE_NAME = "IDENTIFIER";
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35 public static final String XPATH_PRODUCT_ARTIFACT =
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36 "artifact-database/artifacts/artifact[@name='"+XPATH_REPLACE_NAME+"']";
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38 public static final String XPATH_PRODUCT = "products/product";
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40 public static final String XPATH_PRODUCT_NAME = "@name";
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 public static final String XPATH_PRODUCT_FACTORY = "artifact-factory";
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 public static final String XPATH_PRODUCT_PARAMETER = "parameters/parameter";
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 private Logger logger = Logger.getLogger(GNVProductArtifactFactory.class);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48 private Map productFactories;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 private Map products;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
50
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51
789
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
52 /**
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
53 * Constructor.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
54 */
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 public GNVProductArtifactFactory() {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57
789
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
58 /**
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
59 * Method to create an artifact. If the created artifact is from type
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
60 * <code>ProxyArtifact</code>, a further ProductSelectArtifact is created
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
61 * which becomes embedded into the <code>ProxyArtifact</code>.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
62 * @param identifier UUID.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
63 * @param context CallContext.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
64 * @param data Some data.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
65 * @return The created artifact.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
66 */
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67 @Override
594
5b9b74c08bbb Changed Method signatures because of Interfacemodifications in the Artifact-Module
Tim Englich <tim.englich@intevation.de>
parents: 479
diff changeset
68 public Artifact createArtifact(String identifier, Object context, Document data) {
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
70 // create a SelectProductArtifact for initial product selection
594
5b9b74c08bbb Changed Method signatures because of Interfacemodifications in the Artifact-Module
Tim Englich <tim.englich@intevation.de>
parents: 479
diff changeset
71 Artifact artifact = super.createArtifact(identifier, context, data);
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
73 if (artifact instanceof ProxyArtifact) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
74
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75 SelectProductArtifact select = new SelectProductArtifact();
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76 select.setProducts(products);
594
5b9b74c08bbb Changed Method signatures because of Interfacemodifications in the Artifact-Module
Tim Englich <tim.englich@intevation.de>
parents: 479
diff changeset
77 select.setup(identifier, this, context, data);
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
78
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
79 ((ProxyArtifact) artifact).setProxied(select);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
82 return artifact;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
83 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
84
815
22c18083225e Removed compiler warnings while JavaDoc generation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 789
diff changeset
85
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
86 @Override
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
87 public void setup(Document document, Node factoryNode) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
88 super.setup(document, factoryNode);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
89
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
90 String xpath = XPATH_PRODUCT_ARTIFACT.replace(XPATH_REPLACE_NAME, name);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 Node artifact = (Node) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
92 document, xpath, XPathConstants.NODE);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
93
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
94 NodeList productNodes = (NodeList) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
95 artifact, XPATH_PRODUCT, XPathConstants.NODESET);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
96
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97 if (productNodes == null) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98 logger.warn("No products found for fis: " + name);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
99 return;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
100 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
101
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
102 int productLength = productNodes.getLength();
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
103
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
104 if (productLength != 0) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
105 productFactories = new HashMap(productLength);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
106 products = new HashMap(productLength);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
107
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
108 parseProductFactories(document, productNodes);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
109 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
110 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
112
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
113 public ArtifactFactory getArtifactFactoryByName(String name) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114 return (ArtifactFactory) productFactories.get(name);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118 protected void parseProductFactories(Document document, NodeList products) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119 int items = products.getLength();
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
120
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
121 for(int i = 0; i < items; i++) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
122
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
123 try {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
124 Node product = products.item(i);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
125
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
126 String name = (String) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
127 product, XPATH_PRODUCT_NAME, XPathConstants.STRING);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
128
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
129 Node factoryNode = (Node) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
130 product, XPATH_PRODUCT_FACTORY, XPathConstants.NODE);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131
1028
41234fcf4c7e Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents: 836
diff changeset
132 String factoryClass = factoryNode.getTextContent().trim();
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
133
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
134 if (factoryClass == null || factoryClass.equals("")) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
135 logger.warn("No artifact factory class found for " + name);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
136 continue;
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
137 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
138
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
139 Class cls = Class.forName(factoryClass);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
140 ArtifactFactory factory = (ArtifactFactory) cls.newInstance();
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141 factory.setup(document, factoryNode);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
142
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
143 productFactories.put(name, factory);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144 initializeProducts(product);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
146 catch (ClassNotFoundException cnfe) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
147 logger.warn(cnfe, cnfe);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
148 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
149 catch (InstantiationException ie) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150 logger.warn(ie, ie);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 catch (IllegalAccessException iae) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
153 logger.warn(iae, iae);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
156 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
157
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158
789
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
159 /**
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
160 * Initialize all products supported by the current fis.
0dc115cbef0d Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 780
diff changeset
161 */
478
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
162 protected void initializeProducts(Node productNode) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
163 String productName = (String) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
164 productNode, "@name", XPathConstants.STRING);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
165
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
166 NodeList parameterNodes = (NodeList) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167 productNode, XPATH_PRODUCT_PARAMETER, XPathConstants.NODESET
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168 );
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 if (parameterNodes != null) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
171 int items = parameterNodes.getLength();
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
172 Collection inputParameter = new ArrayList(items);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
173
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
174 for (int j = 0; j < items; j++) {
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
175 Node parameterNode = (Node) parameterNodes.item(j);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
176 String name = (String) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
177 parameterNode, "@name", XPathConstants.STRING);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
178 String value = (String) XMLUtils.xpath(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
179 parameterNode, "@value", XPathConstants.STRING);
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
180
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
181 inputParameter.add(new DefaultInputData(name, value));
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
182 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
183
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
184 products.put(
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
185 productName,
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
186 new DefaultProduct(productName, inputParameter, this.name)
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
187 );
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
188 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189 }
0e0c64c821dc Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
190 }
836
05bf8534a35a Using unix line endings only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 815
diff changeset
191 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org