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 :

http://dive4elements.wald.intevation.org