3

私はMDSD/EMFを初めて使用しますが、Eclipseのサポートのおかげで大きな進歩を遂げています。

awynneが提案したように、昨日答えられたようにおもちゃのモデルを作成しました、そして私は非常に近いです。私はEMFとその生成されたツリーエディタのみを使用しています。

これが私のEMFメタモデルの要約です:

- EClass: Widget
  - name

- EClass: WidgetReference
  - aWidgetReference : Widget [0..1] Containment = false

- EClass: WidgetContainer
  - myWidgets : Widget [0..*] Containment = true

- EClass: ReferenceContainer
  - myReferences : WidgetReference [0..*] Containment = true

- EClass: TopLevelClass
  - myWidgetContainer    : [1] WidgetContainer    Containment = true
  - myReferenceContainer : [1] ReferenceContainer Containment = true

現在起こっていることは、モデル用に生成されたツリーエディターで、TopLevelClassからすべてを作成することです。WidgetContainerで複数のウィジェットを正常に作成でき、ReferenceContainerで単一のWidgetReferenceを作成して、それを特定のウィジェットに関連付けることができます。

誰かがこれに遭遇した場合、生成されたEMFエディタコードにバグがあります:

ReferenceContainerに複数のWidgetReferenceを追加しようとすると、ツリーエディターにはReferenceContainerの下の最初のWidgetReferenceのみが表示されます。ツリーのWidgetReferencesアイテムをクリックすると、プロパティビューに複数のWidgetReferencesが表示されます。ツリーでそれらを表示できないため、実際のウィジェットに関連付けるために参照を変更するためにそれらを選択することはできません。

これに対する回避策は、必要な数の参照を作成し、モデルを保存して閉じてから、再度開くことです。再度開くと、すべての参照が表示されます。

ヘルプ/ガイダンスをありがとう。

ジェフ

4

2 に答える 2

4

あなたの質問に対する答えは、「封じ込め」の考え方に関連していると思います。子オブジェクトへの包含参照(EMFメタモデルではcontainment = true)を持つ親オブジェクトは、その子のライフサイクルを管理します。したがって、子が作成されると、そのオブジェクトへの親の参照が自動的に作成されます。参照が包含型ではない場合(containment = false)、正しい型の既存のモデルオブジェクトへの参照を指定できます。参照をcontaination=falseとして設定する必要があると思います。

Acceleoを使用したことがないので、例としてEMFツリーエディターを使用しましょう(この概念はGMFエディターにも適用されます):ツリーエディターで、親オブジェクトに子への包含参照がある場合、ユーザーは親を右クリックし、「新規->子->子オブジェクト」を選択して子。子への参照が包含型ではない場合、ユーザーは、親オブジェクトのプロパティウィンドウで適切な子プロパティをクリックすることにより、モデルにすでに存在するそのオブジェクトのインスタンスを選択できます。

それは役に立ちますか?この説明がわかりにくい場合は、含まれていない参照を含むおもちゃのモデルを作成し、そのEMFエディターを生成すると役立つ場合があります。

于 2010-11-11T19:38:05.843 に答える
0

EMFのモデル間で参照するという概念が、あなたが説明しているものであるかどうかはわかりません。ただし、モデルでは、他のモデルの要素を参照できますモデルインスタンスを作成するGenericEMFエディターで、右ボタンをクリックして[リソースの読み込み...]を選択できます。その新しいリソースは、モデルに関連する他のモデルにすることができます(メタモデルは他のモデルのメタモデルを参照します)。

メタモデルレベルでもそれが可能です。グラフィカルなEcoreエディターでは、他のメタモデルからクラスをドラッグアンドドロップできます。それらは同期を保ちます。

しかし、これがあなたが求めているものであるかどうかはわかりません。

于 2010-11-10T22:25:14.277 に答える