2016-04-07 5 views
1

EMFを使用してネットワークをモデル化しようとしています。 ネットワークは、相互に接続されたノードで構成されている必要があります。 各ノードは、メッシュネットワークのように他のノードと1つまたは複数の接続を持つ必要があります。EMFの自己参照ノードをモデリングしてECPで編集する

モデルは、EMFクライアントプラットフォーム(ECP)デモアプリケーションで編集可能である必要があります。 ユーザがノードを作成すると、ECPモデルエクスプローラで、他のノードへの接続を設定することができます。

最初の試行は自己参照でしたが、問題は双方向の自己参照がないことです。これにより、反対側のノードからの接続が見えなくなります。

私の次のアイデアは中間接続クラスを使用することでした。これは別の問題につながります。モデル・エクスプローラに接続クラスを表示せずにこの接続を自動的に作成したいと思います。生成されたEMFビューアでは実現できますが、使用しているECPデモアプリケーションでは実現できません。

第3のアイデア:最後のアイデアを解決するために考えられる唯一の方法は、ノードのビューでtableControlを使用してそこの接続クラスを編集することです。しかし、モデルエクスプローラで接続クラスを隠す問題は残り、接続クラスはプロジェクトフォルダ(最高レベル)に表示され、含まれるクラス(私の場合はネットワーククラス)では表示されません。

Doeの誰かが私の問題を解決するにはいくつかのアイデアを持っていますか?

編集:追加情報は、ノード間

接続が定義全二重によるものです。 そして、グラフは最短経路アルゴリズムの入力として使用する必要があります。

答えて

1

あなたの最初の試行は良いものです。実際には、Ecoreでは反対のモデルを作ることができます。これを行うには、同じオブジェクトに対して2つのモデル()をモデル化しなければなりません。したがって、EReferenceの1つのプロパティeOppositeをもう1つに設定する必要があります。ここで

eOppositeセットを持つ単純なメタモデルである:たEcore-XMIでhttps://repository.genmymodel.com/vincent.aranega/NodeGraph

、それはこの(eOpposite値に注意してください)のようになります。このメタモデルで

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZhv1pEeW9zv77lynsJg" 
    name="references" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZiv1pEeW9zv77lynsJg"/> 

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZiv1pEeW9zv77lynsJg" 
    name="relatives" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZhv1pEeW9zv77lynsJg" /> 

、あなたは可能です多くのNodeを含むGraphを作成します。各ノードはreferenceの他のノードを持つことができます。 NodeAを別名Bとすると、コレクションのBは自動的にAに更新されます。

+0

方向性ありがとうございます。しかし今、それはイン・アンド・アウトのようなものです。生成されたコード内の親戚への参照を自動的に追加することをお勧めします。これにより、参照のうちの1つを使ってグラフをステップ実行することができます。 – zumbie

+0

私は忘れていました:もしそうなら、この二重の追加(または参照リストのより良い同期)を実装する場所はどこでしょうか。ところで、元の質問に答えるので、私はあなたの印をつけます。再度、感謝します。 – zumbie

+0

私はあなたの要求が正しいことを確信していません。私が与えた解決策では、例えば 'references'コレクションのみを使ってグラフを進めることができます。2つのコレクションが自動的に同期されます.2つのコレクションのいずれかに要素を配置すると、もう一方の要素が更新されます。 –