package mw_base_ext { class ProModel extends WModel { -- @subsets wovenModel reference leftModel container : WModelRef; -- @subsets wovenModel reference rightModel container : WModelRef; } ------------------------------------------------------------------- -- Model references. To keep track of woven models abstract class ModelRefXMI extends WModelRef { attribute type : String; } -- @welementRefType ElementRefXMI class ModelRefXMILeft extends ModelRefXMI { } -- @welementRefType ElementRefXMI class ModelRefXMIRight extends ModelRefXMI { } -- @wmodelRefType ModelRefXMI class ElementRefXMI extends WElementRef { --reference modelRef : ModelRefXMI oppositeOf ownedElementRef; } -------------------------------------------------------------------- abstract class ProLinkManyToOne extends WLink { -- @subsets end reference left[*] ordered container : Left oppositeOf leftOwner1; -- @subsets end reference right container : Right oppositeOf rightOwner1; } abstract class ProLinkOneToOne extends WLink { -- @subsets end reference left container : Left oppositeOf leftOwner2; -- @subsets end reference right container : Right oppositeOf rightOwner2; } -- Between a ProfileDefinition (left) and a Class (right). -- Specifying the right element is optional. class LinkDef extends ProLinkOneToOne { -- @subsets end reference linkElem[*] container : LinkElem; } -- Between a ProfileElement (left) and a Class (right). class LinkElem extends ProLinkOneToOne { } -- Between a set of NestedReferences or Nodes (left) and StructuralFeatures (right). class Nested extends ProLinkManyToOne { } -- Same as Nested but when there is a correspondance table. class IfNested extends ProLinkOneToOne { } -- Identifies the type of an element to create for a set of UML attributes. -- For instance, a MOF Multiplicity for (lower, upper, isUnique, isOrdered). class NewType extends WLink { -- @subsets end reference right container : Right oppositeOf rightOwner3; } class Right extends WLinkEnd { reference rightOwner1 : ProLinkManyToOne oppositeOf right; reference rightOwner2 : ProLinkOneToOne oppositeOf right; reference rightOwner3 : NewType oppositeOf right; } class Left extends WLinkEnd { reference leftOwner1 : ProLinkManyToOne oppositeOf left; reference leftOwner2 : ProLinkOneToOne oppositeOf left; } }