Question

Je suis nouveau à MDSD / EMF mais fais grâce de grands progrès d'au soutien d'Eclipse.

Je créé un modèle de jouet répondu hier que awynne a suggéré, et je suis très proche. Je suis seulement en utilisant EMF et son éditeur d'arbre généré.

Voici un résumé de ma EMF méta-modèle:

- 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

Qu'est-ce qui se passe maintenant est que dans l'éditeur d'arbre généré pour le modèle, je crée tout à partir du TopLevelClass. Je peux créer avec succès plusieurs widgets dans le WidgetContainer, et je peux créer un seul WidgetReference dans le ReferenceContainer et l'associer à un widget spécifique.

Au cas où quelqu'un se heurte à cela, il y a un bogue dans le code de l'éditeur EMF généré:

Quand j'essaie d'ajouter plus d'un WidgetReference à l'ReferenceContainer, l'éditeur d'arbre montre que la première WidgetReference sous la ReferenceContainer. Si je clique sur l'élément de WidgetReferences dans l'arbre, il ne montre WidgetReferences plusieurs dans les propriétés voir. Juste ne me laisse pas les voir dans l'arbre, et donc ne me laisse pas les sélectionner pour changer leur référence à l'associer à un widget de réel.

La solution à cela est de créer autant de références que vous avez besoin, enregistrez et fermez le modèle, puis rouvrez-le. Lors de sa réouverture, toutes les références seront affichées.

Merci pour toute aide / conseils.

Jeff

Était-ce utile?

La solution

Je pense que la réponse à votre question est liée à l'idée de « confinement ». Tout objet parent qui a une référence de confinement (confinement = true dans la FEM métamodèle) à un objet enfant gère le cycle de vie de cet enfant. Ainsi, lorsque l'enfant est créé, la référence du parent à cet objet est fait automatiquement. Si la référence n'est pas de confinement de type (confinement = false), alors vous pouvez pointer la référence à un objet de modèle existant du type correct. Je pense que vous devez définir votre référence confinement = false.

Je n'ai pas utilisé Acceleo donc nous allons utiliser l'éditeur d'arbre EMF comme un exemple (le concept applique également à la editior FMV): Dans l'éditeur d'arbre, si l'objet parent a une référence de confinement à un enfant, l'utilisateur est en mesure pour créer l'enfant par un clic droit sur le parent et en choisissant « nouveau -> enfant -> ChildObject. » Si la référence à l'enfant n'est pas de confinement de type, l'utilisateur sera en mesure de choisir les instances de cet objet qui existe déjà dans le modèle en cliquant sur la propriété de l'enfant approprié dans la fenêtre des propriétés de l'objet parent.

Est-ce que l'aide? Si cette description est source de confusion, il peut aider à créer un modèle de jouet avec des références non confinement et générer l'éditeur de champs électromagnétiques pour elle.

Autres conseils

Je ne sais pas le concept de référencement entre les modèles dans EMF est ce que vous décrivez. Cependant, dans un modèle que vous ne peut faire référence à des éléments dans d'autres modèles. Dans l'éditeur générique EMF avec vous créer des instances modèle, vous pouvez cliquer sur le bouton droit et sélectionnez « Charger des ressources ... ». Cette nouvelle ressource peut être tout autre modèle qui est lié à votre modèle (vos références métamodèle métamodèle de l'autre modèle).

Vous pouvez à cela aussi bien au niveau méta-modèle. Dans l'éditeur de Ecore graphique, vous pouvez glisser et déposer des cours d'autres métamodèles. Ils garderont en phase.

Je ne suis pas sûr, cependant, si cela est ce que vous demandez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top