既存のモデルオブジェクトへの参照を作成するにはどうすればよいですか?
-
08-10-2019 - |
質問
私は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
今起こっているのは、モデルの生成されたツリーエディターで、トップレベルクラスから始まるすべてを作成することです。 WidgetContainerで複数のウィジェットを正常に作成することができ、ReferenceContainerで単一のウィジェットレファレンスを作成し、特定のウィジェットに関連付けることができます。
誰かがこれに遭遇した場合、生成されたEMFエディターコードにバグがあります。
ReferenceContainerに複数のWidgetReferenceを追加しようとすると、Tree EditorはReferenceContainerの下で最初のWidgetReferenceのみを表示します。ツリー内のWidgetReferencesアイテムをクリックすると、プロパティビューに複数のWidgetReferencesが表示されます。ツリーでそれらを見ることができないため、参照を変更して実際のウィジェットに関連付けるためにそれらを選択することはできません。
これに対する回避策は、必要な数の参照を作成し、モデルを保存して閉じてから再開することです。再開すると、すべての参照が表示されます。
ヘルプ/ガイダンスをありがとう。
ジェフ
解決
あなたの質問に対する答えは、「封じ込め」の考えに関連していると思います。子どものオブジェクトに封じ込めリファレンス(contarment = true)がある親オブジェクトは、その子供のライフサイクルを管理します。そのため、子供が作成されると、そのオブジェクトに対する親の参照が自動的に作成されます。参照がタイプ封じ込めでない場合(contarment = false)、正しいタイプの既存のモデルオブジェクトへの参照を指すことができます。参照をcantantment = falseとして設定する必要があると思います。
私はacceleoを使用していないので、EMFツリーエディターを例として使用しましょう(コンセプトはGMF編集にも適用されます):ツリーエディターでは、親オブジェクトに子供への封じ込め参照がある場合、ユーザーはユーザーが作成できます。親を右クリックして「new - > child-> ChildObject」を選択することで子。子への参照がタイプの封じ込めでない場合、ユーザーは、親オブジェクトのプロパティウィンドウで適切な子プロパティをクリックすることにより、モデルに既に存在するオブジェクトのインスタンスを選択できます。
それは助けますか?この説明が混乱している場合、いくつかの非抑制参照を含むおもちゃモデルを作成し、そのためのEMFエディターを生成するのに役立つ場合があります。
他のヒント
EMFのモデル間で参照する概念があなたが説明するものであるかどうかはわかりません。しかし、モデルではあなた 行う 他のモデルの要素を参照できます。モデルインスタンスを作成する汎用EMFエディターでは、右のボタンをクリックして「リソースを読み込む...」を選択できます。その新しいリソースは、モデルに関連する他のモデルです(メタモデルは他のモデルのメタモデルを参照しています)。
メタモデルレベルでも同様にできます。グラフィカルエコールエディターでは、他のメタモデルからクラスをドラッグアンドドロップできます。彼らは同期します。
しかし、これがあなたが求めていることであるかどうかはわかりません。