GEFエディターとEMFベースのモデルを使用してEclipseRCPを作成しています。
GEFブックでモデルについて言及されていることの1つは、
モデルは、リスナーを介してすべての状態の変化をブロードキャストする必要があります。これにより、モデルがコントローラーまたはビューを直接認識していなくても、ビューを更新できます。
この本の例では、各モデル要素クラス、たとえば、、Person
などMarriage
(例は系図エディタです)には、それぞれのリスナーを追加および削除するメソッドがあります。たとえば、Person
次のとおりです。
public void addPersonListener(PersonListener l) {
listeners.add(l);
}
public void removePersonListener(PersonListener l) {
listeners.remove(l);
}
残念ながら、私が使用しているモデルにはこれらのメソッドがありませんadd/removeListener
。ここで、モデルを拡張してメソッドを実装する方法が必要です。私はEMFについてあまり知らないので、どこから始めればよいのかわかりません。
モデルはグラフベースであるため、ノードとエッジ(「関係」)があります。要素は、たとえばを呼び出し、グラフMyNode node = ExampleFactory.eINSTANCE.createMyNode()
に新しいノードを追加することでグラフに追加されます。たとえば、graph.addMyNode(node)
。
EMFに関する知識が不足しているために理解できないのは、モデルの「拡張ポイント」がどこにあるかということです。
モデル構造はおおよそ次のとおりです。
org.example.structure.MyGraph
:
public interface MyGraph {
...
MyRelation addMyNode(MyNode sourceMyNode, MyNode targetMyNode,
MYTYPE_NAME myRelationType);
...
}
次に、クラスがありますMyGraphImpl
org.example.structure.impl.MyGraphImpl
:
public class MyGraphImpl extends Graph implements MyGraph {
...
protected MyGraphImpl() {
super();
this.init();
}
...
private void init()
{
//creates indexes
}
...
@Override
public void addMyNode(MyNode myNode)
{
super.addNode(myNode);
}
...
}
知識が不足しているため、単一のモデルクラスをEMFで拡張する必要がありますか(たとえば、Lars VogelのWebサイトで説明されています)、それとも「手ごとに」モデルを拡張できますか?
そして:**interface**
モデルのs(eg、MyGraph
)、またはそれらの実装クラス(eg、MyGraphImpl
)を拡張する必要がありますか?
私は正しい方向へのポインタに非常に感謝します...
ありがとう!