0

モデルの変更を管理するために TransactionalEditingDomain を使用しています。ただし、空のモデルを作成するにはいくつか問題があります。問題は、モデル Resource ( ) にモデルを追加するときだと思いますmodelResource.getContents().add(model);。これは、トランザクション内に配置する必要があるためです。したがって、 を使用してそのような操作を実行しようとしましたが、リソースのAddCommandを見つけることができません。EStructuralFeaturecontents

つまり、次のように書きたいと思います。

Command cmd = AddCommand.create(editingDomain, modelResource, FEAT_CONTENTS, model);
commandStack.execute(cmd);

問題は、私が見つけることができないということFEAT_CONTENTSです...誰か提案がありますか?

4

2 に答える 2

2

EMF の Eclipse フォーラムでAddCommand を使用して「公式」ソリューションを見つけました。

Command cmd = new AddCommand(editingDomain, modelResource.getContents(), model);
commandStack.execute(cmd);

ルート オブジェクトの削除も簡単ではないため、同じアプローチを RemoveCommand で使用できます。

Command cmd = new RemoveCommand(editingDomain, modelResource.getContents(), model);

最後に、完全を期すために、DeleteCommand (削除されたオブジェクトへのすべての参照も削除する) はルート オブジェクトではまったく機能しないことも知っておく必要があります。

于 2016-02-26T17:56:12.340 に答える
0

私は解決策を見つけましたが、心から私はそれが好きではありません:

commandStack.execute(new RecordingCommand(editingDomain) {
    protected void doExecute() {
        modelResource.getContents().add(model);
    }
});
于 2011-09-20T10:49:57.357 に答える