0

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

解释:

没有嵌套状态的简单示例,如文档中所示,工作正常。

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

  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;
}

,它只列出了两种状态,初始化和处理。当我发送事件时,机器从初始化进入处理,而不是[处理,准备]。

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

编辑:

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

看来这毕竟是我的错,但我不确定在哪里以及如何(创建/编辑了几个类似的图表但没有成功)。可能它与昨天发生在我的 Fedora 24 上的一些 Papyrus / Eclipse 警告和错误有关。今天,在从头开始创建新图表后,一切都按预期工作。这是新的工作图,状态机列出了所有状态和子状态。

4

1 回答 1

0

链接 submachine 还没有工作,但在Support for UML Sub State Machines #121中正在工作。

正如您所尝试的那样,子状态需要在单台机器上进行配置。用于此的 Uml 测试源位于simple-submachine.uml。如果您发布您的 uml xml,我可以查看是否有任何明显的缺失(或将所有 3 个纸莎草文件、di、符号、uml)放在某个地方(可能是 github 要点),以便我可以在纸莎草中打开它。

于 2016-08-03T07:51:04.393 回答