Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/context/FLYSContextFactory.java @ 107:a228b39494a9
Improved the bootstrap process - the states are initialized.
flys-artifacts/trunk@1292 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 04 Feb 2011 11:09:11 +0000 |
parents | 5864c41219db |
children | 7222d8fb53ea |
comparison
equal
deleted
inserted
replaced
106:5864c41219db | 107:a228b39494a9 |
---|---|
15 import de.intevation.artifacts.ArtifactContextFactory; | 15 import de.intevation.artifacts.ArtifactContextFactory; |
16 | 16 |
17 import de.intevation.artifacts.common.utils.XMLUtils; | 17 import de.intevation.artifacts.common.utils.XMLUtils; |
18 | 18 |
19 import de.intevation.artifactdatabase.Config; | 19 import de.intevation.artifactdatabase.Config; |
20 import de.intevation.artifactdatabase.state.State; | |
21 import de.intevation.artifactdatabase.state.StateEngine; | |
22 import de.intevation.artifactdatabase.transition.Transition; | |
23 import de.intevation.artifactdatabase.transition.TransitionEngine; | |
20 | 24 |
21 import de.intevation.flys.artifacts.transitions.Transition; | 25 import de.intevation.flys.artifacts.states.StateFactory; |
22 import de.intevation.flys.artifacts.transitions.TransitionEngine; | |
23 import de.intevation.flys.artifacts.transitions.TransitionFactory; | 26 import de.intevation.flys.artifacts.transitions.TransitionFactory; |
24 | 27 |
25 | 28 |
26 /** | 29 /** |
27 * The ArtifactContextFactory is used to initialize basic components and put | 30 * The ArtifactContextFactory is used to initialize basic components and put |
37 /** The XPath to the artifacts configured in the configuration. */ | 40 /** The XPath to the artifacts configured in the configuration. */ |
38 public static final String XPATH_ARTIFACTS = | 41 public static final String XPATH_ARTIFACTS = |
39 "/artifact-database/artifacts/artifact"; | 42 "/artifact-database/artifacts/artifact"; |
40 | 43 |
41 /** The XPath to the name of the artifact. */ | 44 /** The XPath to the name of the artifact. */ |
42 public static final String XPATH_ARTIFACT_NAME = "@name"; | 45 public static final String XPATH_ARTIFACT_NAME = "/artifact/@name"; |
43 | 46 |
44 /** The XPath to the xlink ref in an artifact configuration. */ | 47 /** The XPath to the xlink ref in an artifact configuration. */ |
45 public static final String XPATH_XLINK = "xlink:href"; | 48 public static final String XPATH_XLINK = "xlink:href"; |
46 | 49 |
47 /** The XPath to the transitions configured in the artifact config. */ | 50 /** The XPath to the transitions configured in the artifact config. */ |
48 public static final String XPATH_TRANSITIONS = | 51 public static final String XPATH_TRANSITIONS = |
49 "/artifact/states/transition"; | 52 "/artifact/states/transition"; |
53 | |
54 /** The XPath to the states configured in the artifact config. */ | |
55 public static final String XPATH_STATES = | |
56 "/artifact/states/state"; | |
50 | 57 |
51 /** | 58 /** |
52 * Creates a new FLYSArtifactContext object and initialize all | 59 * Creates a new FLYSArtifactContext object and initialize all |
53 * components required by the application. | 60 * components required by the application. |
54 * | 61 * |
57 */ | 64 */ |
58 public Object createArtifactContext(Document config) { | 65 public Object createArtifactContext(Document config) { |
59 FLYSContext context = new FLYSContext(config); | 66 FLYSContext context = new FLYSContext(config); |
60 | 67 |
61 configureTransitions(config, context); | 68 configureTransitions(config, context); |
69 configureStates(config, context); | |
62 | 70 |
63 return context; | 71 return context; |
64 } | 72 } |
65 | 73 |
66 | 74 |
85 NodeList transitionList = (NodeList) XMLUtils.xpath( | 93 NodeList transitionList = (NodeList) XMLUtils.xpath( |
86 doc, XPATH_TRANSITIONS, XPathConstants.NODESET); | 94 doc, XPATH_TRANSITIONS, XPathConstants.NODESET); |
87 | 95 |
88 if (transitionList == null) { | 96 if (transitionList == null) { |
89 logger.warn("The artifact has no transitions configured."); | 97 logger.warn("The artifact has no transitions configured."); |
90 return; | 98 continue; |
91 } | 99 } |
92 | 100 |
93 int trans = transitionList.getLength(); | 101 int trans = transitionList.getLength(); |
94 | 102 |
95 logger.info( | 103 logger.info( |
134 artifactDocs[i] = XMLUtils.parseDocument(artifactFile); | 142 artifactDocs[i] = XMLUtils.parseDocument(artifactFile); |
135 } | 143 } |
136 | 144 |
137 return artifactDocs; | 145 return artifactDocs; |
138 } | 146 } |
147 | |
148 | |
149 /** | |
150 * This method initializes the transition configuration. | |
151 * | |
152 * @param config the config document. | |
153 * @param context the FLYSContext. | |
154 */ | |
155 protected void configureStates(Document config, FLYSContext context) { | |
156 StateEngine engine = new StateEngine(); | |
157 | |
158 Document[] artifacts = getArtifactConfigurations(config); | |
159 logger.info("Found " + artifacts.length + " artifacts in the config."); | |
160 | |
161 for (Document doc: artifacts) { | |
162 List<State> states = new ArrayList<State>(); | |
163 | |
164 String artName = (String) XMLUtils.xpath( | |
165 doc, XPATH_ARTIFACT_NAME, XPathConstants.STRING); | |
166 | |
167 NodeList stateList = (NodeList) XMLUtils.xpath( | |
168 doc, XPATH_STATES, XPathConstants.NODESET); | |
169 | |
170 if (stateList == null) { | |
171 logger.warn("The artifact has no states configured."); | |
172 continue; | |
173 } | |
174 | |
175 int count = stateList.getLength(); | |
176 | |
177 logger.info( | |
178 "Artifact '" + artName + "' has " + count + " states."); | |
179 | |
180 for (int i = 0; i < count; i++) { | |
181 states.add(StateFactory.createState( | |
182 stateList.item(i))); | |
183 } | |
184 | |
185 engine.addStates(artName, states); | |
186 } | |
187 | |
188 context.put(FLYSContext.STATE_ENGINE_KEY, engine); | |
189 } | |
139 } | 190 } |
140 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 191 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |