diff options
14 files changed, 245 insertions, 214 deletions
diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/AbstractToConcrete/AbstractToConcrete.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/AbstractToConcrete/AbstractToConcrete.qvtr index 5f640264d..d89d1cdce 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/AbstractToConcrete/AbstractToConcrete.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/AbstractToConcrete/AbstractToConcrete.qvtr @@ -9,6 +9,8 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import UMLMM : 'ClassMM_IN.emof'::ClassMM; + transformation AbstractToConcrete(uml1:UMLMM, uml2:UMLMM) { key UMLMM::Type {name}; diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/ClassModelToClassModel/ClassModelToClassModel.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/ClassModelToClassModel/ClassModelToClassModel.qvtr index 57e4302ee..54c208793 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/ClassModelToClassModel/ClassModelToClassModel.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/ClassModelToClassModel/ClassModelToClassModel.qvtr @@ -9,6 +9,8 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import umlMM : 'ClassMM.emof'::ClassMM; + transformation ClassModelToClassModel(uml1:umlMM, uml2:umlMM) { key umlMM::Class{name}; diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF/DNF.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF/DNF.qvtr index 074cb50a5..5195e4014 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF/DNF.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF/DNF.qvtr @@ -10,13 +10,14 @@ * E.D.Willink - alignment with evolved specification *******************************************************************************/ -// Transforming an arbitrary boolean expression into disjunctive normal form by using -// DeMorgan's law +-- Transforming an arbitrary boolean expression into disjunctive normal form by using +-- DeMorgan's law +import exprMM : 'DNFMM.emof'::deMorgansLawMM; transformation DNF(expr1:exprMM, expr2:exprMM) { - // a.(b+c) = (a.b) + (a.c) + -- a.(b+c) = (a.b) + (a.c) top relation EqualByDistributionLaw1 { p:exprMM::Expr; @@ -34,11 +35,11 @@ transformation DNF(expr1:exprMM, expr2:exprMM) { b:Expr{parent = e2}, c:Expr{parent = e2} - ++ emptySequence // To ensures that OR only has two operands. + ++ emptySequence -- To ensures that OR only has two operands. }, parent = e1 } - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = p } @@ -80,7 +81,7 @@ transformation DNF(expr1:exprMM, expr2:exprMM) } } - // (b+c).a = (b.a) + (c.a) + -- (b+c).a = (b.a) + (c.a) top relation EqualByDistributionLaw2 { p:exprMM::Expr; @@ -97,12 +98,12 @@ transformation DNF(expr1:exprMM, expr2:exprMM) { b:Expr{parent = e2}, c:Expr{parent = e2} - ++ emptySequence // To ensures that OR only has two operands. + ++ emptySequence -- To ensures that OR only has two operands. }, parent = e2 }, a:Expr{parent = e1} - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = p } @@ -140,7 +141,7 @@ transformation DNF(expr1:exprMM, expr2:exprMM) when { - not EqualByDistributionLaw1(e1, _); // lest (a+b).(c+d) transformed twice! + not EqualByDistributionLaw1(e1, _); -- lest (a+b).(c+d) transformed twice! } where @@ -149,7 +150,7 @@ transformation DNF(expr1:exprMM, expr2:exprMM) } } - // ~(a+b) = ~a.~b + -- ~(a+b) = ~a.~b top relation EqualByDeMorganLaw1 { p:exprMM::Expr; @@ -166,11 +167,11 @@ transformation DNF(expr1:exprMM, expr2:exprMM) { a:Expr{parent = e2}, b:Expr{parent = e2} - ++ emptySequence // To ensures that OR only has two operands. + ++ emptySequence -- To ensures that OR only has two operands. }, parent = e1 } - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = p } @@ -205,7 +206,7 @@ transformation DNF(expr1:exprMM, expr2:exprMM) }; } - // ~(a.b) = ~a+~b + -- ~(a.b) = ~a+~b top relation EqualByDeMorganLaw2 { p:exprMM::Expr; @@ -222,11 +223,11 @@ transformation DNF(expr1:exprMM, expr2:exprMM) { a:Expr{parent = e2}, b:Expr{parent = e2} - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = e1 } - ++ emptySequence // To ensure that NOT only has one operand. + ++ emptySequence -- To ensure that NOT only has one operand. }, parent = p } @@ -397,9 +398,9 @@ transformation DNF(expr1:exprMM, expr2:exprMM) where { e1.ID <> e2.ID; - // ID is unique for each instance. - // For each run of this relation a new Literal will be created even if - // a Literal with the same name already exists. + -- ID is unique for each instance. + -- For each run of this relation a new Literal will be created even if + -- a Literal with the same name already exists. } } diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF_bbox/DNF_bbox.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF_bbox/DNF_bbox.qvtr index e69ae256c..72a7b23af 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF_bbox/DNF_bbox.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/DNF_bbox/DNF_bbox.qvtr @@ -10,19 +10,20 @@ * E.D.Willink - alignment with evolved specification *******************************************************************************/ -// Transforming an arbitrary boolean expression into disjunctive normal form by using -// DeMorgan's law +-- Transforming an arbitrary boolean expression into disjunctive normal form by using +-- DeMorgan's law +import exprMM : 'DNFMM.emof'::exprMM; transformation DNF_bbox(expr1:exprMM, expr2:exprMM) { - // a.(b+c) = (a.b) + (a.c) + -- a.(b+c) = (a.b) + (a.c) top relation EqualByDistributionLaw1 { p:exprMM::Expr; emptySequence:Sequence(exprMM::Expr); - replace domain expr1 + /*replace*/ domain expr1 e1:And { expr = e1s:Sequence(Expr) @@ -34,11 +35,11 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) { b:Expr{parent = e2}, c:Expr{parent = e2} - ++ emptySequence // To ensures that OR only has two operands. + ++ emptySequence -- To ensures that OR only has two operands. }, parent = e1 } - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = p } @@ -80,13 +81,13 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) } } - // (b+c).a = (b.a) + (c.a) + -- (b+c).a = (b.a) + (c.a) top relation EqualByDistributionLaw2 { p:exprMM::Expr; emptySequence:Sequence(exprMM::Expr); - replace domain expr1 + /*replace*/ domain expr1 e1:And { expr = e1s:Sequence(Expr) @@ -97,12 +98,12 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) { b:Expr{parent = e2}, c:Expr{parent = e2} - ++ emptySequence // To ensures that OR only has two operands. + ++ emptySequence -- To ensures that OR only has two operands. }, parent = e2 }, a:Expr{parent = e1} - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = p } @@ -140,7 +141,7 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) when { - not EqualByDistributionLaw1(e1, _); // lest (a+b).(c+d) transformed twice! + not EqualByDistributionLaw1(e1, _); -- lest (a+b).(c+d) transformed twice! } where @@ -149,13 +150,13 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) } } - // ~(a+b) = ~a.~b + -- ~(a+b) = ~a.~b top relation EqualByDeMorganLaw1 { p:exprMM::Expr; emptySequence:Sequence(exprMM::Expr); - replace domain expr1 + /*replace*/ domain expr1 e1:Not { expr = e1s:Sequence(Expr) @@ -166,11 +167,11 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) { a:Expr{parent = e2}, b:Expr{parent = e2} - ++ emptySequence // To ensures that OR only has two operands. + ++ emptySequence -- To ensures that OR only has two operands. }, parent = e1 } - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = p } @@ -205,13 +206,13 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) }; } - // ~(a.b) = ~a+~b + -- ~(a.b) = ~a+~b top relation EqualByDeMorganLaw2 { p:exprMM::Expr; emptySequence:Sequence(exprMM::Expr); - replace domain expr1 + /*replace*/ domain expr1 e1:Not { expr = e1s:Sequence(Expr) @@ -222,11 +223,11 @@ transformation DNF_bbox(expr1:exprMM, expr2:exprMM) { a:Expr{parent = e2}, b:Expr{parent = e2} - ++ emptySequence // To ensure that AND only has two operands. + ++ emptySequence -- To ensure that AND only has two operands. }, parent = e1 } - ++ emptySequence // To ensure that NOT only has one operand. + ++ emptySequence -- To ensure that NOT only has one operand. }, parent = p } diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/HstmToStm/hstmtostm.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/HstmToStm/hstmtostm.qvtr index 705bd86c4..aed3b7f16 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/HstmToStm/hstmtostm.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/HstmToStm/hstmtostm.qvtr @@ -9,6 +9,9 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import hstmMM_p : 'hstmMM.emof'::hstmMM_p; +import stmMM_p : 'stmMM.emof'::stmMM_p; + transformation HstmToStm(hstm:hstmMM_p, stm:stmMM_p) { key hstmMM_p::State {name}; @@ -30,7 +33,7 @@ transformation HstmToStm(hstm:hstmMM_p, stm:stmMM_p) endif } - top relation LStateToState // map each Class to Table + top relation LStateToState -- map each Class to Table { n : String; @@ -45,7 +48,7 @@ transformation HstmToStm(hstm:hstmMM_p, stm:stmMM_p) }; } - top relation CStateToState // map each Class to Table + top relation CStateToState -- map each Class to Table { tn : String; ms1: hstmMM_p::State; diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_1.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_1.qvtr index 49f4f8d05..4d28e66df 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_1.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_1.qvtr @@ -9,6 +9,9 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import umlMM : 'umlMM.emof'::umlMM; +import rdbmsMM : 'rdbmsMM.emof'::rdbmsMM; + import UmlToRdbms_2; transformation UmlToRdbms_1(uml:umlMM, rdbms:rdbmsMM) diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_2.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_2.qvtr index e16566658..b4346934d 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_2.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/Import/UmlToRdbms_2.qvtr @@ -9,6 +9,8 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import umlMM : 'umlMM.emof'::umlMM; +import rdbmsMM : 'rdbmsMM.emof'::rdbmsMM; transformation UmlToRdbms_2(uml:umlMM, rdbms:rdbmsMM) { diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/MiToSi/mitosi.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/MiToSi/mitosi.qvtr index cebaf8d33..4d100249f 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/MiToSi/mitosi.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/MiToSi/mitosi.qvtr @@ -9,6 +9,9 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import umlmmmi : 'umlmmmi.emof'::umlmmmi; +import javammsi : 'javammsi.emof'::javammsi; + transformation MiToSi(uml:umlmmmi, java:javammsi) { key umlmmmi::Class {name}; diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStm/SeqToStm.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStm/SeqToStm.qvtr index 193a5d32d..d39d47237 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStm/SeqToStm.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStm/SeqToStm.qvtr @@ -9,6 +9,8 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import SeqMM : 'SeqMM.emof'::SeqMM; +import StmcMM : 'StmcMM.emof'::StmcMM; transformation SeqToStm(seqDgm: SeqMM, stm: StmcMM) { diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStmc_CT/SeqToStmc.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStmc_CT/SeqToStmc.qvtr index 968335cce..330f1f41e 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStmc_CT/SeqToStmc.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/SeqToStmc_CT/SeqToStmc.qvtr @@ -9,6 +9,9 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import SeqMM : 'SeqMM.emof'::SeqMM_CT; +import StmcMM : 'StmcMM.emof'::StmcMM; + transformation SeqToStmc(seqDgm:SeqMM, stmc:StmcMM) { top relation LifeLineToStateMachine diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRdbms/UmlToRdbms.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRdbms/UmlToRdbms.qvtr index d84185ea4..ad628de55 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRdbms/UmlToRdbms.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRdbms/UmlToRdbms.qvtr @@ -9,6 +9,8 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import umlMM : 'umlMM.emof'::umlMM; +import rdbmsMM : 'rdbmsMM.emof'::rdbmsMM; transformation UmlToRdbms(uml:umlMM, rdbms:rdbmsMM) { diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRel/UmlToRel.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRel/UmlToRel.qvtr index 5735d87bb..37e0463f1 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRel/UmlToRel.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.modelmorf/qvtrsrc/UmlToRel/UmlToRel.qvtr @@ -9,6 +9,8 @@ * TCS - initial implementation for ModelMorf * E.D.Willink - alignment with evolved specification *******************************************************************************/ +import umlmm : 'UmlMM.emof'::umlMM2; +import relmm : 'RelMM.emof'::relMM2; transformation UmlToRel(uml:umlmm, rdbms:relmm) { diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/FlatRelToCore.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/FlatRelToCore.qvtr index c65078dde..b56991ace 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/FlatRelToCore.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/FlatRelToCore.qvtr @@ -6,13 +6,16 @@ -- http://www.eclipse.org/legal/epl-v10.html -- -- Contributors: --- S.Reddy - Section 10.3 of the QVT 1.0 specification +-- S.Reddy - Section 10.3 of the OMG MOF-QVT 1.0 specification -- E.D.Willink - contributions to drafts of the above +-- E.D.Willink - adaptation to comply with QVT specification -------------------------------------------------------------------------------- -transformation relToCore(relations:QVTMM, core:QVTMM) +import QVTMM : 'FlatQVT.emof'::FlatQVT; + +transformation relToCore(relations:{QVTMM}, core:{QVTMM}) { -key QVTMM::Mapping{name, _'transformation'}; +key QVTMM::Mapping{name, transformation}; key QVTMM::GuardPattern{area}; key QVTMM::BottomPattern{area}; key QVTMM::Variable{name, type}; @@ -20,7 +23,7 @@ key QVTMM::Type{name}; key QVTMM::Class{name}; key QVTMM::Property{name, class}; key QVTMM::CoreDomain{name, rule}; -key QVTMM::TypedModel{name, usedPackage, _'transformation'}; +key QVTMM::TypedModel{name, usedPackage, transformation}; key QVTMM::Package{name}; key QVTMM::Transformation{name}; key QVTMM::Operation{name}; @@ -28,7 +31,7 @@ key QVTMM::Predicate{pattern, conditionExpression}; query getSharedDomainVars(r:QVTMM::Relation):Set(QVTMM::Variable) { - r._'domain'->iterate(d; vars: Set(QVTMM::Variable) = Set{} | + r.domain->iterate(d; vars: Set(QVTMM::Variable) = Set{} | if (vars->isEmpty()) then vars->union(d.oclAsType(QVTMM::RelationDomain).pattern.bindsTo) @@ -43,7 +46,7 @@ query getWhenVars(r:QVTMM::Relation):Set(QVTMM::Variable) let vs:Set(QVTMM::Variable) = Set{} in - r._'domain'->iterate(d; vars: Set(QVTMM::Variable) = Set{} | + r.domain->iterate(d; vars: Set(QVTMM::Variable) = Set{} | if (vars->isEmpty()) then vars->union(d.oclAsType(QVTMM::RelationDomain).pattern.bindsTo) @@ -158,7 +161,7 @@ top relation RelationToTraceClass domain relations r:Relation { name = rn, - _'domain' = rd:RelationDomain { + domain = rd:RelationDomain { pattern = rdp:DomainPattern { templateExpression = t:ObjectTemplateExp { bindsTo = tv:Variable { @@ -266,14 +269,14 @@ top relation TopLevelRelationToMappingForChecking mt: QVTMM::Transformation; domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = true, name = rn } { - not r._'domain'->exists(d| d.isEnforceable = true) + not r.domain->exists(d| d.isEnforceable = true) }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn, guardPattern = mg:GuardPattern { area = m @@ -288,10 +291,10 @@ top relation TopLevelRelationToMappingForChecking RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | acc->including(md.oclAsType(QVTMM::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; sharedDomainVars = getSharedDomainVars(r); unsharedWhereVars = @@ -315,7 +318,7 @@ top relation TopLevelRelationToMappingForChecking relation RWherePatternToMPattern { domain relations r:Relation{ - _'where' = wherep:Pattern { } + where = wherep:Pattern { } }; enforce domain core mp:Pattern {}; where { @@ -413,17 +416,17 @@ top relation TopLevelRelationToMappingForEnforcement mt: QVTMM::Transformation; domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = true, name = rn, - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { rd:RelationDomain { isEnforceable = true, name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = dp:DomainPattern { bindsTo = domainVars:Set(Variable) {}, @@ -435,7 +438,7 @@ top relation TopLevelRelationToMappingForEnforcement } }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn+'_'+dn, guardPattern = mg:GuardPattern { area = m @@ -445,13 +448,13 @@ top relation TopLevelRelationToMappingForEnforcement tcv:RealizedVariable {} ++ mbVars } }, - _'domain' = md:CoreDomain { + domain = md:CoreDomain { name = dn, isEnforceable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = dg:GuardPattern { area = md @@ -465,15 +468,15 @@ top relation TopLevelRelationToMappingForEnforcement RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | acc->including(md.oclAsType(QVTMM::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; -- Exclude where clause relation calls. -- The predicate corresponding to a where clause relation call is included not in this -- mapping but in the one corresponding to the invoked relation (refer to rule 2.6.1) - rpSet = r._'where'.predicate->reject(p | + rpSet = r.where.predicate->reject(p | p.conditionExpression.oclIsTypeOf(QVTMM::RelationCallExp)); oppositeDomainVars = rOppositeDomains->iterate(d; vars: Set(QVTMM::Variable) = Set{} | @@ -540,21 +543,21 @@ top relation InvokedRelationToMappingForChecking whereVars: Set(QVTMM::Variable); domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = false, name = rn, - relationCallExp = ri:RelationCallExp { - predicate = p:Predicate { + RelationCallExp = ri:RelationCallExp { + Predicate = p:Predicate { pattern = pt:Pattern { whereOwner = ir:Relation {name = irn} } } } } { - not r._'domain'->exists(d| d.isEnforceable = true) + not r.domain->exists(d| d.isEnforceable = true) }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn+'_'+irn, guardPattern = mg:GuardPattern { area = m @@ -569,10 +572,10 @@ top relation InvokedRelationToMappingForChecking RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | acc->including(md.oclAsType(QVTMM::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; sharedDomainVars = getSharedDomainVars(r); unsharedWhereVars = (whereVars - whenVars - allDomainVars)->union(sharedDomainVars); @@ -631,24 +634,24 @@ top relation InvokedRelationToMappingForEnforcement mt: QVTMM::Transformation; domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = false, name = rn, - relationCallExp = ri:RelationCallExp { - predicate = p:Predicate { + RelationCallExp = ri:RelationCallExp { + Predicate = p:Predicate { pattern = pt:Pattern { whereOwner = ir:Relation {name = irn} } } }, - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { rd:RelationDomain { isEnforceable = true, name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = dp:DomainPattern { bindsTo = domainVars:Set(Variable) {}, @@ -660,7 +663,7 @@ top relation InvokedRelationToMappingForEnforcement } }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn+'_'+irn+'_'+dn, guardPattern = mg:GuardPattern { area = m @@ -670,13 +673,13 @@ top relation InvokedRelationToMappingForEnforcement tcv:RealizedVariable {} ++ mbVars } }, - _'domain' = md:CoreDomain { + domain = md:CoreDomain { name = dn, isEnforceable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = dg:GuardPattern { bindsTo = dgVars:Set(Variable) {} @@ -690,15 +693,15 @@ top relation InvokedRelationToMappingForEnforcement RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | acc->including(md.oclAsType(QVTMM::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; -- Exclude where clause relation calls. -- The predicate corresponding to a where clause relation call is included not in this -- mapping but in the one corresponding to the invoked relation (refer to rule 2.6.1) - rpSet = r._'where'.predicate->reject(p | + rpSet = r.where.predicate->reject(p | p.conditionExpression.oclIsTypeOf(QVTMM::RelationCallExp)); oppositeDomainVars = rOppositeDomains->iterate(d; vars: Set(QVTMM::Variable) = Set{} | @@ -752,13 +755,13 @@ relation RDomainToMDomainForChecking mt: QVTMM::Transformation; domain relations r:Relation { - _'domain' = rd:RelationDomain { + domain = rd:RelationDomain { name = dn, isCheckable = true, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = dp:DomainPattern { bindsTo = domainVars:Set(Variable){}, @@ -770,13 +773,13 @@ relation RDomainToMDomainForChecking bottomPattern = mb:BottomPattern { area = m }, - _'domain' = md:CoreDomain { + domain = md:CoreDomain { name = dn, isCheckable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = dg:GuardPattern { area = md @@ -790,7 +793,7 @@ relation RDomainToMDomainForChecking RelationalTransformationToMappingTransformation(rt, mt); } where { - whenVars = r._'when'.bindsTo; + whenVars = r.when.bindsTo; sharedDomainVars = getSharedDomainVars(r); domainVarsSharedWithWhen = domainVars->intersection(whenVars); domainBottomUnSharedVars = domainVars - whenVars - sharedDomainVars; @@ -826,13 +829,13 @@ relation IROppositeDomainsToMappingForEnforcement domain relations oppDomainSeq:Sequence(Element) { r:Relation { - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { ord:RelationDomain { -- opposite domain name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = rt + transformation = rt }, isCheckable = c, pattern = dp:DomainPattern { @@ -851,12 +854,12 @@ relation IROppositeDomainsToMappingForEnforcement ord <> rd }; enforce domain core m:Mapping { - _'domain' = cd:CoreDomain { + domain = cd:CoreDomain { name = dn, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, isCheckable = c, isEnforceable = false, @@ -875,7 +878,7 @@ relation IROppositeDomainsToMappingForEnforcement RelationalTransformationToMappingTransformation(rt, mt); } where { - whenVars = r._'when'.bindsTo; + whenVars = r.when.bindsTo; domainTopVars = domainVars->intersection(whenVars)->including(tev); sharedDomainVars = getSharedDomainVars(r); domainBottomUnSharedVars = (domainVars - whenVars - sharedDomainVars)->excluding(tev); @@ -910,13 +913,13 @@ relation TROppositeDomainsToMappingForEnforcement domain relations oppDomainSeq:Sequence(Element) { r:Relation { - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { ord:RelationDomain { name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = rt + transformation = rt }, isCheckable = c, pattern = dp:DomainPattern { @@ -932,16 +935,17 @@ relation TROppositeDomainsToMappingForEnforcement ord <> rd }; enforce domain core m:Mapping { - _'domain' = cd:CoreDomain { + domain = cd:CoreDomain { name = dn, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, isCheckable = c, isEnforceable = false, guardPattern = dg:GuardPattern { + bindsTo = dgVars:Set(Variable) {}, area = cd }, bottomPattern = db:BottomPattern { @@ -953,7 +957,7 @@ relation TROppositeDomainsToMappingForEnforcement } }; where { - whenVars = r._'when'.bindsTo; + whenVars = r.when.bindsTo; domainTopVars = domainVars->intersection(whenVars); sharedDomainVars = getSharedDomainVars(r); domainBottomUnSharedVars = domainVars - whenVars - sharedDomainVars; @@ -975,13 +979,13 @@ relation RWhenPatternToMGuardPattern unsharedWhenVars: Set(QVTMM::Variable); domain relations r:Relation{ - _'when' = whenp:Pattern { + when = whenp:Pattern { bindsTo = whenVars:Set(Variable) {} } }; enforce domain core mg:GuardPattern {}; where { - allDomainVars = r._'domain'->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(QVTMM::RelationDomain)=Set{} | acc->including(md.oclAsType(QVTMM::RelationDomain))).pattern.bindsTo->asSet(); unsharedWhenVars = whenVars - allDomainVars; @@ -1085,7 +1089,7 @@ relation RWhenRelCallToMGuard predicate = pd:Predicate { conditionExpression = e:RelationCallExp { referredRelation = r:Relation { - _'domain' = dseq:Sequence(RelationDomain) {} + domain = dseq:Sequence(RelationDomain) {} }, argument = aseq:Sequence(VariableExp) {} } @@ -1150,7 +1154,7 @@ relation RInvokerToMGuard argument = aseq:Sequence(VariableExp) {} }, r:Relation { -- invoked relation - _'domain' = dseq:Sequence(RelationDomain) {} + domain = dseq:Sequence(RelationDomain) {} } ++ _ }; @@ -1244,10 +1248,8 @@ relation RDomainToMDBottomForEnforcement } }; where { - predicatesWithoutVarBindings = rdtVarsSeq->at(2)->iterate(md; acc:Set(QVTMM::Predicate)=Set{} | - acc->including(md.oclAsType(QVTMM::Predicate))); - unboundDomainVars = rdtVarsSeq->at(3)->iterate(md; acc:Set(QVTMM::Variable)=Set{} | - acc->including(md.oclAsType(QVTMM::Variable))); + rdtVarsSeq->at(2) = predicatesWithoutVarBindings; + rdtVarsSeq->at(3) = unboundDomainVars; remainingUnBoundDomainVars = unboundDomainVars - Set{v}; predicatesWithVarBindings = filterOutPredicatesThatReferToVars( @@ -1335,8 +1337,7 @@ relation RDomainToMBottomPredicateForEnforcement RelationDomainToTraceClassVar(rdSeq, tcv); RVarToMVar(v, mv); - predicatesWithoutVarBindings = rdtVarsSeq->at(2)->iterate(md; acc:Set(QVTMM::Predicate)=Set{} | - acc->including(md.oclAsType(QVTMM::Predicate))); + rdtVarsSeq->at(2) = predicatesWithoutVarBindings; rdtVarsSeq->at(3) = unboundDomainVars; remainingUnBoundDomainVars = unboundDomainVars - Set{v}; @@ -1381,7 +1382,7 @@ relation RDomainToMDBottomForEnforcementOfIdentityProp value = e:OclExpression {} } } { - c._'key'.part->includes(pp) + c.Key.part->includes(pp) } ++ _ }; @@ -1419,7 +1420,7 @@ relation RDomainToMDBottomForEnforcementOfIdentityPropObject value = e:ObjectTemplateExp {bindsTo = tv:Variable{}} } } { - c._'key'.part->includes(pp) + c.Key.part->includes(pp) } ++ _ }; @@ -1567,7 +1568,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropPrimitive domain relations rtdSeq:Sequence(Element) { r:Relation{ - _'transformation' = rt:RelationalTransformation{} + transformation = rt:RelationalTransformation{} }, te:ObjectTemplateExp { bindsTo = v:Variable {type = c:Class {}}, @@ -1576,7 +1577,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropPrimitive value = e:OclExpression {} } } { - (not c._'key'.part->includes(pp)) and (not e.oclIsKindOf(TemplateExp)) + (not c.Key.part->includes(pp)) and (not e.oclIsKindOf(TemplateExp)) }, rd:RelationDomain { pattern = rdp:DomainPattern { @@ -1588,7 +1589,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropPrimitive enforce domain core m:Mapping { local = cm:Mapping { name = m.name+'_forNonIdentityProp', - _'transformation' = mt:Transformation{}, + transformation = mt:Transformation{}, bottomPattern = bp:BottomPattern { assignment = a:PropertyAssignment { slotExpression = ve:VariableExp{referredVariable = mv}, @@ -1620,7 +1621,7 @@ relation RDomainToMComposedMappingGuard domain relations rtdSeq:Sequence(Element) { r:Relation{ - _'transformation' = rt:RelationalTransformation{} + transformation = rt:RelationalTransformation{} }, te:ObjectTemplateExp {}, rd:RelationDomain { @@ -1628,7 +1629,7 @@ relation RDomainToMComposedMappingGuard typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = rdp:DomainPattern { templateExpression = rdt:ObjectTemplateExp {} @@ -1655,12 +1656,12 @@ relation RDomainToMComposedMappingGuard } } }, - _'domain' = cd:CoreDomain { + domain = cd:CoreDomain { name = dn, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = cmdg:GuardPattern { bindsTo = mv @@ -1689,14 +1690,14 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropObject domain relations rdtVarsSeq:Sequence(Set(Element)) { rdtSet:Set(Element) { r:Relation{ - _'transformation' = rt:RelationalTransformation{} + transformation = rt:RelationalTransformation{} }, rd:RelationDomain { name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt } }, te:ObjectTemplateExp { @@ -1706,7 +1707,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropObject value = pte:ObjectTemplateExp {bindsTo = pv:Variable {}} } } { - not c._'key'.part->includes(pp) + not c.Key.part->includes(pp) } ++ _ } @@ -1715,14 +1716,14 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropObject enforce domain core m:Mapping { local = cm:Mapping { name = m.name+'_for_'+pv.name, - _'transformation' = mt:Transformation{}, - _'domain' = cd:CoreDomain { + transformation = mt:Transformation{}, + domain = cd:CoreDomain { name = dn, isEnforceable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, bottomPattern = cmdb:BottomPattern { realizedVariable = mpv:RealizedVariable {}, @@ -1745,10 +1746,8 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropObject RVarToMVar(v, mv); RVarToMRealizedVar(pv, mpv); - predicatesWithoutVarBindings = rdtVarsSeq->at(2)->iterate(md; acc:Set(QVTMM::Predicate)=Set{} | - acc->including(md.oclAsType(QVTMM::Predicate))); - unboundDomainVars = rdtVarsSeq->at(3)->iterate(md; acc:Set(QVTMM::Variable)=Set{} | - acc->including(md.oclAsType(QVTMM::Variable))); + rdtVarsSeq->at(2) = predicatesWithoutVarBindings; + rdtVarsSeq->at(3) = unboundDomainVars; rdtSetNext = Set{r, rd, pte}; rdtVarsSeqRest = Sequence{rdtSetNext, predicatesWithoutVarBindings, unboundDomainVars}; @@ -1896,7 +1895,7 @@ relation RDomainVarsToTraceClassProps domain relations rd:RelationDomain { rule = r:Relation{}, pattern = dp:DomainPattern { - bindsTo = domainVars:Set(Variable) {dv:Variable {templateExp = te: TemplateExp{}}++_} + bindsTo = domainVars:Set(Variable) {dv:Variable {TemplateExp = te: TemplateExp{}}++_} } }; enforce domain core mb:BottomPattern { @@ -1922,7 +1921,7 @@ relation ROppositeDomainVarsToTraceClassProps r:Relation {}, rd:RelationDomain {} ++ _ }, - domainVars:Set(Variable) {dv:Variable{templateExp = te:TemplateExp{}} ++ _} + domainVars:Set(Variable) {dv:Variable{TemplateExp = te:TemplateExp{}} ++ _} ++ _ }; enforce domain core mb:BottomPattern { @@ -1980,7 +1979,7 @@ relation RRelImplToMBottomEnforcementOperation relation RRelDomainsToMOpCallArg { domain relations r:Relation { - _'domain' = rd:RelationDomain { + domain = rd:RelationDomain { pattern = p:DomainPattern{bindsTo = rv:Variable{}} } }; @@ -2033,9 +2032,7 @@ relation RelationDomainToTraceClassVar relation RExpToMExp { domain relations re:OclExpression{}; - enforce domain core me:OclExpression{} implementedby CopyOclExpession(re, me); + enforce domain core me:OclExpression{} /*implementedby CopyOclExpession(re, me)*/; } -} - - +}
\ No newline at end of file diff --git a/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/RelToCore.qvtr b/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/RelToCore.qvtr index 400f4f220..45968e006 100644 --- a/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/RelToCore.qvtr +++ b/examples/org.eclipse.qvtd.examples.qvtrelation.reltocore/qvtrsrc/RelToCore.qvtr @@ -10,10 +10,17 @@ -- E.D.Willink - contributions to drafts of the above -- E.D.Willink - adaptation to comply with QVT specification -------------------------------------------------------------------------------- +import emof : 'platform:/resource/org.eclipse.qvt/model/ecore/EMOF.ecore'::EMOF; +import essentialocl : 'platform:/resource/org.eclipse.qvt/model/ecore/EssentialOCL.ecore'::EssentialOCL; +import qvtbase : 'platform:/resource/org.eclipse.qvt/model/ecore/QVTBase.ecore'::QVTBase; +import qvttemplate : 'platform:/resource/org.eclipse.qvt/model/ecore/QVTTemplate.ecore'::QVTTemplate; +import qvtrelation : 'platform:/resource/org.eclipse.qvt/model/ecore/QVTRelation.ecore'::QVTRelation; +import qvtcore : 'platform:/resource/org.eclipse.qvt/model/ecore/QVTCore.ecore'::QVTCore; + transformation relToCore(relations:{qvtrelation,qvttemplate,qvtbase,essentialocl,emof}, core:{qvtcore,qvtbase,essentialocl,emof}) { -key qvtcore::Mapping{name, _'transformation'}; +key qvtcore::Mapping{name, transformation}; key qvtcore::GuardPattern{area}; key qvtcore::BottomPattern{area}; key essentialocl::Variable{name, type}; @@ -21,7 +28,7 @@ key emof::Type{name}; key emof::Class{name}; key emof::Property{name, class}; key qvtcore::CoreDomain{name, rule}; -key qvtbase::TypedModel{name, usedPackage, _'transformation'}; +key qvtbase::TypedModel{name, usedPackage, transformation}; key emof::Package{name}; key qvtbase::Transformation{name}; key emof::Operation{name}; @@ -29,7 +36,7 @@ key qvtbase::Predicate{pattern, conditionExpression}; query getSharedDomainVars(r:qvtrelation::Relation):Set(essentialocl::Variable) { - r._'domain'->iterate(d; vars: Set(essentialocl::Variable) = Set{} | + r.domain->iterate(d; vars: Set(essentialocl::Variable) = Set{} | if (vars->isEmpty()) then vars->union(d.oclAsType(qvtrelation::RelationDomain).pattern.bindsTo) @@ -44,7 +51,7 @@ query getWhenVars(r:qvtrelation::Relation):Set(essentialocl::Variable) let vs:Set(essentialocl::Variable) = Set{} in - r._'domain'->iterate(d; vars: Set(essentialocl::Variable) = Set{} | + r.domain->iterate(d; vars: Set(essentialocl::Variable) = Set{} | if (vars->isEmpty()) then vars->union(d.oclAsType(qvtrelation::RelationDomain).pattern.bindsTo) @@ -159,7 +166,7 @@ top relation RelationToTraceClass domain relations r:Relation { name = rn, - _'domain' = rd:RelationDomain { + domain = rd:RelationDomain { pattern = rdp:DomainPattern { templateExpression = t:ObjectTemplateExp { bindsTo = tv:Variable { @@ -267,14 +274,14 @@ top relation TopLevelRelationToMappingForChecking mt: qvtbase::Transformation; domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = true, name = rn } { - not r._'domain'->exists(d| d.isEnforceable = true) + not r.domain->exists(d| d.isEnforceable = true) }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn, guardPattern = mg:GuardPattern { area = m @@ -289,10 +296,10 @@ top relation TopLevelRelationToMappingForChecking RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | acc->including(md.oclAsType(qvtrelation::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; sharedDomainVars = getSharedDomainVars(r); unsharedWhereVars = @@ -316,7 +323,7 @@ top relation TopLevelRelationToMappingForChecking relation RWherePatternToMPattern { domain relations r:Relation{ - _'where' = wherep:Pattern { } + where = wherep:Pattern { } }; enforce domain core mp:Pattern {}; where { @@ -414,17 +421,17 @@ top relation TopLevelRelationToMappingForEnforcement mt: qvtbase::Transformation; domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = true, name = rn, - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { rd:RelationDomain { isEnforceable = true, name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = dp:DomainPattern { bindsTo = domainVars:Set(Variable) {}, @@ -436,7 +443,7 @@ top relation TopLevelRelationToMappingForEnforcement } }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn+'_'+dn, guardPattern = mg:GuardPattern { area = m @@ -446,13 +453,13 @@ top relation TopLevelRelationToMappingForEnforcement tcv:RealizedVariable {} ++ mbVars } }, - _'domain' = md:CoreDomain { + domain = md:CoreDomain { name = dn, isEnforceable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = dg:GuardPattern { area = md @@ -466,15 +473,15 @@ top relation TopLevelRelationToMappingForEnforcement RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | acc->including(md.oclAsType(qvtrelation::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; -- Exclude where clause relation calls. -- The predicate corresponding to a where clause relation call is included not in this -- mapping but in the one corresponding to the invoked relation (refer to rule 2.6.1) - rpSet = r._'where'.predicate->reject(p | + rpSet = r.where.predicate->reject(p | p.conditionExpression.oclIsTypeOf(qvtrelation::RelationCallExp)); oppositeDomainVars = rOppositeDomains->iterate(d; vars: Set(essentialocl::Variable) = Set{} | @@ -541,21 +548,21 @@ top relation InvokedRelationToMappingForChecking whereVars: Set(essentialocl::Variable); domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = false, name = rn, - relationCallExp = ri:RelationCallExp { - predicate = p:Predicate { + RelationCallExp = ri:RelationCallExp { + Predicate = p:Predicate { pattern = pt:Pattern { whereOwner = ir:Relation {name = irn} } } } } { - not r._'domain'->exists(d| d.isEnforceable = true) + not r.domain->exists(d| d.isEnforceable = true) }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn+'_'+irn, guardPattern = mg:GuardPattern { area = m @@ -570,10 +577,10 @@ top relation InvokedRelationToMappingForChecking RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | acc->including(md.oclAsType(qvtrelation::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; sharedDomainVars = getSharedDomainVars(r); unsharedWhereVars = (whereVars - whenVars - allDomainVars)->union(sharedDomainVars); @@ -632,24 +639,24 @@ top relation InvokedRelationToMappingForEnforcement mt: qvtbase::Transformation; domain relations r:Relation { - _'transformation' = rt, + transformation = rt, isTopLevel = false, name = rn, - relationCallExp = ri:RelationCallExp { - predicate = p:Predicate { + RelationCallExp = ri:RelationCallExp { + Predicate = p:Predicate { pattern = pt:Pattern { whereOwner = ir:Relation {name = irn} } } }, - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { rd:RelationDomain { isEnforceable = true, name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = dp:DomainPattern { bindsTo = domainVars:Set(Variable) {}, @@ -661,7 +668,7 @@ top relation InvokedRelationToMappingForEnforcement } }; enforce domain core m:Mapping { - _'transformation' = mt, + transformation = mt, name = rn+'_'+irn+'_'+dn, guardPattern = mg:GuardPattern { area = m @@ -671,13 +678,13 @@ top relation InvokedRelationToMappingForEnforcement tcv:RealizedVariable {} ++ mbVars } }, - _'domain' = md:CoreDomain { + domain = md:CoreDomain { name = dn, isEnforceable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = dg:GuardPattern { bindsTo = dgVars:Set(Variable) {} @@ -691,15 +698,15 @@ top relation InvokedRelationToMappingForEnforcement RelationalTransformationToMappingTransformation(rt, mt); } where { - allDomainVars = r._'domain'->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | acc->including(md.oclAsType(qvtrelation::RelationDomain))).pattern.bindsTo->asSet(); - whenVars = r._'when'.bindsTo; - whereVars = r._'where'.bindsTo; + whenVars = r.when.bindsTo; + whereVars = r.where.bindsTo; -- Exclude where clause relation calls. -- The predicate corresponding to a where clause relation call is included not in this -- mapping but in the one corresponding to the invoked relation (refer to rule 2.6.1) - rpSet = r._'where'.predicate->reject(p | + rpSet = r.where.predicate->reject(p | p.conditionExpression.oclIsTypeOf(qvtrelation::RelationCallExp)); oppositeDomainVars = rOppositeDomains->iterate(d; vars: Set(essentialocl::Variable) = Set{} | @@ -753,13 +760,13 @@ relation RDomainToMDomainForChecking mt: qvtbase::Transformation; domain relations r:Relation { - _'domain' = rd:RelationDomain { + domain = rd:RelationDomain { name = dn, isCheckable = true, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = dp:DomainPattern { bindsTo = domainVars:Set(Variable){}, @@ -771,13 +778,13 @@ relation RDomainToMDomainForChecking bottomPattern = mb:BottomPattern { area = m }, - _'domain' = md:CoreDomain { + domain = md:CoreDomain { name = dn, isCheckable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = dg:GuardPattern { area = md @@ -791,7 +798,7 @@ relation RDomainToMDomainForChecking RelationalTransformationToMappingTransformation(rt, mt); } where { - whenVars = r._'when'.bindsTo; + whenVars = r.when.bindsTo; sharedDomainVars = getSharedDomainVars(r); domainVarsSharedWithWhen = domainVars->intersection(whenVars); domainBottomUnSharedVars = domainVars - whenVars - sharedDomainVars; @@ -827,13 +834,13 @@ relation IROppositeDomainsToMappingForEnforcement domain relations oppDomainSeq:Sequence(Element) { r:Relation { - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { ord:RelationDomain { -- opposite domain name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = rt + transformation = rt }, isCheckable = c, pattern = dp:DomainPattern { @@ -852,12 +859,12 @@ relation IROppositeDomainsToMappingForEnforcement ord <> rd }; enforce domain core m:Mapping { - _'domain' = cd:CoreDomain { + domain = cd:CoreDomain { name = dn, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, isCheckable = c, isEnforceable = false, @@ -876,7 +883,7 @@ relation IROppositeDomainsToMappingForEnforcement RelationalTransformationToMappingTransformation(rt, mt); } where { - whenVars = r._'when'.bindsTo; + whenVars = r.when.bindsTo; domainTopVars = domainVars->intersection(whenVars)->including(tev); sharedDomainVars = getSharedDomainVars(r); domainBottomUnSharedVars = (domainVars - whenVars - sharedDomainVars)->excluding(tev); @@ -911,13 +918,13 @@ relation TROppositeDomainsToMappingForEnforcement domain relations oppDomainSeq:Sequence(Element) { r:Relation { - _'domain' = rds:Set(RelationDomain) { + domain = rds:Set(RelationDomain) { ord:RelationDomain { name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = rt + transformation = rt }, isCheckable = c, pattern = dp:DomainPattern { @@ -933,16 +940,17 @@ relation TROppositeDomainsToMappingForEnforcement ord <> rd }; enforce domain core m:Mapping { - _'domain' = cd:CoreDomain { + domain = cd:CoreDomain { name = dn, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, isCheckable = c, isEnforceable = false, guardPattern = dg:GuardPattern { + bindsTo = dgVars:Set(Variable) {}, area = cd }, bottomPattern = db:BottomPattern { @@ -954,7 +962,7 @@ relation TROppositeDomainsToMappingForEnforcement } }; where { - whenVars = r._'when'.bindsTo; + whenVars = r.when.bindsTo; domainTopVars = domainVars->intersection(whenVars); sharedDomainVars = getSharedDomainVars(r); domainBottomUnSharedVars = domainVars - whenVars - sharedDomainVars; @@ -976,13 +984,13 @@ relation RWhenPatternToMGuardPattern unsharedWhenVars: Set(essentialocl::Variable); domain relations r:Relation{ - _'when' = whenp:Pattern { + when = whenp:Pattern { bindsTo = whenVars:Set(Variable) {} } }; enforce domain core mg:GuardPattern {}; where { - allDomainVars = r._'domain'->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | + allDomainVars = r.domain->iterate(md; acc:Set(qvtrelation::RelationDomain)=Set{} | acc->including(md.oclAsType(qvtrelation::RelationDomain))).pattern.bindsTo->asSet(); unsharedWhenVars = whenVars - allDomainVars; @@ -1086,7 +1094,7 @@ relation RWhenRelCallToMGuard predicate = pd:Predicate { conditionExpression = e:RelationCallExp { referredRelation = r:Relation { - _'domain' = dseq:Sequence(RelationDomain) {} + domain = dseq:Sequence(RelationDomain) {} }, argument = aseq:Sequence(VariableExp) {} } @@ -1151,7 +1159,7 @@ relation RInvokerToMGuard argument = aseq:Sequence(VariableExp) {} }, r:Relation { -- invoked relation - _'domain' = dseq:Sequence(RelationDomain) {} + domain = dseq:Sequence(RelationDomain) {} } ++ _ }; @@ -1379,7 +1387,7 @@ relation RDomainToMDBottomForEnforcementOfIdentityProp value = e:OclExpression {} } } { - c._'key'.part->includes(pp) + c.Key.part->includes(pp) } ++ _ }; @@ -1417,7 +1425,7 @@ relation RDomainToMDBottomForEnforcementOfIdentityPropObject value = e:ObjectTemplateExp {bindsTo = tv:Variable{}} } } { - c._'key'.part->includes(pp) + c.Key.part->includes(pp) } ++ _ }; @@ -1565,7 +1573,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropPrimitive domain relations rtdSeq:Sequence(Element) { r:Relation{ - _'transformation' = rt:RelationalTransformation{} + transformation = rt:RelationalTransformation{} }, te:ObjectTemplateExp { bindsTo = v:Variable {type = c:Class {}}, @@ -1574,7 +1582,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropPrimitive value = e:OclExpression {} } } { - (not c._'key'.part->includes(pp)) and (not e.oclIsKindOf(TemplateExp)) + (not c.Key.part->includes(pp)) and (not e.oclIsKindOf(TemplateExp)) }, rd:RelationDomain { pattern = rdp:DomainPattern { @@ -1586,7 +1594,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropPrimitive enforce domain core m:Mapping { local = cm:Mapping { name = m.name+'_forNonIdentityProp', - _'transformation' = mt:Transformation{}, + transformation = mt:Transformation{}, bottomPattern = bp:BottomPattern { assignment = a:PropertyAssignment { slotExpression = ve:VariableExp{referredVariable = mv}, @@ -1618,7 +1626,7 @@ relation RDomainToMComposedMappingGuard domain relations rtdSeq:Sequence(Element) { r:Relation{ - _'transformation' = rt:RelationalTransformation{} + transformation = rt:RelationalTransformation{} }, te:ObjectTemplateExp {}, rd:RelationDomain { @@ -1626,7 +1634,7 @@ relation RDomainToMComposedMappingGuard typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt }, pattern = rdp:DomainPattern { templateExpression = rdt:ObjectTemplateExp {} @@ -1653,12 +1661,12 @@ relation RDomainToMComposedMappingGuard } } }, - _'domain' = cd:CoreDomain { + domain = cd:CoreDomain { name = dn, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, guardPattern = cmdg:GuardPattern { bindsTo = mv @@ -1687,14 +1695,14 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropObject domain relations rdtVarsSeq:Sequence(Set(Element)) { rdtSet:Set(Element) { r:Relation{ - _'transformation' = rt:RelationalTransformation{} + transformation = rt:RelationalTransformation{} }, rd:RelationDomain { name = dn, typedModel = dir:TypedModel { name = tmn, usedPackage = up:Package{}, - _'transformation' = rt + transformation = rt } }, te:ObjectTemplateExp { @@ -1704,7 +1712,7 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropObject value = pte:ObjectTemplateExp {bindsTo = pv:Variable {}} } } { - not c._'key'.part->includes(pp) + not c.Key.part->includes(pp) } ++ _ } @@ -1713,14 +1721,14 @@ relation RDomainToMDBottomForEnforcementOfNonIdentityPropObject enforce domain core m:Mapping { local = cm:Mapping { name = m.name+'_for_'+pv.name, - _'transformation' = mt:Transformation{}, - _'domain' = cd:CoreDomain { + transformation = mt:Transformation{}, + domain = cd:CoreDomain { name = dn, isEnforceable = true, typedModel = mdir:TypedModel { name = tmn, usedPackage = up, - _'transformation' = mt + transformation = mt }, bottomPattern = cmdb:BottomPattern { realizedVariable = mpv:RealizedVariable {}, @@ -1892,7 +1900,7 @@ relation RDomainVarsToTraceClassProps domain relations rd:RelationDomain { rule = r:Relation{}, pattern = dp:DomainPattern { - bindsTo = domainVars:Set(Variable) {dv:Variable {templateExp = te: TemplateExp{}}++_} + bindsTo = domainVars:Set(Variable) {dv:Variable {TemplateExp = te: TemplateExp{}}++_} } }; enforce domain core mb:BottomPattern { @@ -1918,7 +1926,7 @@ relation ROppositeDomainVarsToTraceClassProps r:Relation {}, rd:RelationDomain {} ++ _ }, - domainVars:Set(Variable) {dv:Variable{templateExp = te:TemplateExp{}} ++ _} + domainVars:Set(Variable) {dv:Variable{TemplateExp = te:TemplateExp{}} ++ _} ++ _ }; enforce domain core mb:BottomPattern { @@ -1976,7 +1984,7 @@ relation RRelImplToMBottomEnforcementOperation relation RRelDomainsToMOpCallArg { domain relations r:Relation { - _'domain' = rd:RelationDomain { + domain = rd:RelationDomain { pattern = p:DomainPattern{bindsTo = rv:Variable{}} } }; @@ -2029,7 +2037,7 @@ relation RelationDomainToTraceClassVar relation RExpToMExp { domain relations re:OclExpression{}; - enforce domain core me:OclExpression{} implementedby CopyOclExpession(re, me); + enforce domain core me:OclExpression{} /*implementedby CopyOclExpession(re, me)*/; } }
\ No newline at end of file |