| -- @atlcompiler atl2006 |
| |
| module CreateWeaving; -- Module Template |
| |
| |
| create OUT : AMW from left : MOF, right : MOF; |
| |
| |
| --------------------------------------------------------------------------------------------------- |
| ---------------------- generic helpers used for auxiliar tasks----------------------------------------------------------------------------- |
| |
| helper def: methodName : String = 'Cartesian product'; |
| |
| helper def: aModel : AMW!MatchModel = OclUndefined; |
| |
| helper def: leftModel : String = '0_/Match_by_operation/examples/ex1_in_out/inschema.ecore'; |
| helper def: rightModel : String = '1_/Match_by_operation/examples/ex1_in_out/outschema.ecore'; |
| |
| helper context MOF!EModelElement def : isLeft() : Boolean = |
| MOF!EModelElement.allInstancesFrom('left')->exists(e | e = self); |
| |
| helper context MOF!EModelElement def : isRight() : Boolean = |
| MOF!EModelElement.allInstancesFrom('right')->exists(e | e = self); |
| |
| helper context MOF!EStructuralFeature def : isLeftsf() : Boolean = |
| self.eContainingClass.isLeft(); |
| |
| helper context MOF!EStructuralFeature def : isRightsf() : Boolean = |
| self.eContainingClass.isRight(); |
| |
| helper context MOF!EClass def : mySide() : String = |
| if self.isLeft() then |
| 'left' |
| else |
| if self.isRight() then |
| 'right' |
| else |
| 'undefined side' |
| endif |
| endif; |
| |
| |
| |
| helper context MOF!EStructuralFeature def : mySidesf() : String = |
| if self.isLeftsf() then |
| 'left' |
| else |
| if self.isRightsf() then |
| 'right' |
| else |
| 'undefined side' |
| endif |
| endif; |
| |
| helper context MOF!EModelElement def : setModelRef : String = |
| if self.isLeft() then |
| thisModule.aModel.leftM |
| else |
| if self.isRight() then |
| thisModule.aModel.rightM |
| else |
| OclUndefined |
| endif |
| endif; |
| |
| |
| |
| ---------------------- end of generic helpers used for auxiliar tasks----------------------------------------------------------------------------- |
| --------------------------------------------------------------------------------------------------- |
| |
| entrypoint rule CreateInitialElements() { |
| to |
| model : AMW!MatchModel ( |
| name <- 'WeavingModel', |
| leftM <- lefta, |
| rightM <- righta, |
| methods <- Sequence {method} |
| ), |
| lefta : AMW!ModelRef ( |
| name <- 'leftM', |
| ref <- thisModule.leftModel |
| ), |
| righta : AMW!ModelRef ( |
| name <- 'rightM', |
| ref <- thisModule.rightModel |
| ), |
| method : AMW!Method ( |
| name <- thisModule.methodName |
| ) |
| do { |
| thisModule.aModel <- model; |
| } |
| } |
| |
| |
| rule ElementRefs { |
| from |
| element : MOF!EModelElement |
| to |
| out : AMW!ElementRef ( |
| name <- element.name, |
| ref <- element.__xmiID__, |
| modelRef <- element.setModelRef |
| ) |
| } |
| |
| -- |
| abstract rule PairWiseModelElement { |
| from |
| left : MOF!EModelElement, right : MOF!EModelElement ( |
| left.isLeft() and right.isRight() |
| ) |
| to |
| alink : AMW!Equivalent ( |
| name <- left.name + '_' + right.name, |
| model <- thisModule.aModel, |
| left <- leftE, |
| right <- rightE, |
| similarity <- 0 |
| |
| ), |
| leftE : AMW!LeftElement ( |
| name <- left.name, |
| element <- left |
| ), |
| rightE : AMW!RightElement ( |
| name <- right.name, |
| element <- right |
| ) |
| |
| } |
| |
| rule PairWiseClass extends PairWiseModelElement { |
| from |
| left : MOF!EClass, right : MOF!EClass ( |
| left.isLeft() and right.isRight() |
| ) |
| } |
| |
| rule PairWiseSF extends PairWiseModelElement { |
| from |
| left : MOF!EStructuralFeature, right : MOF!EStructuralFeature ( |
| left.isLeft() and right.isRight() |
| ) |
| } |
| |
| |