# HG changeset patch # User Ingo Weinzierl # Date 1299685686 0 # Node ID 973f244ed5682ad58f1b54ad52f536c6480b8a08 # Parent 62dd8438885fd7ce27e731eba400318c00493ae1 Improved the TransitionEngine with a method that determines if a State B is reachable from a State A. artifacts/trunk@1445 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 62dd8438885f -r 973f244ed568 ChangeLog --- a/ChangeLog Wed Mar 09 14:02:03 2011 +0000 +++ b/ChangeLog Wed Mar 09 15:48:06 2011 +0000 @@ -1,3 +1,8 @@ +2011-03-09 Ingo Weinzierl + + * artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java: + New method to determine if a state B is reachable from a state A. + 2011-03-09 Ingo Weinzierl * artifact-database/src/main/java/de/intevation/artifactdatabase/data/DefaultStateData.java: diff -r 62dd8438885f -r 973f244ed568 artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java --- a/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java Wed Mar 09 14:02:03 2011 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java Wed Mar 09 15:48:06 2011 +0000 @@ -85,6 +85,10 @@ List transitions = getTransitions(state); List reachable = new ArrayList(); + if (transitions == null) { + return reachable; + } + for (Transition t: transitions) { if (t.isValid(state)) { reachable.add(engine.getState(t.getTo())); @@ -93,5 +97,36 @@ return reachable; } + + + /** + * Determines if a state with a given identifier is reachable from a current + * state. + * + * @param targetId The identifier of the target state. + * @param state The start state. + * @param stateEngine The StateEngine. + * + * @return true, if the target state is reachable, otherwise false. + */ + public boolean isStateReachable( + String targetId, + State state, + StateEngine stateEngine) + { + List reachable = getReachableStates(state, stateEngine); + + if (reachable == null || reachable.size() == 0) { + return false; + } + + for (State s: reachable) { + if (targetId.equals(s.getID())) { + return true; + } + } + + return false; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :