Spring Statemachine - 从 UML 构建分层状态机

Spring Statemachine - building hierarchical state machine from UML

简短:是否可以在 Papyrus 中创建分层(嵌套)状态机 UML 图,然后使用它来构建工作状态机实例?

解释:

没有嵌套状态的简单示例 as in documentation 工作正常。

我尝试了两种创建嵌套状态的方法:

  1. 在我的主机中创建状态并将另一台子机链接到它(属性 -> 子机)
  2. 在单个状态机中创建所有内容,使用子状态创建状态

在这两种情况下,创建的 Spring 状态机无法识别子机状态。

当我使用以下代码列出应用程序中的所有状态时:

public List<String> getAllStates() {
    List<String> list = new ArrayList<>();
    Collection<State<String, String>> states = machine.getStates();
    for (State state : states) {
        Collection<State<String, String>> substates = state.getStates();
        for (State<String, String> substate : substates) {
            list.add(substate.getIds().toString());
        }
    }
    return list;
}

,它只列出了两种状态,INITIALIZATION和PROCESSING。当我发送事件时,机器从 INITIALIZATION 进入 PROCESSING,而不是 [PROCESSING, PREPARATION]。

我是在做错什么,还是在尝试做 Spring Statemachine 甚至没有实现的事情?也就是说,是否可以仅从 UML 图创建单级状态机?

编辑:

感谢 Janne Valkealahti 阅读这个问题并确保 spring-statemachine 有这个选项。

看来这毕竟是我的错,但我不确定在哪里以及如何(创建/编辑了几个类似的图表但没有成功)。可能它与昨天发生在我的 Fedora 24 上的一些 Papyrus / Eclipse 警告和错误有关。 今天,从头开始创建新图表后,一切都按预期进行。 Here is new, working, diagram, for which state machine lists all states and substates.

链接 submachine 还不能工作,但正在 Support for UML Sub State Machines #121 中进行工作。

子状态需要像您尝试的那样在一台机器上配置。 Uml 测试源位于 simple-submachine.uml。如果你 post 你的 uml xml 我可以看看是否有明显遗漏的东西(或者把所有 3 个纸莎草纸文件,di,符号,uml)放在某个地方(也许是 github 要点)这样我就可以用纸莎草纸打开它。