rule Model2EPackage | |
transform m : ArgoUML!Model | |
to p : Ecore!EPackage { | |
p.name = m.name; | |
p.nsURI = m.name; | |
p.nsPrefix = ""; | |
p.eClassifiers.addAll(m.ownedElement.equivalent()); | |
} | |
rule Class2EClass | |
transform c : ArgoUML!Class | |
to ec : Ecore!EClass { | |
ec.name = c.name; | |
ec.`abstract` = c.isAbstract; | |
} | |
rule Attribute2EAttribute | |
transform a : ArgoUML!Attribute | |
to ea : Ecore!EAttribute { | |
ea.name = a.name; | |
ea.eType = a.type.name.getEDataType(); | |
ea.lowerBound = a.multiplicity.range[0].lower; | |
ea.upperBound = a.multiplicity.range[0].upper; | |
a.owner.equivalent().eStructuralFeatures.add(ea); | |
} | |
rule AssociationEnd2EReference | |
transform ae : ArgoUML!AssociationEnd | |
to er : Ecore!EReference { | |
// We are only interested in | |
// named association ends | |
guard : ae.name.isDefined() | |
er.name = ae.name; | |
er.eType ::= ae.participant; | |
er.lowerBound = ae.multiplicity.range[0].lower; | |
er.upperBound = ae.multiplicity.range[0].upper; | |
ae.getOpposite().participant.equivalent(). | |
eStructuralFeatures.add(er); | |
if (ae.getOpposite().name.isDefined()) { | |
er.eOpposite = ae.getOpposite().equivalent(); | |
} | |
er.containment = (ae.getOpposite().aggregation == ArgoUML!AggregationKind#ak_composite); | |
} | |
rule Generalisation2Extension | |
transform g : ArgoUML!Generalization | |
to nothing : Sequence { | |
g.child.equivalent().eSuperTypes.add(g.parent.equivalent()); | |
} | |
rule Enumeration2EEnum | |
transform e : ArgoUML!Enumeration | |
to ee : Ecore!EEnum { | |
ee.name = e.name; | |
} | |
rule EnumerationLiteral2EEnumLiteral | |
transform l : ArgoUML!EnumerationLiteral | |
to el : Ecore!EEnumLiteral { | |
el.name = l.name; | |
var eLiterals = l.enumeration.equivalent().eLiterals; | |
eLiterals.add(el); | |
el.value = eLiterals.size(); | |
} | |
operation ArgoUML!AssociationEnd getOpposite() { | |
return self.association.connection. | |
selectOne(ae|ae <> self); | |
} | |
@cached | |
operation String getEDataType() { | |
var enumeration = ArgoUML!Enumeration.all.selectOne(e|e.name = self); | |
if (enumeration.isDefined()) { | |
return enumeration.equivalent(); | |
} | |
else { | |
var edt = new Ecore!EDataType; | |
edt.name = self; | |
edt.instanceClassName = "java.lang." + self; | |
Ecore!EPackage.all.first().println().eClassifiers.add(edt); | |
return edt; | |
} | |
} |