Describing Behaviour Models through Reusable, Multilevel, Coupled Model Transformations
Adrian Rutle Fernando Mac´ ıas Francisco Dur´ an Roberto Rodr´ ıguez-Echeverr´ ıa Uwe Wolter November 2, 2016
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Describing Behaviour Models through Reusable, Multilevel, Coupled - - PowerPoint PPT Presentation
Describing Behaviour Models through Reusable, Multilevel, Coupled Model Transformations Adrian Rutle Fernando Mac as Francisco Dur an Roberto Rodr guez-Echeverr a Uwe Wolter November 2, 2016 Fernando Mac as et al.
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Machine
EClass
1-1 Container
EClass
1-1 Part
EClass
1-1 contains@1-2 EReference
EReference in@1-2 EReference creates@1-1 EReference
(a) generic_plant
ghead
GenHead
1-1 ghandle
GenHandle
1-1 c1
Conveyor
1-1 c2
Conveyor
1-1 c3
Conveyor
1-1 t1
Tray
1-1 t2
Tray
1-1 assembler
Assembler
1-1 cout@1-1 cout cout@1-1 cout cout@1-1 cout in@1-1 in@2
(d) hammer_config_1
gleg
GenLeg
1-1 gseat
GenSeat
1-1 b1
Box
1-1 b2
Box
1-1 b3
Box
1-1 gluer
Gluer
1-1
in@1-1 in@2 in@1-1 in@2
(e) stool_config_1
GenLeg
Machine
1-1 Leg
Part
1-1 GenSeat
Machine
1-1 Seat
Part
1-1 Box
Container
1-1 Gluer
Machine
1-1 Stool
Part
1-1 creates@1-1 creates creates@1-1 creates has@1-1 EReference@2 has@1-1 EReference@2
(c) stool_plant
1..1 3..3 GenHandle
Machine
1-1 GenHead
Machine
1-1 Conveyor
Container
1-1 Tray
Container
1-1 Handle
Part
1-1 Head
Part
1-1 Hammer
Part
1-1 Assembler
Machine
1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
(b) hammer_plant
1..1 1..1
Fernando Mac´ ıas et al. Multilevel Coupled MTs
ghead
GenHead
1-1 ghandle
GenHandle
1-1 c1
Conveyor
1-1 c2
Conveyor
1-1 c3
Conveyor
1-1 t1
Tray
1-1 t2
Tray
1-1 assembler
Assembler
1-1 cout@1-1 cout cout@1-1 cout cout@1-1 cout in@1-1 in@2
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Fernando Mac´ ıas et al. Multilevel Coupled MTs
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
ghead GenHead 1-1 ghandle GenHandle 1-1 c1 Conveyor 1-1 c2 Conveyor 1-1 c3 Conveyor 1-1 t1 Tray 1-1 t2 Tray 1-1 assembler Assembler 1-1 cout@1-1 cout cout@1-1 cout cout@1-1 cout in@1-1 in@2
gha
GenHandle
h
Handle
gha
GenHandle
cr:creates FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
ghead GenHead 1-1 ghandle GenHandle 1-1 c1 Conveyor 1-1 c2 Conveyor 1-1 c3 Conveyor 1-1 t1 Tray 1-1 t2 Tray 1-1 assembler Assembler 1-1 cout@1-1 cout cout@1-1 cout cout@1-1 cout in@1-1 in@2
ghe
GenHead
h
Head
ghe
GenHead
cr:creates FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
ghead GenHead 1-1 ghandle GenHandle 1-1 c1 Conveyor 1-1 c2 Conveyor 1-1 c3 Conveyor 1-1 t1 Tray 1-1 t2 Tray 1-1 assembler Assembler 1-1 cout@1-1 cout cout@1-1 cout cout@1-1 cout in@1-1 in@2
ghe
GenHead
h
Head
ghe
GenHead
cr:creates FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
ghead GenHead 1-1 ghandle GenHandle 1-1 c1 Conveyor 1-1 c2 Conveyor 1-1 c3 Conveyor 1-1 t1 Tray 1-1 t2 Tray 1-1 assembler Assembler 1-1 cout@1-1 cout cout@1-1 cout cout@1-1 cout in@1-1 in@2
ghe
GenHead
h
Head
ghe
GenHead
cr:creates FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
EReference in@1-2 EReference creates@1-1 EReference
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
m
Machine
p
Part
m
Machine
cr:creates FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
EReference in@1-2 EReference creates@1-1 EReference
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
m
Machine
p
Part
m
Machine
cr:creates FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
EReference in@1-2 EReference creates@1-1 EReference
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
m
Machine
p
Part
m
Machine
cr:creates FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
EReference in@1-2 EReference creates@1-1 EReference
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
P1
Part
M1
Machine
cr:creates m1
M1
p1
P1
m1
M1
cr:cr META FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
MML MMI MMR L I R MMS MMD MMT S D T MM tL tI tR tS tD tT lc rc mc ic nc fc gc (PO) (PBC)
Machine EClass 1-1 Container EClass 1-1 Part EClass 1-1 contains@1-2 EReferenceEReference in@1-2 EReference creates@1-1 EReference
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
P1
Part
M1
Machine
cr:creates m1
M1
p1
P1
m1
M1
cr:cr META FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
EReference in@1-2 EReference creates@1-1 EReference
GenHandle Machine 1-1 GenHead Machine 1-1 Conveyor Container 1-1 Tray Container 1-1 Handle Part 1-1 Head Part 1-1 Hammer Part 1-1 Assembler Machine 1-1 creates@1-1 creates creates@1-1 creates cout@1-1 EReference@2 has@1-1 EReference@2 has@1-1 EReference@2
P1
Part
M1
Machine
cr:creates m1
M1
p1
P1
m1
M1
cr:cr META FROM TO
Fernando Mac´ ıas et al. Multilevel Coupled MTs
gha
GenHandle
h
Handle
gha
GenHandle
cr:creates FROM TO
m
Machine
p
Part
m
Machine
cr:creates FROM TO
P1
Part
M1
Machine
cr:creates m1
M1
p1
P1
m1
M1
cr:cr META FROM TO
MML MMI MMR L I R MMS MMD MMT S D T MM tL tI tR tS tD tT lc rc mc ic nc fc gc (PO) (PBC)
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Fernando Mac´ ıas et al. Multilevel Coupled MTs
Part
Machine
M1
P1
M1
rule CreatePart { meta { P1: mm [0]! Part M1: mm [0]! Machine cr: mm [0]! Machine.creates [M1.cr = P1] } from { m1: M1 } to { p1: P1 m1: M1 cr: cr [m1.cr = p1] } } Fernando Mac´ ıas et al. Multilevel Coupled MTs
P1
Part
M1
Machine
C1
Container
cr:creates m1
M1
p1
P1
c1
C1
cr:cr
p1
P1
m1
M1
c1
C1
c:contains META FROM TO
rule SendPartOut { meta { P1: mm [0]! Part M1: mm [0]! Machine C1: mm [0]! Container cr: mm [0]! Machine.creates
contains: $mm [0]! Container. contains [M1.cr = P1] } from { p1: P1 m1: M1 c1: C1 cr: cr
[m1.cr = p1] [m1.out = c1] } to { p1: P1 m1: M1 c1: C1
c: contains [m1.out = c1] [c1.c = p1] } } Fernando Mac´ ıas et al. Multilevel Coupled MTs
P1
Part
Conveyor Tray cout c1
Conveyor
p1
P1
t1
Tray
co1:contains@2 cout:cout p1
P1
c1
Conveyor
t1
Tray
cout:cout co2:contains@2 META FROM TO rule TransferPart { meta { P1: mm [0]! Part Conveyor: $mm [1]! Conveyor Tray: $mm [1]! Tray contains: $mm [0]! Container. contains cout: $mm [1]! Conveyor.cout [Conveyor.cout = Tray] } from { p1: P1 t1: Tray c1: Conveyor cout: cout co1: contains [c1.co1 = p1] [c1.cout = t1] } to { p1: P1 t1: T1 c1: C1 cout: cout co2: contains [t1.co2 = p1] [c1.cout = t1] } } Fernando Mac´ ıas et al. Multilevel Coupled MTs
C1
Container
M1
Machine
C2
Container
P1
Part
P2
Part
P3
Part
has has m1
M1
c1
C1
c2
C2
p1
P1
p2
P2
i:in@2
co1:contains@2 co2:contains@2 c1
C1
m1
M1
c2
C2
p3
P3
i:in@2
co3:contains@2 META FROM TO
rule Assemble { meta { P1 , P2 , P3: mm [0]! Part C1 , C2: mm [0]! Container M1: mm [0]! Machine c: $mm [0]! Container.contains in: $mm [0]! Machine.in
has1 , has2: mm [0]! Part.has [P3.has1 = P1] [P3.has2 = P2] } from { p1: P1 , p2: P2 c1: C1 , c2: C2 m1: M1 i: in , o: out , co1: c, co2: c [c1.co1 = p1] [c1.co2 = p2] [m1.i = c1] [m1.out = c2] } to { p3: P3 c1: C1 , c2: C2 m1: M1 i: in , o: out , co3: c [c2.co3 = p3] [m1.i = c1] [m1.o = c2] } } Fernando Mac´ ıas et al. Multilevel Coupled MTs