aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/frontend/src/index.tsx
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-12 21:59:50 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-12 21:59:50 +0200
commita2a4696fdbd6440269d576aeba7b25b2ea40d9bf (patch)
tree5cbdf981a51a09fbe162e7748555d213ca518ff4 /subprojects/frontend/src/index.tsx
parentfix: avoid GLOP error message on stderr (diff)
downloadrefinery-a2a4696fdbd6440269d576aeba7b25b2ea40d9bf.tar.gz
refinery-a2a4696fdbd6440269d576aeba7b25b2ea40d9bf.tar.zst
refinery-a2a4696fdbd6440269d576aeba7b25b2ea40d9bf.zip
feat: connect model generator to UI
Diffstat (limited to 'subprojects/frontend/src/index.tsx')
-rw-r--r--subprojects/frontend/src/index.tsx102
1 files changed, 84 insertions, 18 deletions
diff --git a/subprojects/frontend/src/index.tsx b/subprojects/frontend/src/index.tsx
index e8a22e82..4b251a23 100644
--- a/subprojects/frontend/src/index.tsx
+++ b/subprojects/frontend/src/index.tsx
@@ -16,35 +16,101 @@ import RootStore from './RootStore';
16(window as unknown as { fixViteIssue: unknown }).fixViteIssue = styled; 16(window as unknown as { fixViteIssue: unknown }).fixViteIssue = styled;
17 17
18const initialValue = `% Metamodel 18const initialValue = `% Metamodel
19class Person { 19
20 contains Post[] posts opposite author 20abstract class CompositeElement {
21 Person[] friend opposite friend 21 contains Region[] regions
22}
23
24class Region {
25 contains Vertex[] vertices opposite region
26}
27
28abstract class Vertex {
29 container Region region opposite vertices
30 contains Transition[] outgoingTransition opposite source
31 Transition[] incomingTransition opposite target
22} 32}
23 33
24class Post { 34class Transition {
25 container Person author opposite posts 35 container Vertex source opposite outgoingTransition
26 Post replyTo 36 Vertex target opposite incomingTransition
27} 37}
28 38
39abstract class Pseudostate extends Vertex.
40
41abstract class RegularState extends Vertex.
42
43class Entry extends Pseudostate.
44
45class Exit extends Pseudostate.
46
47class Choice extends Pseudostate.
48
49class FinalState extends RegularState.
50
51class State extends RegularState, CompositeElement.
52
53class Statechart extends CompositeElement.
54
29% Constraints 55% Constraints
30error replyToNotFriend(Post x, Post y) <->
31 replyTo(x, y),
32 author(x, xAuthor),
33 author(y, yAuthor),
34 xAuthor != yAuthor,
35 !friend(xAuthor, yAuthor).
36 56
37error replyToCycle(Post x) <-> replyTo+(x, x). 57%% Entry
58
59pred entryInRegion(Region r, Entry e) <->
60 vertices(r, e).
61
62error noEntryInRegion(Region r) <->
63 !entryInRegion(r, _).
64
65error multipleEntryInRegion(Region r) <->
66 entryInRegion(r, e1),
67 entryInRegion(r, e2),
68 e1 != e2.
69
70error incomingToEntry(Transition t, Entry e) <->
71 target(t, e).
72
73error noOutgoingTransitionFromEntry(Entry e) <->
74 !source(_, e).
75
76error multipleTransitionFromEntry(Entry e, Transition t1, Transition t2) <->
77 outgoingTransition(e, t1),
78 outgoingTransition(e, t2),
79 t1 != t2.
80
81%% Exit
82
83error outgoingFromExit(Transition t, Exit e) <->
84 source(t, e).
85
86%% Final
87
88error outgoingFromFinal(Transition t, FinalState e) <->
89 source(t, e).
90
91%% State vs Region
92
93pred stateInRegion(Region r, State s) <->
94 vertices(r, s).
95
96error noStateInRegion(Region r) <->
97 !stateInRegion(r, _).
98
99%% Choice
100
101error choiceHasNoOutgoing(Choice c) <->
102 !source(_, c).
103
104error choiceHasNoIncoming(Choice c) <->
105 !target(_, c).
38 106
39% Instance model 107% Instance model
40friend(a, b).
41author(p1, a).
42author(p2, b).
43 108
44!author(Post::new, a). 109Statechart(sct).
45 110
46% Scope 111% Scope
47scope Post = 10..15, Person += 0. 112
113scope node = 20..30, Region = 2..*, Choice = 1..*, Statechart += 0.
48`; 114`;
49 115
50configure({ 116configure({