package mmw_simple_merge { -- Model class. Distinguish between left and right references class MergeModel extends WModel { reference leftModel container subsets wovenModel : ModelRefXMI; reference rightModel container subsets wovenModel : ModelRefXMI; reference targetModel container subsets wovenModel : ModelRefXMI; } -- Model references. To keep track of woven models class ModelRefXMI extends WModelRef { attribute type : String; reference ownedElementRef [0-*] container : ElementRefXMI oppositeOf modelRef; } -- references to each woven element class ElementRefXMI extends WElementRef { reference modelRef: WModelRef oppositeOf ownedElementRef; } ------------------------------------------- --structural semantics class Pattern extends WLinkEnd { } abstract class Binding extends WLinkEnd { } class ValuedBinding extends Binding { attribute bindValue : String; } ------------------------------------------------ class MergeLink extends WLink { reference source[1-*] container : Binding; reference target container : Target; } class Source extends WLink { } class Target extends WLinkEnd { } class Reference extends WLinkEnd { } ------------------------------------------------ -- concatenation class Concat extends WLink { reference predicates [2-*] : Predicate; } -- class Predicate extends WLinkEnd { -- } ------------------------------------------------ -- percentage class Percentage extends WLink { reference voters container : Voters; reference votes container : TotalVotes; } class Voters extends WLinkEnd { } class TotalVotes extends WLinkEnd { } ------------------------------------------------ -- union class Union extends WLink { reference predicates[*] container : Predicate; } class Predicate extends WLinkEnd { }