# HG changeset patch # User Ingo Weinzierl # Date 1303986630 0 # Node ID 8c2b6cdf22ad563e37dce455dbc7751e6d1b0df6 # Parent 55d08706ccf295919e9861c6f63756f09c331f31 Modified Transition.isValid() - added the artifact and the current state to the parameter list. artifacts/trunk@1758 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 55d08706ccf2 -r 8c2b6cdf22ad ChangeLog --- 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 + + * 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 * artifact-database/src/main/java/de/intevation/artifactdatabase/state/State.java, diff -r 55d08706ccf2 -r 8c2b6cdf22ad artifact-database/src/main/java/de/intevation/artifactdatabase/transition/Transition.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 state is valid. + * Determines if its valid to step from state a of an artifact + * artifact to state b. + * + * @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 : diff -r 55d08706ccf2 -r 8c2b6cdf22ad artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java --- 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 getReachableStates(State state, StateEngine engine) { + public List getReachableStates( + Artifact artifact, + State state, + StateEngine engine) { List transitions = getTransitions(state); List reachable = new ArrayList(); @@ -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 state. * @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 reachable = getReachableStates(state, stateEngine); + List reachable = getReachableStates(artifact, state,stateEngine); if (reachable == null || reachable.size() == 0) { return false;