GEF エディターと EMF ベースのモデルとの同期に問題があります。notifyChanged()
これは、モデル内部の EMF アダプター、またはそれが呼び出すメソッドが、エディターのアダプターが呼び出されてモデルの子を更新する前に終了していないためだと思います。これにより、エディター ビューがモデル自体と同期しなくなるか、モデルへの変更がビューに表示されるべきときに表示されなくなります。
この設定を検討してください。" Command
"CreateNodeCommand
は、基になるモデルにノードを追加します。
@Override
public void execute() {
...
getNewNode().setGraph(getGraph());
...
}
にGraphEditPart
は、 を拡張する内部クラスがありorg.eclipse.emf.common.notify.Adapter
ます。notifyChanged()
以下のようにテストされているように、そのメソッドは実際に通知されます(不完全なコード) :
@Override
public void notifyChanged(Notification notification) {
switch (notification.getEventType()) {
case Notification.ADD:
System.err.println("ADD occurred!");
refreshChildren();
}
問題は、(サードパーティの) モデル自体も を実装しAdapter
、ID の追加など、新しいモデル要素で多数のメソッドを実行することです。
新しい要素の図が作成された直後にエディターに表示されないという事実は、次の編集ステップの後にのみ表示され、その図は表示されないという事実は、モデルアダプターがエディターアダプターrefreshChildren()
によって既に呼び出されている間、まだ新しい要素を設定するのに忙しいです。
これは同期を必要とするようですが、これがマルチスレッド用の組み込みの Java 機能で達成できるのか、または EMF ベースのアプローチを必要とするのかはわかりません。
EMF での同期に関する知識を共有してください。
よろしくお願いします!
編集
getModelChildren()
リクエストに応じて、メソッドのソース コードを以下に示します。
@Override
protected List<EObject> getModelChildren() {
List<EObject> allModelObjects = new ArrayList<EObject>();
allModelObjects.addAll(((MyGraph) getModel()).getTokens());
allModelObjects.addAll(((MyGraph) getModel()).getNodes());
return allModelObjects;
}