短い: Papyrus で階層型 (ネストされた) ステートマシン UML ダイアグラムを作成し、それを使用して動作するステートマシン インスタンスを構築することは可能ですか?
説明:
ドキュメントのように、ネストされた状態のない単純な例は正しく機能しています。
ネストされた状態を作成するには、次の 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 の 2 つの状態のみがリストされています。イベントを送信すると、マシンは [PROCESSING, PREPARATION] ではなく、INITIALIZATION から PROCESSING に入ります。
何か間違ったことをしていますか、それとも Spring Statemachine によって実装されていないことをしようとしていますか? つまり、UML ダイアグラムから単一レベルのステート マシンしか作成できないのでしょうか?
編集:
この質問を読んで、spring-statemachine にこのオプションがあることを保証してくれた Janne Valkealahti に感謝します。
結局のところ、それは私のせいだったようですが、どこでどのように行われたかはわかりません(いくつかの同様の図が作成/編集されましたが、成功しませんでした)。昨日発生した Fedora 24 での Papyrus / Eclipse の警告とエラーに関連している可能性があります。今日、ゼロから新しい図を作成した後、すべてが期待どおりに機能しています。これは、ステート マシンがすべてのステートとサブステートをリストする新しい作業図です。