Mercurial > dive4elements > framework
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 : |