1

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)を拡張する必要がありますか?

私は正しい方向へのポインタに非常に感謝します...

ありがとう!

4

2 に答える 2

2

EMF には独自の通知メカニズムがあります。別のリスナーメカニズムを追加する必要はありません。簡単な Google 検索で、このメカニズムを示す素晴らしい例を含む Lars の別のチュートリアルが得られました。

于 2012-03-22T10:44:28.583 に答える
0

EMF と GEF を一緒に使用する理由はほとんどありません。EMF でモデリングし、GEF を編集フレームワークとして使用する場合は、GMF http://www.eclipse.org/modeling/gmp/instedの使用を検討する必要があります。GMF は、Draw2D、GEF、および EMF に拡張機能を提供し、それらをシームレスに結合します。また、ノードとエッジを構築するだけの場合は、Graphity を EMF の GEF よりもはるかに簡単なフレームワークとして使用することを検討してください。これにより、迅速で優れた結果がすぐに得られます。

于 2012-04-05T12:44:27.727 に答える