From a4fcb9da971abdb1e6222eee8e15e4d7eeb0cd79 Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sat, 4 Apr 2015 10:24:50 +0100 Subject: [PATCH] Expose extended state - ExtendedState is now exposed via StateMachine interface. - Add "sm variables" command to samples. --- .../statemachine/StateMachine.java | 7 ++++++ .../support/AbstractStateMachine.java | 5 ++++ .../demo/AbstractStateMachineCommands.java | 25 ++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/StateMachine.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/StateMachine.java index 19b4238c..b0b0a6e0 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/StateMachine.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/StateMachine.java @@ -37,6 +37,13 @@ public interface StateMachine extends Region { */ State getInitialState(); + /** + * Gets the state machine extended state. + * + * @return extended state + */ + ExtendedState getExtendedState(); + /** * Adds the state listener. * diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java index 75075182..93d75e80 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java @@ -177,6 +177,11 @@ public abstract class AbstractStateMachine extends LifecycleObjectSupport return initialState; } + @Override + public ExtendedState getExtendedState() { + return extendedState; + } + @Override public boolean sendEvent(Message event) { if (isComplete() || !isRunning()) { diff --git a/spring-statemachine-samples/src/main/java/demo/AbstractStateMachineCommands.java b/spring-statemachine-samples/src/main/java/demo/AbstractStateMachineCommands.java index cd4fb59d..31b49135 100644 --- a/spring-statemachine-samples/src/main/java/demo/AbstractStateMachineCommands.java +++ b/spring-statemachine-samples/src/main/java/demo/AbstractStateMachineCommands.java @@ -1,5 +1,9 @@ package demo; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Set; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.shell.core.CommandMarker; @@ -22,7 +26,7 @@ public class AbstractStateMachineCommands implements CommandMarker { @Qualifier("stateChartModel") private String stateChartModel; - @CliCommand(value = "sm state", help = "Prints state machine state") + @CliCommand(value = "sm state", help = "Prints current state") public String state() { return StringUtils.collectionToCommaDelimitedString(stateMachine.getState().getIds()); } @@ -44,4 +48,23 @@ public class AbstractStateMachineCommands implements CommandMarker { return stateChartModel; } + @CliCommand(value = "sm variables", help = "Prints extended state variables") + public String variables() { + StringBuilder buf = new StringBuilder(); + Set> entrySet = stateMachine.getExtendedState().getVariables().entrySet(); + Iterator> iterator = entrySet.iterator(); + if (entrySet.size() > 0) { + while (iterator.hasNext()) { + Entry e = iterator.next(); + buf.append(e.getKey() + "=" + e.getValue()); + if (iterator.hasNext()) { + buf.append("\n"); + } + } + } else { + buf.append("No variables"); + } + return buf.toString(); + } + } \ No newline at end of file