diff options
Diffstat (limited to 'subprojects/frontend/src/persistence/initialValue.ts')
-rw-r--r-- | subprojects/frontend/src/persistence/initialValue.ts | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/subprojects/frontend/src/persistence/initialValue.ts b/subprojects/frontend/src/persistence/initialValue.ts new file mode 100644 index 00000000..25b24813 --- /dev/null +++ b/subprojects/frontend/src/persistence/initialValue.ts | |||
@@ -0,0 +1,103 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | |||
7 | export default `% Metamodel | ||
8 | |||
9 | abstract class CompositeElement { | ||
10 | contains Region[] regions | ||
11 | } | ||
12 | |||
13 | class Region { | ||
14 | contains Vertex[] vertices opposite region | ||
15 | } | ||
16 | |||
17 | abstract class Vertex { | ||
18 | container Region region opposite vertices | ||
19 | contains Transition[] outgoingTransition opposite source | ||
20 | Transition[] incomingTransition opposite target | ||
21 | } | ||
22 | |||
23 | class Transition { | ||
24 | container Vertex source opposite outgoingTransition | ||
25 | Vertex[1] target opposite incomingTransition | ||
26 | } | ||
27 | |||
28 | abstract class Pseudostate extends Vertex. | ||
29 | |||
30 | abstract class RegularState extends Vertex. | ||
31 | |||
32 | class Entry extends Pseudostate. | ||
33 | |||
34 | class Exit extends Pseudostate. | ||
35 | |||
36 | class Choice extends Pseudostate. | ||
37 | |||
38 | class FinalState extends RegularState. | ||
39 | |||
40 | class State extends RegularState, CompositeElement. | ||
41 | |||
42 | class Statechart extends CompositeElement. | ||
43 | |||
44 | % Constraints | ||
45 | |||
46 | %% Entry | ||
47 | |||
48 | pred entryInRegion(Region r, Entry e) <-> | ||
49 | vertices(r, e). | ||
50 | |||
51 | error noEntryInRegion(Region r) <-> | ||
52 | !entryInRegion(r, _). | ||
53 | |||
54 | error multipleEntryInRegion(Region r) <-> | ||
55 | entryInRegion(r, e1), | ||
56 | entryInRegion(r, e2), | ||
57 | e1 != e2. | ||
58 | |||
59 | error incomingToEntry(Transition t, Entry e) <-> | ||
60 | target(t, e). | ||
61 | |||
62 | error noOutgoingTransitionFromEntry(Entry e) <-> | ||
63 | !source(_, e). | ||
64 | |||
65 | error multipleTransitionFromEntry(Entry e, Transition t1, Transition t2) <-> | ||
66 | outgoingTransition(e, t1), | ||
67 | outgoingTransition(e, t2), | ||
68 | t1 != t2. | ||
69 | |||
70 | %% Exit | ||
71 | |||
72 | error outgoingFromExit(Transition t, Exit e) <-> | ||
73 | source(t, e). | ||
74 | |||
75 | %% Final | ||
76 | |||
77 | error outgoingFromFinal(Transition t, FinalState e) <-> | ||
78 | source(t, e). | ||
79 | |||
80 | %% State vs Region | ||
81 | |||
82 | pred stateInRegion(Region r, State s) <-> | ||
83 | vertices(r, s). | ||
84 | |||
85 | error noStateInRegion(Region r) <-> | ||
86 | !stateInRegion(r, _). | ||
87 | |||
88 | %% Choice | ||
89 | |||
90 | error choiceHasNoOutgoing(Choice c) <-> | ||
91 | !source(_, c). | ||
92 | |||
93 | error choiceHasNoIncoming(Choice c) <-> | ||
94 | !target(_, c). | ||
95 | |||
96 | % Instance model | ||
97 | |||
98 | Statechart(sct). | ||
99 | |||
100 | % Scope | ||
101 | |||
102 | scope node = 20..30, Region = 2..*, Choice = 1..*, Statechart += 0. | ||
103 | `; | ||