Mercurial > dive4elements > framework
annotate artifact-database/src/main/java/de/intevation/artifactdatabase/transition/TransitionEngine.java @ 261:f3d970a832ff
Bugfix: the document that is used to trigger the OUT operation of a collection will now contain the name of the output mode and its concrete subtype.
artifacts/trunk@1933 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 17 May 2011 09:57:10 +0000 |
parents | 8c2b6cdf22ad |
children | f367be55dd35 |
rev | line source |
---|---|
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.artifactdatabase.transition; |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
2 |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
3 import java.util.ArrayList; |
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
4 import java.util.HashMap; |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
5 import java.util.List; |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
6 import java.util.Map; |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
7 |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
8 import org.apache.log4j.Logger; |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
9 |
257
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
10 import de.intevation.artifacts.Artifact; |
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
11 |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
12 import de.intevation.artifactdatabase.state.State; |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
13 import de.intevation.artifactdatabase.state.StateEngine; |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
14 |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
15 |
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
16 /** |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
17 * The TransitionEngine stores all transitions for each Artifact and should be |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
18 * used to determine, if an Artifact is able to advance from one to another |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
19 * state. |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
20 * |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
21 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
22 */ |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
23 public class TransitionEngine { |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
24 |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
25 /** The logger used in this class. */ |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
26 private static Logger logger = Logger.getLogger(TransitionEngine.class); |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
27 |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
28 /** |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
29 * A map that contains the transitions of the artifacts. The key is the name |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
30 * of the artifact, its value is a list of all transitions of this artifact. |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
31 */ |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
32 protected Map<String, List> transitions; |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
33 |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
34 |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
35 /** |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
36 * The default constructor. |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
37 */ |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
38 public TransitionEngine() { |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
39 transitions = new HashMap<String, List>(); |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
40 } |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
41 |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
42 |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
43 /** |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
44 * Add new transitions for a specific artifact. |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
45 * |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
46 * @param stateId the name of the Artifact. |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
47 * @param transitions the list of transition of the artifact. |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
48 * |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
49 * @return true, if the transitions were added, otherwise false. |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
50 */ |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
51 public boolean addTransition(String stateId, Transition transition) { |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
52 List tmp = transitions.get(stateId); |
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
53 |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
54 if (tmp == null) { |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
55 tmp = new ArrayList<Transition>(); |
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
56 } |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
57 |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
58 tmp.add(transition); |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
59 |
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
60 logger.debug("Add new transitions for state '" + stateId + "'"); |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
61 |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
62 return transitions.put(stateId, tmp) != null; |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
63 } |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
64 |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
65 |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
66 /** |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
67 * This method returns all existing transitions of a state. |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
68 * |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
69 * @param state The state |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
70 * |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
71 * @return the existing transition of <i>state</i>. |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
72 */ |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
73 public List<Transition> getTransitions(State state) { |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
74 return transitions.get(state.getID()); |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
75 } |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
76 |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
77 |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
78 /** |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
79 * This method returns the reachable states of <i>state</i>. |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
80 * |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
81 * @param state The current state. |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
82 * @param engine The state engine. |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
83 * |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
84 * @return a list of reachable states. |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
85 */ |
257
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
86 public List<State> getReachableStates( |
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
87 Artifact artifact, |
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
88 State state, |
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
89 StateEngine engine) { |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
90 List<Transition> transitions = getTransitions(state); |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
91 List<State> reachable = new ArrayList<State>(); |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
92 |
201
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
93 if (transitions == null) { |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
94 return reachable; |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
95 } |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
96 |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
97 for (Transition t: transitions) { |
257
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
98 State target = engine.getState(t.getTo()); |
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
99 |
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
100 if (t.isValid(artifact, state, target)) { |
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
101 reachable.add(target); |
108
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
102 } |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
103 } |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
104 |
9ece61d918b1
Improved the StateEngine and the TransitionEngine to retrieve the reachable states of a current state.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
104
diff
changeset
|
105 return reachable; |
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
106 } |
201
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
107 |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
108 |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
109 /** |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
110 * Determines if a state with a given identifier is reachable from a current |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
111 * state. |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
112 * |
257
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
113 * @param artifact The owner artifact of state <i>state</i>. |
201
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
114 * @param targetId The identifier of the target state. |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
115 * @param state The start state. |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
116 * @param stateEngine The StateEngine. |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
117 * |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
118 * @return true, if the target state is reachable, otherwise false. |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
119 */ |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
120 public boolean isStateReachable( |
257
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
121 Artifact artifact, |
201
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
122 String targetId, |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
123 State state, |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
124 StateEngine stateEngine) |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
125 { |
257
8c2b6cdf22ad
Modified Transition.isValid() - added the artifact and the current state to the parameter list.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
201
diff
changeset
|
126 List<State> reachable = getReachableStates(artifact, state,stateEngine); |
201
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
127 |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
128 if (reachable == null || reachable.size() == 0) { |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
129 return false; |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
130 } |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
131 |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
132 for (State s: reachable) { |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
133 if (targetId.equals(s.getID())) { |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
134 return true; |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
135 } |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
136 } |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
137 |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
138 return false; |
973f244ed568
Improved the TransitionEngine with a method that determines if a State B is reachable from a State A.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
108
diff
changeset
|
139 } |
104
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
140 } |
26bfff409dd3
Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff
changeset
|
141 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |