Mercurial > dive4elements > framework
changeset 257:8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
artifacts/trunk@1758 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 28 Apr 2011 10:30:30 +0000 (2011-04-28) |
parents | 55d08706ccf2 |
children | c41b300b02c3 |
files | ChangeLog artifact-database/src/main/java/de/intevation/artifactdatabase/transition/Transition.java artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java |
diffstat | 3 files changed, 44 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Thu Apr 28 10:27:27 2011 +0000 +++ b/ChangeLog Thu Apr 28 10:30:30 2011 +0000 @@ -1,3 +1,14 @@ +2011-04-28 Ingo Weinzierl <ingo@intevation.de> + + * artifact-database/src/main/java/de/intevation/artifactdatabase/transition/Transition.java: + Modified the isValid() method. The transition needs to know about the + current artifact where its data is stored, the current state and maybe + the target state to determine if it is allowed to step from the current + state to a target state! + NOTE: This breaks the current API! + +artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java + 2011-04-28 Ingo Weinzierl <ingo@intevation.de> * artifact-database/src/main/java/de/intevation/artifactdatabase/state/State.java,
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/Transition.java Thu Apr 28 10:27:27 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/Transition.java Thu Apr 28 10:30:30 2011 +0000 @@ -1,5 +1,9 @@ package de.intevation.artifactdatabase.transition; +import org.w3c.dom.Node; + +import de.intevation.artifacts.Artifact; + import de.intevation.artifactdatabase.state.State; @@ -9,6 +13,13 @@ public interface Transition { /** + * Initializes the transition. + * + * @param config The configuration node for the transition. + */ + public void init(Node config); + + /** * Return the ID of the start State. */ public String getFrom(); @@ -33,8 +44,15 @@ public void setTo(String to); /** - * Determines if the transition from <code>state</code> is valid. + * Determines if its valid to step from state <i>a</i> of an artifact + * <i>artifact</i> to state <i>b</i>. + * + * @param artifact The owner artifact of state a and b. + * @param a The current state. + * @param b The target state. + * + * @return true, if it is valid to step from a to b, otherwise false. */ - public boolean isValid(State state); + public boolean isValid(Artifact artifact, State a, State b); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java Thu Apr 28 10:27:27 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java Thu Apr 28 10:30:30 2011 +0000 @@ -7,6 +7,8 @@ import org.apache.log4j.Logger; +import de.intevation.artifacts.Artifact; + import de.intevation.artifactdatabase.state.State; import de.intevation.artifactdatabase.state.StateEngine; @@ -81,7 +83,10 @@ * * @return a list of reachable states. */ - public List<State> getReachableStates(State state, StateEngine engine) { + public List<State> getReachableStates( + Artifact artifact, + State state, + StateEngine engine) { List<Transition> transitions = getTransitions(state); List<State> reachable = new ArrayList<State>(); @@ -90,8 +95,10 @@ } for (Transition t: transitions) { - if (t.isValid(state)) { - reachable.add(engine.getState(t.getTo())); + State target = engine.getState(t.getTo()); + + if (t.isValid(artifact, state, target)) { + reachable.add(target); } } @@ -103,6 +110,7 @@ * Determines if a state with a given identifier is reachable from a current * state. * + * @param artifact The owner artifact of state <i>state</i>. * @param targetId The identifier of the target state. * @param state The start state. * @param stateEngine The StateEngine. @@ -110,11 +118,12 @@ * @return true, if the target state is reachable, otherwise false. */ public boolean isStateReachable( + Artifact artifact, String targetId, State state, StateEngine stateEngine) { - List<State> reachable = getReachableStates(state, stateEngine); + List<State> reachable = getReachableStates(artifact, state,stateEngine); if (reachable == null || reachable.size() == 0) { return false;