Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/context/FLYSContextFactory.java Thu Feb 03 10:23:30 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/context/FLYSContextFactory.java Fri Feb 04 11:09:11 2011 +0000 @@ -17,9 +17,12 @@ import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifactdatabase.Config; +import de.intevation.artifactdatabase.state.State; +import de.intevation.artifactdatabase.state.StateEngine; +import de.intevation.artifactdatabase.transition.Transition; +import de.intevation.artifactdatabase.transition.TransitionEngine; -import de.intevation.flys.artifacts.transitions.Transition; -import de.intevation.flys.artifacts.transitions.TransitionEngine; +import de.intevation.flys.artifacts.states.StateFactory; import de.intevation.flys.artifacts.transitions.TransitionFactory; @@ -39,7 +42,7 @@ "/artifact-database/artifacts/artifact"; /** The XPath to the name of the artifact. */ - public static final String XPATH_ARTIFACT_NAME = "@name"; + public static final String XPATH_ARTIFACT_NAME = "/artifact/@name"; /** The XPath to the xlink ref in an artifact configuration. */ public static final String XPATH_XLINK = "xlink:href"; @@ -48,6 +51,10 @@ public static final String XPATH_TRANSITIONS = "/artifact/states/transition"; + /** The XPath to the states configured in the artifact config. */ + public static final String XPATH_STATES = + "/artifact/states/state"; + /** * Creates a new FLYSArtifactContext object and initialize all * components required by the application. @@ -59,6 +66,7 @@ FLYSContext context = new FLYSContext(config); configureTransitions(config, context); + configureStates(config, context); return context; } @@ -87,7 +95,7 @@ if (transitionList == null) { logger.warn("The artifact has no transitions configured."); - return; + continue; } int trans = transitionList.getLength(); @@ -136,5 +144,48 @@ return artifactDocs; } + + + /** + * This method initializes the transition configuration. + * + * @param config the config document. + * @param context the FLYSContext. + */ + protected void configureStates(Document config, FLYSContext context) { + StateEngine engine = new StateEngine(); + + Document[] artifacts = getArtifactConfigurations(config); + logger.info("Found " + artifacts.length + " artifacts in the config."); + + for (Document doc: artifacts) { + List<State> states = new ArrayList<State>(); + + String artName = (String) XMLUtils.xpath( + doc, XPATH_ARTIFACT_NAME, XPathConstants.STRING); + + NodeList stateList = (NodeList) XMLUtils.xpath( + doc, XPATH_STATES, XPathConstants.NODESET); + + if (stateList == null) { + logger.warn("The artifact has no states configured."); + continue; + } + + int count = stateList.getLength(); + + logger.info( + "Artifact '" + artName + "' has " + count + " states."); + + for (int i = 0; i < count; i++) { + states.add(StateFactory.createState( + stateList.item(i))); + } + + engine.addStates(artName, states); + } + + context.put(FLYSContext.STATE_ENGINE_KEY, engine); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :