Skip to content

Commit 574695f

Browse files
committed
Playground: add many-to-one examples
1 parent 3ccc383 commit 574695f

File tree

6 files changed

+105
-0
lines changed

6 files changed

+105
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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

mkdocs/docs/playground/examples/examples.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,24 @@
315315
"flexmi": "callcentre/callcentre.flexmi",
316316
"emfatic": "callcentre/callcentre.emf",
317317
"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"
318336
}
319337
]
320338
},

0 commit comments

Comments
 (0)