Mercurial > dive4elements > framework
diff artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java @ 108:9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
artifacts/trunk@1297 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 07 Feb 2011 11:20:31 +0000 |
parents | 26bfff409dd3 |
children | 973f244ed568 |
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java Fri Feb 04 16:52:39 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java Mon Feb 07 11:20:31 2011 +0000 @@ -1,11 +1,16 @@ package de.intevation.artifactdatabase.transition; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; +import de.intevation.artifactdatabase.state.State; +import de.intevation.artifactdatabase.state.StateEngine; + + /** * The TransitionEngine stores all transitions for each Artifact and should be * used to determine, if an Artifact is able to advance from one to another @@ -41,20 +46,52 @@ * * @return true, if the transitions were added, otherwise false. */ - public boolean addTransition(String stateId, List transitions) { - List tmp = this.transitions.get(stateId); + public boolean addTransition(String stateId, Transition transition) { + List tmp = transitions.get(stateId); - if (tmp != null) { - logger.info( - "Transitions for the state '" - + stateId - + "' already stored."); - - return false; + if (tmp == null) { + tmp = new ArrayList<Transition>(); } + tmp.add(transition); + logger.debug("Add new transitions for state '" + stateId + "'"); - return this.transitions.put(stateId, transitions) != null; + + return transitions.put(stateId, tmp) != null; + } + + + /** + * This method returns all existing transitions of a state. + * + * @param state The state + * + * @return the existing transition of <i>state</i>. + */ + public List<Transition> getTransitions(State state) { + return transitions.get(state.getID()); + } + + + /** + * This method returns the reachable states of <i>state</i>. + * + * @param state The current state. + * @param engine The state engine. + * + * @return a list of reachable states. + */ + public List<State> getReachableStates(State state, StateEngine engine) { + List<Transition> transitions = getTransitions(state); + List<State> reachable = new ArrayList<State>(); + + for (Transition t: transitions) { + if (t.isValid(state)) { + reachable.add(engine.getState(t.getTo())); + } + } + + return reachable; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :