comparison artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java @ 201:973f244ed568

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
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 09 Mar 2011 15:48:06 +0000
parents 9ece61d918b1
children 8c2b6cdf22ad
comparison
equal deleted inserted replaced
200:62dd8438885f 201:973f244ed568
83 */ 83 */
84 public List<State> getReachableStates(State state, StateEngine engine) { 84 public List<State> getReachableStates(State state, StateEngine engine) {
85 List<Transition> transitions = getTransitions(state); 85 List<Transition> transitions = getTransitions(state);
86 List<State> reachable = new ArrayList<State>(); 86 List<State> reachable = new ArrayList<State>();
87 87
88 if (transitions == null) {
89 return reachable;
90 }
91
88 for (Transition t: transitions) { 92 for (Transition t: transitions) {
89 if (t.isValid(state)) { 93 if (t.isValid(state)) {
90 reachable.add(engine.getState(t.getTo())); 94 reachable.add(engine.getState(t.getTo()));
91 } 95 }
92 } 96 }
93 97
94 return reachable; 98 return reachable;
95 } 99 }
100
101
102 /**
103 * Determines if a state with a given identifier is reachable from a current
104 * state.
105 *
106 * @param targetId The identifier of the target state.
107 * @param state The start state.
108 * @param stateEngine The StateEngine.
109 *
110 * @return true, if the target state is reachable, otherwise false.
111 */
112 public boolean isStateReachable(
113 String targetId,
114 State state,
115 StateEngine stateEngine)
116 {
117 List<State> reachable = getReachableStates(state, stateEngine);
118
119 if (reachable == null || reachable.size() == 0) {
120 return false;
121 }
122
123 for (State s: reachable) {
124 if (targetId.equals(s.getID())) {
125 return true;
126 }
127 }
128
129 return false;
130 }
96 } 131 }
97 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 132 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org