Mercurial > dive4elements > gnv-client
annotate gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVProductArtifactFactory.java @ 1145:dfe1ac687c7f tip
added tags
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:16:15 +0200 |
parents | c01c220312d0 |
children |
rev | line source |
---|---|
1115
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
1 /* |
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
2 * Copyright (c) 2010 by Intevation GmbH |
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
3 * |
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
4 * This program is free software under the LGPL (>=v2.1) |
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
5 * Read the file LGPL.txt coming with the software for details |
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
6 * or visit http://www.gnu.org/licenses/ if it does not exist. |
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
7 */ |
f953c9a559d8
Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1028
diff
changeset
|
8 |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
9 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
|
10 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
11 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
|
12 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
|
13 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
|
14 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
|
15 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
16 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
|
17 |
479
d47b478e662b
Cleaned up imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
478
diff
changeset
|
18 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
|
19 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
|
20 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
|
21 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
|
22 |
1028
41234fcf4c7e
Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents:
836
diff
changeset
|
23 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
|
24 import de.intevation.artifactdatabase.ProxyArtifact; |
1117
dec4257ad570
Changed imports to fit new positions of XMLUtils and Config
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1115
diff
changeset
|
25 import de.intevation.artifacts.common.utils.XMLUtils; |
1028
41234fcf4c7e
Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents:
836
diff
changeset
|
26 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
|
27 import de.intevation.artifacts.ArtifactFactory; |
1118
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
28 import de.intevation.artifacts.CallMeta; |
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
29 import de.intevation.artifacts.GlobalContext; |
1028
41234fcf4c7e
Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents:
836
diff
changeset
|
30 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
|
31 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
|
32 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
|
33 |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
34 /** |
789
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
35 * This factory is called to create a {@link |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
36 * 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
|
37 * select a product supported by the selected fis. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
38 * |
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
|
39 * @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
|
40 */ |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
41 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
|
42 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
43 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
|
44 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
45 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
|
46 "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
|
47 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
48 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
|
49 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
50 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
|
51 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
52 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
|
53 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
54 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
|
55 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
56 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
|
57 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
58 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
|
59 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
|
60 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
61 |
789
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
62 /** |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
63 * Constructor. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
64 */ |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
65 public GNVProductArtifactFactory() { |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
66 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
67 |
789
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
68 /** |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
69 * 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
|
70 * <code>ProxyArtifact</code>, a further ProductSelectArtifact is created |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
71 * which becomes embedded into the <code>ProxyArtifact</code>. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
72 * @param identifier UUID. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
73 * @param context CallContext. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
74 * @param data Some data. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
75 * @return The created artifact. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
76 */ |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
77 @Override |
1118
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
78 public Artifact createArtifact( |
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
79 String identifier, |
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
80 GlobalContext context, |
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
81 CallMeta meta, |
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
82 Document data |
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
83 ) { |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
84 // create a SelectProductArtifact for initial product selection |
1118
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
85 Artifact artifact = super.createArtifact(identifier, context, meta, data); |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
86 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
87 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
|
88 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
89 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
|
90 select.setProducts(products); |
1118
c01c220312d0
Made it compile again with an updated ArtifactDatabase.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1117
diff
changeset
|
91 select.setup(identifier, this, context, meta, data); |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
92 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
93 ((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
|
94 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
95 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
96 return artifact; |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
97 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
98 |
815
22c18083225e
Removed compiler warnings while JavaDoc generation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
789
diff
changeset
|
99 |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
100 @Override |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
101 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
|
102 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
|
103 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
104 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
|
105 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
|
106 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
|
107 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
108 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
|
109 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
|
110 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
111 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
|
112 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
|
113 return; |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
114 } |
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 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
|
117 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
118 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
|
119 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
|
120 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
|
121 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
122 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
|
123 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
124 } |
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 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
127 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
|
128 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
|
129 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
130 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
131 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
132 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
|
133 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
|
134 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
135 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
|
136 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
137 try { |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
138 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
|
139 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
140 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
|
141 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
|
142 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
143 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
|
144 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
|
145 |
1028
41234fcf4c7e
Some Bugfixes which prevent Exceptions executing the Examples in the config-manual
Tim Englich <tim.englich@intevation.de>
parents:
836
diff
changeset
|
146 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
|
147 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
148 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
|
149 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
|
150 continue; |
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 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
153 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
|
154 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
|
155 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
|
156 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
157 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
|
158 initializeProducts(product); |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
159 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
160 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
|
161 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
|
162 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
163 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
|
164 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
|
165 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
166 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
|
167 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
|
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 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
171 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
172 |
789
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
173 /** |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
174 * Initialize all products supported by the current fis. |
0dc115cbef0d
Added javadoc for artifact package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
780
diff
changeset
|
175 */ |
478
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
176 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
|
177 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
|
178 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
|
179 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
180 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
|
181 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
|
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 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
|
185 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
|
186 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
|
187 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
188 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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
195 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
|
196 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
197 |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
198 products.put( |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
199 productName, |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
200 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
|
201 ); |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
202 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
203 } |
0e0c64c821dc
Added support to step back to the point for choosing a product.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
204 } |
836
05bf8534a35a
Using unix line endings only.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
815
diff
changeset
|
205 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |