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 :

http://dive4elements.wald.intevation.org