package mmw_interop { -- this metamodel extension contains many different types of links -- to capture heterogeneities between different types of tool models class MatchModel extends WModel { reference left container subsets wovenModel : WModelRef; reference right container subsets wovenModel : WModelRef; } -------------------------------------------------------------------- --- equality links (attribute, reference, equivalence etc.) class ElementEqual extends Equal { } class Equal extends Equivalent { attribute similarity : Double; } class AttributeEqual extends Equal { } class ReferenceEqual extends Equal { } class Element extends WLinkEnd { reference child [*] container: WLink; reference referredClass container : ReferredElement; reference condition container : Condition; } abstract class ReferredElement extends WLinkEnd { } class SourceElement extends ReferredElement { } class TargetElement extends ReferredElement { } class Equivalent extends WLink { reference source container subsets end: Element; reference target container subsets end: Element; reference condition container : Condition; } ----------------------------------------------- -- complex type of expressions abstract class Expression extends WLink { } -- concatenation of attributes class ConcatRefAttributes extends Concatenation { reference referenceName container subsets end : Element; } -- many references into a single attribute class RefsToAttrParametrized extends ConcatRefAttributes { reference enumEqual [*] container : EnumEqual; } abstract class Concatenation extends Expression { reference source [*] ordered container subsets end: Element; reference target container subsets end: Element; } class ConcatAttributes extends Concatenation { } -- one attribute into a reference ( a new target element must be created) class AttributeToRef extends WLink { reference source container subsets end : Element; reference targetObj container subsets end : Element; reference targetRef container subsets end : Element; reference targetAttr container subsets end : Element; } -- concatenation of values of enumerations class EnumConcat extends Expression { reference source [*] container subsets end: Element; reference targetEnum [*] container subsets end: Element; } -- elements without equivalences in target or source models class NotEquivalent extends Link { reference source container subsets end: Element; reference target container subsets end: Element; } -- a condition that filter the input elements (for the moment an element is filtered only by its type) abstract class Condition extends WLink { } class StringCondition extends Condition { attribute text : String; } class TypedAttribute extends Condition { reference source container subsets end : Element; reference value [*] container subsets end : Element; } datatype Double; }