| import fMM : 'Families.ecore#/'; |
| import pMM : 'Persons.ecore#/'; |
| import f2pMM : 'Families2Persons.ecore#/'; |
| |
| transformation org::eclipse::qvtd::xtext::qvtcore::tests::families2persons::Families2Persons |
| { |
| family imports Families; |
| person imports Persons; |
| imports Families2Persons; |
| } |
| |
| map Member2Male in Families2Persons |
| { |
| check family(s : Member[1] |
| | |
| isFemale(s).not2();) {} |
| |
| enforce person() { |
| realize t : Male |
| |} |
| |
| where() { |
| realize m2m : f2pMM::Member2Male |
| | |
| m2m.member := s; |
| m2m.person := t; |
| } |
| |
| map |
| { |
| |
| where() { |
| t.fullName := s.firstName + ' ' + familyName(s); |
| } |
| } |
| } |
| |
| map Member2Female in Families2Persons |
| { |
| check family(s : Member[1] |
| | |
| isFemale(s);) {} |
| |
| enforce person() { |
| realize t : Female |
| |} |
| |
| where() { |
| realize m2m : f2pMM::Member2Female |
| | |
| m2m.member := s; |
| m2m.person := t; |
| } |
| |
| map |
| { |
| |
| where() { |
| t.fullName := s.firstName + ' ' + familyName(s); |
| } |
| } |
| } |
| |
| query Families2Persons::familyName(member : fMM::Member[1]) : String[1] |
| { |
| if member.familyFather.oclIsUndefined().not2() then member.familyFather.lastName else if |
| member.familyMother.oclIsUndefined().not2() then member.familyMother.lastName else if member.familySon.oclIsUndefined().not2() |
| then member.familySon.lastName else member.familyDaughter.lastName endif endif endif |
| } |
| |
| query Families2Persons::isFemale(member : fMM::Member[1]) : Boolean[1] |
| { |
| if member.familyMother.oclIsUndefined().not2() then true |
| else if member.familyDaughter.oclIsUndefined().not2() then true |
| else false |
| endif endif |
| } |