| import SimpleUML: '../UmlToRdbms/SimpleUML.ecore'::simpleuml; | |
| import UmlToUml: 'SimpleUmlToFlatUml.ecore'::simpleumltoflatuml; | |
| transformation hierarchyFlatenning { | |
| origin imports SimpleUML; | |
| final imports SimpleUML; | |
| imports UmlToUml; | |
| } | |
| map UmlElementToUmlElement in hierarchyFlatenning { | |
| origin () { | |
| se:UMLModelElement | | |
| } | |
| enforce final () { | |
| te:UMLModelElement | | |
| } | |
| where () { | |
| realize e2e:UmlModelElementT | | |
| e2e.origin = se; | |
| e2e.final = te; | |
| } | |
| map { | |
| where () { | |
| e2e.name := se.name; | |
| se.name := e2e.name; | |
| e2e.name := te.name; | |
| te.name := e2e.name; | |
| e2e.kind := se.kind; | |
| se.kind := e2e.kind; | |
| e2e.kind := te.kind; | |
| te.kind := e2e.kind; | |
| } | |
| } | |
| } | |
| map PackageToPackage in hierarchyFlatenning refines UmlElementToUmlElement { | |
| origin () { | |
| sp:Package | | |
| } | |
| enforce final () { | |
| realize tp:Package | | |
| } | |
| where () { | |
| realize p2p:PackageT | | |
| } | |
| } | |
| map ClassToClass in hierarchyFlatenning refines UmlElementToUmlElement { | |
| origin (sp:Package |) { | |
| sc:Class | | |
| sc.namespace = sp; | |
| } | |
| enforce final (tp:Package |) { | |
| realize tc:Class | | |
| tc.namespace = tp; | |
| } | |
| where (p2p:PackageT |) { | |
| realize c2c:ClassT | | |
| c2c.origin := sc; | |
| c2c.final := tc; | |
| } | |
| } | |
| map AttributeToAttribute in hierarchyFlatenning refines UmlElementToUmlElement { | |
| origin (sc:Class |) { | |
| sa:Attribute | | |
| sa.owner = sc; | |
| } | |
| enforce final (tc:Class |) { | |
| realize ta:Attribute | | |
| ta.owner := tc; | |
| } | |
| where (c2c:ClassT | c2c.origin = sc; c2c.final = tc;) { | |
| realize a2a:AttributeT | | |
| a2a.owner := c2c; | |
| } | |
| map { | |
| where () { | |
| a2a.type := sa.type; | |
| sa.type := a2a.type; | |
| a2a.type := ta.type; | |
| ta.type = a2a.type; | |
| } | |
| } | |
| } | |
| query hierarchyFlatenning::getAllSupers(cls : SimpleUML::Class) : Set(SimpleUML::Class) { | |
| cls.general->collect(gen | getAllSupers(gen))->including(cls)->asSet() | |
| } | |
| map ClassInheritance in hierarchyFlatenning { | |
| origin (gc:Class | ) { | |
| c:Class | | |
| getAllSupers(c)->includes(gc); | |
| } | |
| map { | |
| where (c2c:ClassT | c2c.origin = c;) { | |
| realize ch:ClassTHierarchy | | |
| ch.classT := c2c; | |
| ch.general := gc; | |
| } | |
| } | |
| } | |
| map AttributeInheritance in hierarchyFlatenning { | |
| origin (gc:Class |) { | |
| sa:Attribute | | |
| sa.owner = gc; | |
| } | |
| enforce final (tc:Class |) { | |
| realize ta:Attribute | | |
| ta.owner := tc; | |
| } | |
| where (c2c:ClassT, ch:ClassTHierarchy | | |
| ch.general = gc; | |
| ch.ClassT = c2c; | |
| c2c.final = tc; | |
| ) { | |
| } | |
| } |