私は今、EMFにダイビングだし、次のような問題が発生している:私は次のコードでフィールドセットからフィールドを削除しようとしているEMF編集ドメインコマンドの作成
を:
FieldElem ff = ds.getContent().getNestedFieldset().get(0).getField().get(0);
Command remove = new RemoveCommand(editingDomain, nf,
DescPackage.eINSTANCE.getNestedFieldsetElem_Field(), ff);
editingDomain.getCommandStack().execute(remove);
ff = ds.getContent().getNestedFieldset().get(0).getField().get(0);
Command remove2 = RemoveCommand.create(editingDomain, nf,
DescPackage.eINSTANCE.getNestedFieldsetElem_Field(), ff);
editingDomain.getCommandStack().execute(remove2);
ff = ds.getContent().getNestedFieldset().get(0).getField().get(0);
Command remove3 = RemoveCommand.create(editingDomain, ff);
editingDomain.getCommandStack().execute(remove3);
最初の2コマンドは正常に動作しますが、3番目のコマンドはうまく動作しません。私はコマンドスタックに追加するつもりはなく、何も削除していません。何が間違っているのですか?
UPDATE:デバッガで見たように、executeメソッドはUNEXECUTABLE_COMMANDを返します。
ありがとうございました! eContainer == null、あなたが予測した通りです。どのようにそれを修正する必要がありますか?それはモデルの設定に関連していますか?私はXSDスキーマからモデルを生成しましたが、max/min要素を除いて、それをあまり変更しませんでした。 – execc
@execc:XSDからどのように作品が生成されるのか分かりません。 .ecoreファイルがある場合、関係が選択されると、包含関係はプロパティビューで設定できます。オブジェクトにはコンテナが1つしかないため、EMFの動作は変更されます。したがって、オブジェクトをコンテナメントリストに追加し、このオブジェクトがすでに包含リストにある場合、EMFはオブジェクトをサイレントに削除しますこれまでのリストから。デバッグが難しい場合があります。 – Baldrick
はここに私のモデルのための私のセットアップです:https://lh4.googleusercontent.com/-1aIvcp-aJHs/TzT22CtrhDI/AAAAAAAAAAc/6GZhtwlSfBk/s963/containment.JPGとフィールドは、フィールドセットとの包含関係を持っているように見えます。どうしましたか? – execc