81 lines
2.0 KiB
Plaintext
81 lines
2.0 KiB
Plaintext
module TGG2loss;
|
|
|
|
-- LOSST: Loss Transformation
|
|
-- TGG: mltgg
|
|
create OUT : LOSS from IN : TGG;
|
|
|
|
helper context LOSS!EClassifier def : qualifiedName : String =
|
|
self.ePackage.qualifiedName + '::' + self.name;
|
|
|
|
helper context LOSS!EPackage def : qualifiedName : String =
|
|
if self.eSuperPackage.oclIsUndefined()
|
|
then self.name
|
|
else self.eSuperPackage.qualifiedName + '::' + self.name
|
|
endif;
|
|
|
|
rule TGGRuleToLossRule {
|
|
from
|
|
s : TGG!TGGRule in IN
|
|
to
|
|
t : LOSS!Rule in OUT (
|
|
name <- s.ruleGroup.name + '-' + s.ruleID,
|
|
leftModel <- s.leftModelDomain.modelObjects,
|
|
rightModel <- s.rightModelDomain.modelObjects,
|
|
transformations <- s.correspondenceDomain.correspondenceNodes
|
|
)
|
|
}
|
|
|
|
rule ModelObjectToLossElement {
|
|
from
|
|
s : TGG!ModelObject in IN
|
|
to
|
|
t : LOSS!Complex in OUT (
|
|
-- TODO Attributes
|
|
-- TODO outgoingLinks
|
|
name <- s.name,
|
|
primitives <- s.outgoingLinks,
|
|
objectType <- s.type,
|
|
className <- s.type.qualifiedName
|
|
)
|
|
}
|
|
|
|
rule ModelLinkToLossCorrLink {
|
|
from
|
|
s : TGG!ModelLink in IN
|
|
to
|
|
t : LOSS!Link in OUT (
|
|
-- TODO Attributes
|
|
-- TODO outgoingLinks
|
|
name <- s.toString(),
|
|
feature <- s.feature,
|
|
referenceTo <- s.target
|
|
)
|
|
}
|
|
|
|
helper context TGG!ModelLink def : isRightElement() : Boolean =
|
|
self.modelDomain.oclIsKindOf(TGG!RightModelDomain);
|
|
|
|
helper context TGG!ModelObject def : isRightElement() : Boolean =
|
|
self.modelDomain.oclIsKindOf(TGG!RightModelDomain);
|
|
|
|
helper context TGG!ModelLink def : isLeftElement() : Boolean =
|
|
self.modelDomain.oclIsKindOf(TGG!LeftModelDomain);
|
|
|
|
helper context TGG!ModelObject def : isLeftElement() : Boolean =
|
|
self.modelDomain.oclIsKindOf(TGG!LeftModelDomain);
|
|
|
|
rule CorrespondenceNodeToLossCorr {
|
|
from
|
|
s : TGG!CorrespondenceNode in IN
|
|
using {
|
|
links : Set(TGG!CorrespondenceLink) = s.outgoingLinks->collect(e | e.target);
|
|
assertion : OclAny = links->collect(it | it.isLeftElement() or it.isRightElement() or 1.0/0.0); -- validation.
|
|
}
|
|
to
|
|
t : LOSS!CorrNode in OUT (
|
|
name <- s.toString(),
|
|
leftLinks <- links->select(it | it.isLeftElement()),
|
|
rightLinks <- links->select(it | it.isRightElement())
|
|
)
|
|
}
|