File tree Expand file tree Collapse file tree 6 files changed +105
-0
lines changed
mkdocs/docs/playground/examples Expand file tree Collapse file tree 6 files changed +105
-0
lines changed Original file line number Diff line number Diff line change
1
+ @namespace(uri="psl", prefix="")
2
+ package after;
3
+
4
+ class Model {
5
+ val Element[*] instances;
6
+ }
7
+
8
+ class Element {
9
+ attr String name;
10
+ attr int[*] values;
11
+ }
Original file line number Diff line number Diff line change
1
+ @namespace(uri="psl", prefix="")
2
+ package before;
3
+
4
+ class Model {
5
+ val Element[*] instances;
6
+ }
7
+
8
+ class Element {
9
+ attr String name;
10
+ attr int value;
11
+ }
Original file line number Diff line number Diff line change
1
+ rule M2M
2
+ transform s: Source!Model
3
+ to t: Target!Model
4
+ {
5
+ var children = Map {};
6
+
7
+ for (inst in s.instances) {
8
+ if (children.containsKey(inst.name)) {
9
+ children.get(inst.name).values.add(inst.value);
10
+ } else {
11
+ var newInst = inst.equivalent();
12
+ t.instances.add(newInst);
13
+ children.put(inst.name, newInst);
14
+ }
15
+ }
16
+ }
17
+
18
+ @lazy
19
+ rule A2A
20
+ transform s : Source!Element
21
+ to t : Target!Element
22
+ {
23
+ t.name = s.name;
24
+ t.values.add(s.value);
25
+ }
Original file line number Diff line number Diff line change
1
+ pre {
2
+ var values = Map {};
3
+ for (a in Source!Element.all) {
4
+ if (values.containsKey(a.name)) {
5
+ a.~first = false;
6
+ values.get(a.name).add(a.value);
7
+ } else {
8
+ a.~first = true;
9
+ values.put(a.name, OrderedSet { a.value });
10
+ }
11
+ }
12
+ }
13
+
14
+ rule M2M
15
+ transform s: Source!Model
16
+ to t: Target!Model
17
+ {
18
+ t.instances ::= s.instances;
19
+ }
20
+
21
+ rule A2A
22
+ transform s : Source!Element
23
+ to t : Target!Element
24
+ {
25
+ guard: s.~first
26
+
27
+ t.name = s.name;
28
+ t.values = values.get(s.name);
29
+ }
Original file line number Diff line number Diff line change
1
+ ?nsuri: psl
2
+ model:
3
+ - instances:
4
+ - name: x
5
+ - value: 5
6
+ - instances:
7
+ - name: x
8
+ - value: 3
9
+ - instances:
10
+ - name: y
11
+ - value: 11
Original file line number Diff line number Diff line change 315
315
"flexmi" : " callcentre/callcentre.flexmi" ,
316
316
"emfatic" : " callcentre/callcentre.emf" ,
317
317
"secondEmfatic" : " callcentre/minivoicexml.emf"
318
+ },
319
+ {
320
+ "id" : " etl-many2one-pre" ,
321
+ "title" : " Many to One (pre block)" ,
322
+ "language" : " etl" ,
323
+ "program" : " etl-many-to-one/pre-block.etl" ,
324
+ "flexmi" : " etl-many-to-one/source.flexmi" ,
325
+ "emfatic" : " etl-many-to-one/before.emf" ,
326
+ "secondEmfatic" : " etl-many-to-one/after.emf"
327
+ },
328
+ {
329
+ "id" : " etl-many2one-pre" ,
330
+ "title" : " Many to One (lazy rule)" ,
331
+ "language" : " etl" ,
332
+ "program" : " etl-many-to-one/lazy-rule.etl" ,
333
+ "flexmi" : " etl-many-to-one/source.flexmi" ,
334
+ "emfatic" : " etl-many-to-one/before.emf" ,
335
+ "secondEmfatic" : " etl-many-to-one/after.emf"
318
336
}
319
337
]
320
338
},
You can’t perform that action at this time.
0 commit comments