annotate artifact-database/src/main/java/org/dive4elements/artifactdatabase/transition/TransitionEngine.java @ 570:584591f8203c 3.2.x

Upgrade to Log4j 2
author Tom Gottfried <tom@intevation.de>
date Mon, 28 Feb 2022 17:41:14 +0100
parents cbe3dfd3e1a6
children
rev   line source
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
1 package org.dive4elements.artifactdatabase.transition;
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
500
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
3 import java.util.ArrayDeque;
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
4 import java.util.ArrayList;
500
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
5 import java.util.Deque;
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6 import java.util.HashMap;
500
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
7 import java.util.HashSet;
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 import java.util.List;
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9 import java.util.Map;
500
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
10 import java.util.Set;
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11
570
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 500
diff changeset
12 import org.apache.logging.log4j.Logger;
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 500
diff changeset
13 import org.apache.logging.log4j.LogManager;
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
15 import org.dive4elements.artifacts.Artifact;
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
16
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
17 import org.dive4elements.artifactdatabase.state.State;
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
18 import org.dive4elements.artifactdatabase.state.StateEngine;
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
19
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
20
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21 /**
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 * 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
23 * 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
24 * state.
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25 *
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 * @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
27 */
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 public class TransitionEngine {
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 /** The logger used in this class. */
570
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 500
diff changeset
31 private static Logger logger = LogManager.getLogger(TransitionEngine.class);
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32
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 * 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
35 * 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
36 */
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37 protected Map<String, List> transitions;
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39
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 * The default constructor.
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 public TransitionEngine() {
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 transitions = new HashMap<String, List>();
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
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47
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 * 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
50 *
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51 * @param stateId the name of the Artifact.
400
f367be55dd35 Doc fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 257
diff changeset
52 * @param transition the list of transition of the artifact.
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53 *
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
54 * @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
55 */
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
56 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
57 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
58
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
59 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
60 tmp = new ArrayList<Transition>();
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61 }
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62
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
63 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
64
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 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
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 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
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
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 /**
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 * 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
73 *
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 * @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
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 * @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
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 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
79 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
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
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
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 * 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
85 *
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
86 * @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
87 * @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
88 *
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
89 * @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
90 */
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
91 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
92 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
93 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
94 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
95 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
96 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
97
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
98 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
99 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
100 }
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
101
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 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
103 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
104
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
105 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
106 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
107 }
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
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
109
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
110 return reachable;
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111 }
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
112
500
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
113 /** Returns all recursive reachable state ids for
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
114 * a given pair of artifact id and state id.
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
115 */
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
116 public Set<String> allRecursiveSuccessorStateIds(
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
117 String artifactIdentifier,
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
118 String stateId
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
119 ) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
120 HashSet<String> result = new HashSet<String>();
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
121
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
122 List<Transition> trans = transitions.get(artifactIdentifier);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
123
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
124 if (trans == null) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
125 return result;
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
126 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
127
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
128 Map<String, Set<String>> succs = new HashMap<String, Set<String>>();
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
129
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
130 for (Transition t: trans) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
131 String from = t.getFrom();
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
132 String to = t.getTo();
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
133
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
134 Set<String> s = succs.get(from);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
135 if (s == null) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
136 s = new HashSet<String>();
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
137 succs.put(from, s);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
138 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
139 s.add(to);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
140 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
141
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
142 Set<String> start = succs.get(stateId);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
143
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
144 if (start == null) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
145 return result;
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
146 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
147
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
148 Deque<String> open = new ArrayDeque<String>(start);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
149
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
150 while (!open.isEmpty()) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
151 String cand = open.pop();
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
152 if (result.add(cand)) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
153 Set<String> s = succs.get(cand);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
154 if (s != null) {
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
155 open.addAll(s);
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
156 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
157 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
158 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
159
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
160 return result;
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
161 }
cbe3dfd3e1a6 Framework: Added a method to the transition engine to recursively collect all state id for a given artifact identifer and a state id. Goal is to create a predicate dc:state-successors-contains($artifict-type-identifer, 'winfo.calculation.select, $current-state-id).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 475
diff changeset
162
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
163
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
164 /**
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
165 * 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
166 * 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
167 *
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
168 * @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
169 * @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
170 * @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
171 * @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
172 *
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
173 * @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
174 */
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
175 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
176 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
177 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
178 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
179 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
180 {
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
181 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
182
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
183 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
184 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
185 }
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
186
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
187 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
188 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
189 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
190 }
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
191 }
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
192
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
193 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
194 }
104
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
195 }
26bfff409dd3 Added interfaces and engines used in concrete artifact packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
196 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org