diff options
Diffstat (limited to 'subprojects')
56 files changed, 2531 insertions, 1262 deletions
diff --git a/subprojects/docs/package.json b/subprojects/docs/package.json index 9ecd6820..0771c08d 100644 --- a/subprojects/docs/package.json +++ b/subprojects/docs/package.json | |||
@@ -30,19 +30,19 @@ | |||
30 | }, | 30 | }, |
31 | "homepage": "https://refinery.tools", | 31 | "homepage": "https://refinery.tools", |
32 | "dependencies": { | 32 | "dependencies": { |
33 | "@docusaurus/core": "^3.3.2", | 33 | "@docusaurus/core": "^3.4.0", |
34 | "@docusaurus/plugin-content-docs": "^3.3.2", | 34 | "@docusaurus/plugin-content-docs": "^3.4.0", |
35 | "@docusaurus/plugin-content-pages": "^3.3.2", | 35 | "@docusaurus/plugin-content-pages": "^3.4.0", |
36 | "@docusaurus/plugin-sitemap": "^3.3.2", | 36 | "@docusaurus/plugin-sitemap": "^3.4.0", |
37 | "@docusaurus/theme-classic": "^3.3.2", | 37 | "@docusaurus/theme-classic": "^3.4.0", |
38 | "@docusaurus/theme-common": "^3.3.2", | 38 | "@docusaurus/theme-common": "^3.4.0", |
39 | "@docusaurus/theme-search-algolia": "^3.3.2", | 39 | "@docusaurus/theme-search-algolia": "^3.4.0", |
40 | "@fontsource-variable/jetbrains-mono": "^5.0.21", | 40 | "@fontsource-variable/jetbrains-mono": "^5.0.21", |
41 | "@fontsource-variable/open-sans": "^5.0.29", | 41 | "@fontsource-variable/open-sans": "^5.0.29", |
42 | "@fontsource/open-sans": "^5.0.28", | 42 | "@fontsource/open-sans": "^5.0.28", |
43 | "@material-icons/svg": "^1.0.33", | 43 | "@material-icons/svg": "^1.0.33", |
44 | "@mdx-js/react": "^3.0.1", | 44 | "@mdx-js/react": "^3.0.1", |
45 | "@swc/core": "^1.5.7", | 45 | "@swc/core": "^1.6.1", |
46 | "clsx": "^2.1.1", | 46 | "clsx": "^2.1.1", |
47 | "mdast-util-mdx": "^3.0.0", | 47 | "mdast-util-mdx": "^3.0.0", |
48 | "prism-react-renderer": "^2.3.1", | 48 | "prism-react-renderer": "^2.3.1", |
@@ -55,15 +55,15 @@ | |||
55 | "terser-webpack-plugin": "^5.3.10", | 55 | "terser-webpack-plugin": "^5.3.10", |
56 | "unified": "^11.0.4", | 56 | "unified": "^11.0.4", |
57 | "unist-util-visit": "^5.0.0", | 57 | "unist-util-visit": "^5.0.0", |
58 | "webpack": "^5.91.0" | 58 | "webpack": "^5.92.0" |
59 | }, | 59 | }, |
60 | "devDependencies": { | 60 | "devDependencies": { |
61 | "@docusaurus/mdx-loader": "^3.3.2", | 61 | "@docusaurus/mdx-loader": "^3.4.0", |
62 | "@docusaurus/module-type-aliases": "^3.3.2", | 62 | "@docusaurus/module-type-aliases": "^3.4.0", |
63 | "@docusaurus/types": "^3.3.2", | 63 | "@docusaurus/types": "^3.4.0", |
64 | "@types/babel__core": "^7.20.5", | 64 | "@types/babel__core": "^7.20.5", |
65 | "@types/mdast": "^4.0.4", | 65 | "@types/mdast": "^4.0.4", |
66 | "@types/node": "^20.12.12", | 66 | "@types/node": "^20.14.2", |
67 | "@types/react": "^18.3.3", | 67 | "@types/react": "^18.3.3", |
68 | "@types/react-dom": "^18.3.0", | 68 | "@types/react-dom": "^18.3.0", |
69 | "@types/unist": "^3.0.2" | 69 | "@types/unist": "^3.0.2" |
diff --git a/subprojects/frontend/package.json b/subprojects/frontend/package.json index 859a4b5c..ae1103d6 100644 --- a/subprojects/frontend/package.json +++ b/subprojects/frontend/package.json | |||
@@ -28,13 +28,13 @@ | |||
28 | }, | 28 | }, |
29 | "homepage": "https://refinery.tools", | 29 | "homepage": "https://refinery.tools", |
30 | "dependencies": { | 30 | "dependencies": { |
31 | "@codemirror/autocomplete": "^6.16.0", | 31 | "@codemirror/autocomplete": "^6.16.2", |
32 | "@codemirror/commands": "^6.5.0", | 32 | "@codemirror/commands": "^6.6.0", |
33 | "@codemirror/language": "^6.10.1", | 33 | "@codemirror/language": "^6.10.2", |
34 | "@codemirror/lint": "^6.8.0", | 34 | "@codemirror/lint": "^6.8.0", |
35 | "@codemirror/search": "^6.5.6", | 35 | "@codemirror/search": "^6.5.6", |
36 | "@codemirror/state": "^6.4.1", | 36 | "@codemirror/state": "^6.4.1", |
37 | "@codemirror/view": "^6.26.3", | 37 | "@codemirror/view": "^6.28.1", |
38 | "@emotion/cache": "^11.11.0", | 38 | "@emotion/cache": "^11.11.0", |
39 | "@emotion/react": "^11.11.4", | 39 | "@emotion/react": "^11.11.4", |
40 | "@emotion/serialize": "^1.1.4", | 40 | "@emotion/serialize": "^1.1.4", |
@@ -46,12 +46,12 @@ | |||
46 | "@hpcc-js/wasm": "^2.16.2", | 46 | "@hpcc-js/wasm": "^2.16.2", |
47 | "@lezer/common": "^1.2.1", | 47 | "@lezer/common": "^1.2.1", |
48 | "@lezer/highlight": "^1.2.0", | 48 | "@lezer/highlight": "^1.2.0", |
49 | "@lezer/lr": "^1.4.0", | 49 | "@lezer/lr": "^1.4.1", |
50 | "@material-icons/svg": "^1.0.33", | 50 | "@material-icons/svg": "^1.0.33", |
51 | "@mui/icons-material": "^5.15.18", | 51 | "@mui/icons-material": "^5.15.20", |
52 | "@mui/material": "^5.15.18", | 52 | "@mui/material": "^5.15.20", |
53 | "@mui/system": "^5.15.15", | 53 | "@mui/system": "^5.15.20", |
54 | "@mui/x-data-grid": "^7.5.1", | 54 | "@mui/x-data-grid": "^7.7.0", |
55 | "ansi-styles": "^6.2.1", | 55 | "ansi-styles": "^6.2.1", |
56 | "csstype": "^3.1.3", | 56 | "csstype": "^3.1.3", |
57 | "d3": "^7.9.0", | 57 | "d3": "^7.9.0", |
@@ -64,15 +64,15 @@ | |||
64 | "lodash-es": "^4.17.21", | 64 | "lodash-es": "^4.17.21", |
65 | "loglevel": "^1.9.1", | 65 | "loglevel": "^1.9.1", |
66 | "loglevel-plugin-prefix": "^0.8.4", | 66 | "loglevel-plugin-prefix": "^0.8.4", |
67 | "mobx": "^6.12.3", | 67 | "mobx": "^6.12.4", |
68 | "mobx-react-lite": "^4.0.7", | 68 | "mobx-react-lite": "^4.0.7", |
69 | "ms": "^2.1.3", | 69 | "ms": "^2.1.3", |
70 | "nanoid": "^5.0.7", | 70 | "nanoid": "^5.0.7", |
71 | "notistack": "^3.0.1", | 71 | "notistack": "^3.0.1", |
72 | "react": "^18.3.1", | 72 | "react": "^18.3.1", |
73 | "react-dom": "^18.3.1", | 73 | "react-dom": "^18.3.1", |
74 | "react-resize-detector": "^10.0.1", | 74 | "react-resize-detector": "^11.0.1", |
75 | "svg2pdf.js": "^2.2.3", | 75 | "svg2pdf.js": "^2.2.4", |
76 | "xstate": "^4.38.3", | 76 | "xstate": "^4.38.3", |
77 | "zod": "^3.23.8" | 77 | "zod": "^3.23.8" |
78 | }, | 78 | }, |
@@ -88,7 +88,7 @@ | |||
88 | "@types/lodash-es": "^4.17.12", | 88 | "@types/lodash-es": "^4.17.12", |
89 | "@types/micromatch": "^4.0.7", | 89 | "@types/micromatch": "^4.0.7", |
90 | "@types/ms": "^0.7.34", | 90 | "@types/ms": "^0.7.34", |
91 | "@types/node": "^20.12.12", | 91 | "@types/node": "^20.14.2", |
92 | "@types/pnpapi": "^0.0.5", | 92 | "@types/pnpapi": "^0.0.5", |
93 | "@types/react": "^18.3.3", | 93 | "@types/react": "^18.3.3", |
94 | "@types/react-dom": "^18.3.0", | 94 | "@types/react-dom": "^18.3.0", |
@@ -98,7 +98,7 @@ | |||
98 | "micromatch": "^4.0.7", | 98 | "micromatch": "^4.0.7", |
99 | "pnpapi": "^0.0.0", | 99 | "pnpapi": "^0.0.0", |
100 | "typescript": "5.4.5", | 100 | "typescript": "5.4.5", |
101 | "vite": "^5.2.11", | 101 | "vite": "^5.3.1", |
102 | "vite-plugin-pwa": "^0.20.0", | 102 | "vite-plugin-pwa": "^0.20.0", |
103 | "workbox-window": "^7.1.0" | 103 | "workbox-window": "^7.1.0" |
104 | } | 104 | } |
diff --git a/subprojects/frontend/src/language/folding.ts b/subprojects/frontend/src/language/folding.ts index b4d4ca22..0afabfa0 100644 --- a/subprojects/frontend/src/language/folding.ts +++ b/subprojects/frontend/src/language/folding.ts | |||
@@ -109,7 +109,7 @@ function foldWithSibling(node: SyntaxNode): FoldRange | null { | |||
109 | return null; | 109 | return null; |
110 | } | 110 | } |
111 | 111 | ||
112 | function foldWholeNode(node: SyntaxNode): FoldRange { | 112 | export function foldWholeNode(node: SyntaxNode): FoldRange { |
113 | return { | 113 | return { |
114 | from: node.from, | 114 | from: node.from, |
115 | to: node.to, | 115 | to: node.to, |
diff --git a/subprojects/frontend/src/language/problem.grammar b/subprojects/frontend/src/language/problem.grammar index 7949f90c..a172835d 100644 --- a/subprojects/frontend/src/language/problem.grammar +++ b/subprojects/frontend/src/language/problem.grammar | |||
@@ -63,11 +63,11 @@ statement { | |||
63 | // kw<"fn"> RelationName RelationName ParameterList<Parameter>? | 63 | // kw<"fn"> RelationName RelationName ParameterList<Parameter>? |
64 | // FunctionBody { ("=" sep<OrOp, Case>)? "." } | 64 | // FunctionBody { ("=" sep<OrOp, Case>)? "." } |
65 | // } | | 65 | // } | |
66 | //RuleDefinition { | 66 | RuleDefinition { |
67 | // kw<"rule"> | 67 | (ckw<"decision"> | ckw<"propagation">)? kw<"rule"> |
68 | // RuleName ParameterList<Parameter>? | 68 | RuleName ParameterList<Parameter>? |
69 | // RuleBody { ":" sep<OrOp, Conjunction> "==>" sep<OrOp, Consequent> "." } | 69 | RuleBody { ("<->" sep<OrOp, Conjunction>)? ("==>" sep<OrOp, Consequent>)? "." } |
70 | //} | | 70 | } | |
71 | AtomDeclaration { | 71 | AtomDeclaration { |
72 | kw<"declare">? ckw<"atom"> sep<",", AtomNodeName> "." | 72 | kw<"declare">? ckw<"atom"> sep<",", AtomNodeName> "." |
73 | } | | 73 | } | |
@@ -96,7 +96,12 @@ FeatureDeclaration { | |||
96 | ";"? | 96 | ";"? |
97 | } | 97 | } |
98 | 98 | ||
99 | Parameter { RelationName? VariableName } | 99 | Parameter { |
100 | kw<"candidate">? (kw<"may"> | kw<"must">)? | ||
101 | RelationName? | ||
102 | (AndBinding | StarBinding)? | ||
103 | VariableName | ||
104 | } | ||
100 | 105 | ||
101 | // Use @dynamicPrecedence to prevent a(b) from being parsed as Expr { a } Expr { b } | 106 | // Use @dynamicPrecedence to prevent a(b) from being parsed as Expr { a } Expr { b } |
102 | // instead of Atom { a(b) } | 107 | // instead of Atom { a(b) } |
@@ -125,7 +130,12 @@ BinaryExpr { | |||
125 | } | 130 | } |
126 | 131 | ||
127 | UnaryExpr { | 132 | UnaryExpr { |
128 | !prefix ("+" | "-" | "!" | kw<"count">) Expr | 133 | !prefix |
134 | ( | ||
135 | "+" | "-" | "!" | kw<"count"> | | ||
136 | kw<"candidate"> | kw<"may"> | kw<"must"> | ||
137 | ) | ||
138 | Expr | ||
129 | } | 139 | } |
130 | 140 | ||
131 | CastExpr { !cast Expr kw<"as"> DatatypeName } | 141 | CastExpr { !cast Expr kw<"as"> DatatypeName } |
@@ -136,20 +146,22 @@ Aggregation { | |||
136 | 146 | ||
137 | Atom { RelationName "+"? ParameterList<Expr> } | 147 | Atom { RelationName "+"? ParameterList<Expr> } |
138 | 148 | ||
139 | //Consequent { ("," | Action)+ } | 149 | Consequent { ("," | Action)+ } |
140 | 150 | ||
141 | //Action { | 151 | Action { |
142 | // ckw<"new"> VariableName ("<:" VariableName)? | | 152 | (NotOp | UnknownOp)? RelationName |
143 | // kw<"delete"> VariableName | | 153 | ParameterList<AssertionActionArgument> |
144 | // Literal | 154 | (":" Expr)? |
145 | //} | 155 | } |
146 | 156 | ||
147 | AssertionArgument { NodeName | StarArgument } | 157 | AssertionArgument { NodeName | StarArgument } |
148 | 158 | ||
159 | AssertionActionArgument { VariableName | StarArgument } | ||
160 | |||
149 | Constant { Real | String | StarMult | LogicValue } | 161 | Constant { Real | String | StarMult | LogicValue } |
150 | 162 | ||
151 | ReferenceKind { | 163 | ReferenceKind { |
152 | kw<"refers"> | ckw<"contains"> | kw<"container"> | 164 | kw<"refers"> | ckw<"contains"> | kw<"container"> | kw<"partial"> |
153 | } | 165 | } |
154 | 166 | ||
155 | LogicValue { | 167 | LogicValue { |
@@ -170,7 +182,7 @@ RelationName { QualifiedName ~name } | |||
170 | 182 | ||
171 | DatatypeName { QualifiedName } | 183 | DatatypeName { QualifiedName } |
172 | 184 | ||
173 | //RuleName { QualifiedName } | 185 | RuleName { QualifiedName } |
174 | 186 | ||
175 | AtomNodeName { QualifiedName } | 187 | AtomNodeName { QualifiedName } |
176 | 188 | ||
@@ -247,5 +259,9 @@ sep1<separator, content> { content (separator content)* } | |||
247 | 259 | ||
248 | StarArgument { "*" } | 260 | StarArgument { "*" } |
249 | 261 | ||
262 | StarBinding { "*" } | ||
263 | |||
264 | AndBinding { "&" } | ||
265 | |||
250 | "{" "}" "(" ")" "[" "]" "." ".." "," ":" "->" "<->" "+" "-" "**" "=" "+=" | 266 | "{" "}" "(" ")" "[" "]" "." ".." "," ":" "->" "<->" "+" "-" "**" "=" "+=" |
251 | } | 267 | } |
diff --git a/subprojects/frontend/src/language/problemLanguageSupport.ts b/subprojects/frontend/src/language/problemLanguageSupport.ts index dd5d6347..5ca162d9 100644 --- a/subprojects/frontend/src/language/problemLanguageSupport.ts +++ b/subprojects/frontend/src/language/problemLanguageSupport.ts | |||
@@ -14,7 +14,12 @@ import { | |||
14 | } from '@codemirror/language'; | 14 | } from '@codemirror/language'; |
15 | import { styleTags, tags as t } from '@lezer/highlight'; | 15 | import { styleTags, tags as t } from '@lezer/highlight'; |
16 | 16 | ||
17 | import { foldBlockComment, foldConjunction, foldDeclaration } from './folding'; | 17 | import { |
18 | foldBlockComment, | ||
19 | foldConjunction, | ||
20 | foldDeclaration, | ||
21 | foldWholeNode, | ||
22 | } from './folding'; | ||
18 | import { | 23 | import { |
19 | indentBlockComment, | 24 | indentBlockComment, |
20 | indentDeclaration, | 25 | indentDeclaration, |
@@ -30,11 +35,13 @@ const parserWithMetadata = parser.configure({ | |||
30 | 'module problem class enum pred fn scope': t.definitionKeyword, | 35 | 'module problem class enum pred fn scope': t.definitionKeyword, |
31 | 'import as declare atom multi': t.definitionKeyword, | 36 | 'import as declare atom multi': t.definitionKeyword, |
32 | 'extern datatype aggregator': t.definitionKeyword, | 37 | 'extern datatype aggregator': t.definitionKeyword, |
33 | 'abstract extends refers contains container opposite': t.modifier, | 38 | rule: t.definitionKeyword, |
39 | 'abstract extends refers contains container partial opposite': t.modifier, | ||
34 | default: t.modifier, | 40 | default: t.modifier, |
41 | 'propagation decision': t.modifier, | ||
35 | 'true false unknown error': t.keyword, | 42 | 'true false unknown error': t.keyword, |
43 | 'candidate may must': t.operatorKeyword, | ||
36 | 'count in is': t.operatorKeyword, | 44 | 'count in is': t.operatorKeyword, |
37 | // 'new delete': t.keyword, | ||
38 | NotOp: t.operator, | 45 | NotOp: t.operator, |
39 | UnknownOp: t.operator, | 46 | UnknownOp: t.operator, |
40 | OrOp: t.separator, | 47 | OrOp: t.separator, |
@@ -45,7 +52,7 @@ const parserWithMetadata = parser.configure({ | |||
45 | 'RelationName/QualifiedName': t.typeName, | 52 | 'RelationName/QualifiedName': t.typeName, |
46 | 'DatatypeName/QualifiedName': t.keyword, | 53 | 'DatatypeName/QualifiedName': t.keyword, |
47 | 'AggregatorName/QualifiedName': t.operatorKeyword, | 54 | 'AggregatorName/QualifiedName': t.operatorKeyword, |
48 | // 'RuleName/QualifiedName': t.typeName, | 55 | 'RuleName/QualifiedName': t.typeName, |
49 | 'AtomNodeName/QualifiedName': t.atom, | 56 | 'AtomNodeName/QualifiedName': t.atom, |
50 | 'VariableName/QualifiedName': t.variableName, | 57 | 'VariableName/QualifiedName': t.variableName, |
51 | 'ModuleName/QualifiedName': t.typeName, | 58 | 'ModuleName/QualifiedName': t.typeName, |
@@ -62,7 +69,7 @@ const parserWithMetadata = parser.configure({ | |||
62 | ScopeDeclaration: indentDeclaration, | 69 | ScopeDeclaration: indentDeclaration, |
63 | PredicateBody: indentPredicateOrRule, | 70 | PredicateBody: indentPredicateOrRule, |
64 | // FunctionBody: indentPredicateOrRule, | 71 | // FunctionBody: indentPredicateOrRule, |
65 | // RuleBody: indentPredicateOrRule, | 72 | RuleBody: indentPredicateOrRule, |
66 | BlockComment: indentBlockComment, | 73 | BlockComment: indentBlockComment, |
67 | }), | 74 | }), |
68 | foldNodeProp.add({ | 75 | foldNodeProp.add({ |
@@ -71,9 +78,9 @@ const parserWithMetadata = parser.configure({ | |||
71 | ParameterList: foldInside, | 78 | ParameterList: foldInside, |
72 | PredicateBody: foldInside, | 79 | PredicateBody: foldInside, |
73 | // FunctionBody: foldInside, | 80 | // FunctionBody: foldInside, |
74 | // RuleBody: foldInside, | 81 | RuleBody: foldInside, |
75 | Conjunction: foldConjunction, | 82 | Conjunction: foldConjunction, |
76 | // Consequent: foldWholeNode, | 83 | Consequent: foldWholeNode, |
77 | AtomDeclaration: foldDeclaration, | 84 | AtomDeclaration: foldDeclaration, |
78 | NodeDeclaration: foldDeclaration, | 85 | NodeDeclaration: foldDeclaration, |
79 | ScopeDeclaration: foldDeclaration, | 86 | ScopeDeclaration: foldDeclaration, |
@@ -92,7 +99,7 @@ const problemLanguage = LRLanguage.define({ | |||
92 | }, | 99 | }, |
93 | line: '%', | 100 | line: '%', |
94 | }, | 101 | }, |
95 | indentOnInput: /^\s*(?:\{|\}|\(|\)|->|;|\.)$/, | 102 | indentOnInput: /^\s*(?:\{|\}|\(|\)|->|==>|;|\.)$/, |
96 | }, | 103 | }, |
97 | }); | 104 | }); |
98 | 105 | ||
diff --git a/subprojects/generator-cli/src/main/java/tools/refinery/generator/cli/commands/GenerateCommand.java b/subprojects/generator-cli/src/main/java/tools/refinery/generator/cli/commands/GenerateCommand.java index b1c28df0..0fb97316 100644 --- a/subprojects/generator-cli/src/main/java/tools/refinery/generator/cli/commands/GenerateCommand.java +++ b/subprojects/generator-cli/src/main/java/tools/refinery/generator/cli/commands/GenerateCommand.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -17,9 +17,12 @@ import java.io.IOException; | |||
17 | import java.util.ArrayList; | 17 | import java.util.ArrayList; |
18 | import java.util.List; | 18 | import java.util.List; |
19 | import java.util.Map; | 19 | import java.util.Map; |
20 | import java.util.regex.Pattern; | ||
20 | 21 | ||
21 | @Parameters(commandDescription = "Generate a model from a partial model") | 22 | @Parameters(commandDescription = "Generate a model from a partial model") |
22 | public class GenerateCommand { | 23 | public class GenerateCommand { |
24 | private static final Pattern EXTENSION_REGEX = Pattern.compile("(.+)\\.([^./\\\\]+)"); | ||
25 | |||
23 | @Inject | 26 | @Inject |
24 | private ProblemLoader loader; | 27 | private ProblemLoader loader; |
25 | 28 | ||
@@ -31,6 +34,7 @@ public class GenerateCommand { | |||
31 | private List<String> scopes = new ArrayList<>(); | 34 | private List<String> scopes = new ArrayList<>(); |
32 | private List<String> overrideScopes = new ArrayList<>(); | 35 | private List<String> overrideScopes = new ArrayList<>(); |
33 | private long randomSeed = 1; | 36 | private long randomSeed = 1; |
37 | private int count = 1; | ||
34 | 38 | ||
35 | @Parameter(description = "input path", required = true) | 39 | @Parameter(description = "input path", required = true) |
36 | public void setInputPath(String inputPath) { | 40 | public void setInputPath(String inputPath) { |
@@ -57,21 +61,47 @@ public class GenerateCommand { | |||
57 | this.randomSeed = randomSeed; | 61 | this.randomSeed = randomSeed; |
58 | } | 62 | } |
59 | 63 | ||
64 | @Parameter(names = {"-solution-number", "-n"}, description = "Maximum number of solutions") | ||
65 | public void setCount(int count) { | ||
66 | if (count <= 0) { | ||
67 | throw new IllegalArgumentException("Count must be positive"); | ||
68 | } | ||
69 | this.count = count; | ||
70 | } | ||
71 | |||
60 | public void run() throws IOException { | 72 | public void run() throws IOException { |
73 | if (count > 1 && isStandardStream(outputPath)) { | ||
74 | throw new IllegalArgumentException("Must provide output path if count is larger than 1"); | ||
75 | } | ||
61 | loader.extraPath(System.getProperty("user.dir")); | 76 | loader.extraPath(System.getProperty("user.dir")); |
62 | var problem = isStandardStream(inputPath) ? loader.loadStream(System.in) : loader.loadFile(inputPath); | 77 | var problem = isStandardStream(inputPath) ? loader.loadStream(System.in) : loader.loadFile(inputPath); |
63 | problem = loader.loadScopeConstraints(problem, scopes, overrideScopes); | 78 | problem = loader.loadScopeConstraints(problem, scopes, overrideScopes); |
79 | generatorFactory.partialInterpretationBasedNeighbourhoods(count >= 2); | ||
64 | var generator = generatorFactory.createGenerator(problem); | 80 | var generator = generatorFactory.createGenerator(problem); |
65 | generator.setRandomSeed(randomSeed); | 81 | generator.setRandomSeed(randomSeed); |
82 | generator.setMaxNumberOfSolutions(count); | ||
66 | generator.generate(); | 83 | generator.generate(); |
67 | var solution = generator.serializeSolution(); | ||
68 | var solutionResource = solution.eResource(); | ||
69 | var saveOptions = Map.of(); | 84 | var saveOptions = Map.of(); |
70 | if (isStandardStream(outputPath)) { | 85 | if (count == 1) { |
71 | printSolution(solutionResource, saveOptions); | 86 | var solution = generator.serializeSolution(); |
87 | var solutionResource = solution.eResource(); | ||
88 | if (isStandardStream(outputPath)) { | ||
89 | printSolution(solutionResource, saveOptions); | ||
90 | } else { | ||
91 | try (var outputStream = new FileOutputStream(outputPath)) { | ||
92 | solutionResource.save(outputStream, saveOptions); | ||
93 | } | ||
94 | } | ||
72 | } else { | 95 | } else { |
73 | try (var outputStream = new FileOutputStream(outputPath)) { | 96 | int solutionCount = generator.getSolutionCount(); |
74 | solutionResource.save(outputStream, saveOptions); | 97 | for (int i = 0; i < solutionCount; i++) { |
98 | generator.loadSolution(i); | ||
99 | var solution = generator.serializeSolution(); | ||
100 | var solutionResource = solution.eResource(); | ||
101 | var pathWithIndex = getFileNameWithIndex(outputPath, i + 1); | ||
102 | try (var outputStream = new FileOutputStream(pathWithIndex)) { | ||
103 | solutionResource.save(outputStream, saveOptions); | ||
104 | } | ||
75 | } | 105 | } |
76 | } | 106 | } |
77 | } | 107 | } |
@@ -85,4 +115,12 @@ public class GenerateCommand { | |||
85 | private void printSolution(Resource solutionResource, Map<?, ?> saveOptions) throws IOException { | 115 | private void printSolution(Resource solutionResource, Map<?, ?> saveOptions) throws IOException { |
86 | solutionResource.save(System.out, saveOptions); | 116 | solutionResource.save(System.out, saveOptions); |
87 | } | 117 | } |
118 | |||
119 | private String getFileNameWithIndex(String simpleName, int index) { | ||
120 | var match = EXTENSION_REGEX.matcher(simpleName); | ||
121 | if (match.matches()) { | ||
122 | return "%s_%03d.%s".formatted(match.group(1), index, match.group(2)); | ||
123 | } | ||
124 | return "%s_%03d".formatted(simpleName, index); | ||
125 | } | ||
88 | } | 126 | } |
diff --git a/subprojects/generator/src/main/java/tools/refinery/generator/ModelGenerator.java b/subprojects/generator/src/main/java/tools/refinery/generator/ModelGenerator.java index 36190b76..8dff5622 100644 --- a/subprojects/generator/src/main/java/tools/refinery/generator/ModelGenerator.java +++ b/subprojects/generator/src/main/java/tools/refinery/generator/ModelGenerator.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -11,6 +11,7 @@ import tools.refinery.language.semantics.ProblemTrace; | |||
11 | import tools.refinery.language.semantics.SolutionSerializer; | 11 | import tools.refinery.language.semantics.SolutionSerializer; |
12 | import tools.refinery.logic.AbstractValue; | 12 | import tools.refinery.logic.AbstractValue; |
13 | import tools.refinery.store.dse.strategy.BestFirstStoreManager; | 13 | import tools.refinery.store.dse.strategy.BestFirstStoreManager; |
14 | import tools.refinery.store.dse.transition.statespace.SolutionStore; | ||
14 | import tools.refinery.store.map.Version; | 15 | import tools.refinery.store.map.Version; |
15 | import tools.refinery.store.model.ModelStore; | 16 | import tools.refinery.store.model.ModelStore; |
16 | import tools.refinery.store.reasoning.interpretation.PartialInterpretation; | 17 | import tools.refinery.store.reasoning.interpretation.PartialInterpretation; |
@@ -22,7 +23,8 @@ public class ModelGenerator extends ModelFacade { | |||
22 | private final Version initialVersion; | 23 | private final Version initialVersion; |
23 | private final Provider<SolutionSerializer> solutionSerializerProvider; | 24 | private final Provider<SolutionSerializer> solutionSerializerProvider; |
24 | private long randomSeed = 1; | 25 | private long randomSeed = 1; |
25 | private boolean lastGenerationSuccessful; | 26 | private int maxNumberOfSolutions = 1; |
27 | private SolutionStore solutionStore; | ||
26 | 28 | ||
27 | ModelGenerator(ProblemTrace problemTrace, ModelStore store, ModelSeed modelSeed, | 29 | ModelGenerator(ProblemTrace problemTrace, ModelStore store, ModelSeed modelSeed, |
28 | Provider<SolutionSerializer> solutionSerializerProvider) { | 30 | Provider<SolutionSerializer> solutionSerializerProvider) { |
@@ -37,26 +39,51 @@ public class ModelGenerator extends ModelFacade { | |||
37 | 39 | ||
38 | public void setRandomSeed(long randomSeed) { | 40 | public void setRandomSeed(long randomSeed) { |
39 | this.randomSeed = randomSeed; | 41 | this.randomSeed = randomSeed; |
40 | this.lastGenerationSuccessful = false; | 42 | this.solutionStore = null; |
41 | } | 43 | } |
42 | 44 | ||
45 | public int getMaxNumberOfSolutions() { | ||
46 | return maxNumberOfSolutions; | ||
47 | } | ||
48 | |||
49 | public void setMaxNumberOfSolutions(int maxNumberOfSolutions) { | ||
50 | this.maxNumberOfSolutions = maxNumberOfSolutions; | ||
51 | this.solutionStore = null; | ||
52 | } | ||
53 | |||
54 | public int getSolutionCount() { | ||
55 | if (!isLastGenerationSuccessful()) { | ||
56 | return 0; | ||
57 | } | ||
58 | return this.solutionStore.getSolutions().size(); | ||
59 | } | ||
60 | |||
61 | public void loadSolution(int index) { | ||
62 | if (index >= getSolutionCount()) { | ||
63 | throw new IndexOutOfBoundsException("No such solution"); | ||
64 | } | ||
65 | getModel().restore(solutionStore.getSolutions().get(index).version()); | ||
66 | } | ||
67 | |||
68 | // It makes more sense to check for success than for failure. | ||
69 | @SuppressWarnings("BooleanMethodIsAlwaysInverted") | ||
43 | public boolean isLastGenerationSuccessful() { | 70 | public boolean isLastGenerationSuccessful() { |
44 | return lastGenerationSuccessful; | 71 | return solutionStore != null; |
45 | } | 72 | } |
46 | 73 | ||
47 | // This method only makes sense if it returns {@code true} on success. | 74 | // This method only makes sense if it returns {@code true} on success. |
48 | @SuppressWarnings("BooleanMethodIsAlwaysInverted") | 75 | @SuppressWarnings("BooleanMethodIsAlwaysInverted") |
49 | public boolean tryGenerate() { | 76 | public boolean tryGenerate() { |
50 | lastGenerationSuccessful = false; | 77 | solutionStore = null; |
51 | randomSeed++; | 78 | randomSeed++; |
52 | var bestFirst = new BestFirstStoreManager(getModelStore(), 1); | 79 | var bestFirst = new BestFirstStoreManager(getModelStore(), maxNumberOfSolutions); |
53 | bestFirst.startExploration(initialVersion, randomSeed); | 80 | bestFirst.startExploration(initialVersion, randomSeed); |
54 | var solutions = bestFirst.getSolutionStore().getSolutions(); | 81 | var solutions = bestFirst.getSolutionStore().getSolutions(); |
55 | if (solutions.isEmpty()) { | 82 | if (solutions.isEmpty()) { |
56 | return false; | 83 | return false; |
57 | } | 84 | } |
58 | getModel().restore(solutions.getFirst().version()); | 85 | getModel().restore(solutions.getFirst().version()); |
59 | lastGenerationSuccessful = true; | 86 | solutionStore = bestFirst.getSolutionStore(); |
60 | return true; | 87 | return true; |
61 | } | 88 | } |
62 | 89 | ||
@@ -80,7 +107,7 @@ public class ModelGenerator extends ModelFacade { | |||
80 | } | 107 | } |
81 | 108 | ||
82 | private void checkSuccessfulGeneration() { | 109 | private void checkSuccessfulGeneration() { |
83 | if (!lastGenerationSuccessful) { | 110 | if (!isLastGenerationSuccessful()) { |
84 | throw new IllegalStateException("No generated model is available"); | 111 | throw new IllegalStateException("No generated model is available"); |
85 | } | 112 | } |
86 | } | 113 | } |
diff --git a/subprojects/generator/src/main/java/tools/refinery/generator/ModelGeneratorFactory.java b/subprojects/generator/src/main/java/tools/refinery/generator/ModelGeneratorFactory.java index 587601f2..ec273cf4 100644 --- a/subprojects/generator/src/main/java/tools/refinery/generator/ModelGeneratorFactory.java +++ b/subprojects/generator/src/main/java/tools/refinery/generator/ModelGeneratorFactory.java | |||
@@ -15,8 +15,11 @@ import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | |||
15 | import tools.refinery.store.model.ModelStore; | 15 | import tools.refinery.store.model.ModelStore; |
16 | import tools.refinery.store.query.interpreter.QueryInterpreterAdapter; | 16 | import tools.refinery.store.query.interpreter.QueryInterpreterAdapter; |
17 | import tools.refinery.store.reasoning.ReasoningAdapter; | 17 | import tools.refinery.store.reasoning.ReasoningAdapter; |
18 | import tools.refinery.store.reasoning.interpretation.PartialNeighbourhoodCalculator; | ||
18 | import tools.refinery.store.reasoning.literal.Concreteness; | 19 | import tools.refinery.store.reasoning.literal.Concreteness; |
20 | import tools.refinery.store.statecoding.StateCodeCalculatorFactory; | ||
19 | import tools.refinery.store.statecoding.StateCoderAdapter; | 21 | import tools.refinery.store.statecoding.StateCoderAdapter; |
22 | import tools.refinery.store.statecoding.neighbourhood.NeighbourhoodCalculator; | ||
20 | import tools.refinery.store.util.CancellationToken; | 23 | import tools.refinery.store.util.CancellationToken; |
21 | 24 | ||
22 | import java.util.Collection; | 25 | import java.util.Collection; |
@@ -33,6 +36,8 @@ public final class ModelGeneratorFactory { | |||
33 | 36 | ||
34 | private boolean debugPartialInterpretations; | 37 | private boolean debugPartialInterpretations; |
35 | 38 | ||
39 | private boolean partialInterpretationBasedNeighbourhoods; | ||
40 | |||
36 | public ModelGeneratorFactory cancellationToken(CancellationToken cancellationToken) { | 41 | public ModelGeneratorFactory cancellationToken(CancellationToken cancellationToken) { |
37 | this.cancellationToken = cancellationToken; | 42 | this.cancellationToken = cancellationToken; |
38 | return this; | 43 | return this; |
@@ -43,6 +48,10 @@ public final class ModelGeneratorFactory { | |||
43 | return this; | 48 | return this; |
44 | } | 49 | } |
45 | 50 | ||
51 | public void partialInterpretationBasedNeighbourhoods(boolean partialInterpretationBasedNeighbourhoods) { | ||
52 | this.partialInterpretationBasedNeighbourhoods = partialInterpretationBasedNeighbourhoods; | ||
53 | } | ||
54 | |||
46 | public ModelGenerator createGenerator(Problem problem) { | 55 | public ModelGenerator createGenerator(Problem problem) { |
47 | var initializer = initializerProvider.get(); | 56 | var initializer = initializerProvider.get(); |
48 | initializer.readProblem(problem); | 57 | initializer.readProblem(problem); |
@@ -51,7 +60,8 @@ public final class ModelGeneratorFactory { | |||
51 | .cancellationToken(cancellationToken) | 60 | .cancellationToken(cancellationToken) |
52 | .with(QueryInterpreterAdapter.builder()) | 61 | .with(QueryInterpreterAdapter.builder()) |
53 | .with(PropagationAdapter.builder()) | 62 | .with(PropagationAdapter.builder()) |
54 | .with(StateCoderAdapter.builder()) | 63 | .with(StateCoderAdapter.builder() |
64 | .stateCodeCalculatorFactory(getStateCoderCalculatorFactory())) | ||
55 | .with(DesignSpaceExplorationAdapter.builder()) | 65 | .with(DesignSpaceExplorationAdapter.builder()) |
56 | .with(ReasoningAdapter.builder() | 66 | .with(ReasoningAdapter.builder() |
57 | .requiredInterpretations(getRequiredInterpretations())); | 67 | .requiredInterpretations(getRequiredInterpretations())); |
@@ -62,7 +72,13 @@ public final class ModelGeneratorFactory { | |||
62 | } | 72 | } |
63 | 73 | ||
64 | private Collection<Concreteness> getRequiredInterpretations() { | 74 | private Collection<Concreteness> getRequiredInterpretations() { |
65 | return debugPartialInterpretations ? Set.of(Concreteness.PARTIAL, Concreteness.CANDIDATE) : | 75 | return debugPartialInterpretations || partialInterpretationBasedNeighbourhoods ? |
76 | Set.of(Concreteness.PARTIAL, Concreteness.CANDIDATE) : | ||
66 | Set.of(Concreteness.CANDIDATE); | 77 | Set.of(Concreteness.CANDIDATE); |
67 | } | 78 | } |
79 | |||
80 | private StateCodeCalculatorFactory getStateCoderCalculatorFactory() { | ||
81 | return partialInterpretationBasedNeighbourhoods ? PartialNeighbourhoodCalculator.FACTORY : | ||
82 | NeighbourhoodCalculator::new; | ||
83 | } | ||
68 | } | 84 | } |
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java index 06f0e758..58d6748a 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java | |||
@@ -125,7 +125,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
125 | classesBuilder.add(ERROR_CLASS); | 125 | classesBuilder.add(ERROR_CLASS); |
126 | } | 126 | } |
127 | if (eObject instanceof Node node) { | 127 | if (eObject instanceof Node node) { |
128 | highlightNode(node, reference, classesBuilder); | 128 | highlightNode(node, classesBuilder); |
129 | } | 129 | } |
130 | if (eObject instanceof Relation relation) { | 130 | if (eObject instanceof Relation relation) { |
131 | var typeHash = typeHashProvider.getTypeHash(relation); | 131 | var typeHash = typeHashProvider.getTypeHash(relation); |
@@ -137,10 +137,8 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
137 | return classes.toArray(new String[0]); | 137 | return classes.toArray(new String[0]); |
138 | } | 138 | } |
139 | 139 | ||
140 | private static void highlightNode(Node node, EReference reference, ImmutableList.Builder<String> classesBuilder) { | 140 | private static void highlightNode(Node node, ImmutableList.Builder<String> classesBuilder) { |
141 | if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE) { | 141 | classesBuilder.add(NODE_CLASS); |
142 | classesBuilder.add(NODE_CLASS); | ||
143 | } | ||
144 | if (ProblemUtil.isAtomNode(node)) { | 142 | if (ProblemUtil.isAtomNode(node)) { |
145 | classesBuilder.add(ATOM_NODE_CLASS); | 143 | classesBuilder.add(ATOM_NODE_CLASS); |
146 | } | 144 | } |
diff --git a/subprojects/language-model/problem.aird b/subprojects/language-model/problem.aird index f8a50a76..74c658d4 100644 --- a/subprojects/language-model/problem.aird +++ b/subprojects/language-model/problem.aird | |||
@@ -7,19 +7,19 @@ | |||
7 | <semanticResources>build/resources/main/model/problem.genmodel</semanticResources> | 7 | <semanticResources>build/resources/main/model/problem.genmodel</semanticResources> |
8 | <ownedViews xmi:type="viewpoint:DView" uid="_CsAAYKA4EeuqkpDnuik1sg"> | 8 | <ownedViews xmi:type="viewpoint:DView" uid="_CsAAYKA4EeuqkpDnuik1sg"> |
9 | <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/> | 9 | <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/> |
10 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_CsYa4KA4EeuqkpDnuik1sg" name="declarations" repPath="#_CsUwgKA4EeuqkpDnuik1sg" changeId="1709659837733"> | 10 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_CsYa4KA4EeuqkpDnuik1sg" name="declarations" repPath="#_CsUwgKA4EeuqkpDnuik1sg" changeId="1717085395802"> |
11 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 11 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
12 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 12 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
13 | </ownedRepresentationDescriptors> | 13 | </ownedRepresentationDescriptors> |
14 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_z1bOYF3lEe2LuOZzJ_LhLg" name="expressions" repPath="#_z1YyIF3lEe2LuOZzJ_LhLg" changeId="1709659698980"> | 14 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_z1bOYF3lEe2LuOZzJ_LhLg" name="expressions" repPath="#_z1YyIF3lEe2LuOZzJ_LhLg" changeId="1715884068732"> |
15 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 15 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
16 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 16 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
17 | </ownedRepresentationDescriptors> | 17 | </ownedRepresentationDescriptors> |
18 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_xj9yMF4eEe2rXNsIDUvqhw" name="assertions" repPath="#_xj6H0F4eEe2rXNsIDUvqhw" changeId="1706657349781"> | 18 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_xj9yMF4eEe2rXNsIDUvqhw" name="assertions" repPath="#_xj6H0F4eEe2rXNsIDUvqhw" changeId="1715963376752"> |
19 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 19 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
20 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 20 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
21 | </ownedRepresentationDescriptors> | 21 | </ownedRepresentationDescriptors> |
22 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_sCFokF4fEe2rXNsIDUvqhw" name="actions" repPath="#_sCFBgF4fEe2rXNsIDUvqhw" changeId="1706657349781"> | 22 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_sCFokF4fEe2rXNsIDUvqhw" name="actions" repPath="#_sCFBgF4fEe2rXNsIDUvqhw" changeId="1715963438471"> |
23 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 23 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
24 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 24 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
25 | </ownedRepresentationDescriptors> | 25 | </ownedRepresentationDescriptors> |
@@ -100,11 +100,23 @@ | |||
100 | <children xmi:type="notation:Node" xmi:id="_QKLK0KA6EeuqkpDnuik1sg" type="2003" element="_QKD2EKA6EeuqkpDnuik1sg"> | 100 | <children xmi:type="notation:Node" xmi:id="_QKLK0KA6EeuqkpDnuik1sg" type="2003" element="_QKD2EKA6EeuqkpDnuik1sg"> |
101 | <children xmi:type="notation:Node" xmi:id="_QKLK06A6EeuqkpDnuik1sg" type="5007"/> | 101 | <children xmi:type="notation:Node" xmi:id="_QKLK06A6EeuqkpDnuik1sg" type="5007"/> |
102 | <children xmi:type="notation:Node" xmi:id="_QKLK1KA6EeuqkpDnuik1sg" type="7004"> | 102 | <children xmi:type="notation:Node" xmi:id="_QKLK1KA6EeuqkpDnuik1sg" type="7004"> |
103 | <children xmi:type="notation:Node" xmi:id="_JR-dPBOyEe-4k7CzzL6IsA" type="3010" element="_JRfVABOyEe-4k7CzzL6IsA"> | ||
104 | <styles xmi:type="notation:FontStyle" xmi:id="_JR-dPROyEe-4k7CzzL6IsA" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
105 | <layoutConstraint xmi:type="notation:Location" xmi:id="_JR-dPhOyEe-4k7CzzL6IsA"/> | ||
106 | </children> | ||
107 | <children xmi:type="notation:Node" xmi:id="_LJy6eROyEe-4k7CzzL6IsA" type="3010" element="_LJG98BOyEe-4k7CzzL6IsA"> | ||
108 | <styles xmi:type="notation:FontStyle" xmi:id="_LJy6ehOyEe-4k7CzzL6IsA" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
109 | <layoutConstraint xmi:type="notation:Location" xmi:id="_LJy6exOyEe-4k7CzzL6IsA"/> | ||
110 | </children> | ||
111 | <children xmi:type="notation:Node" xmi:id="_he4bMBO0Ee-4k7CzzL6IsA" type="3010" element="_heTzcBO0Ee-4k7CzzL6IsA"> | ||
112 | <styles xmi:type="notation:FontStyle" xmi:id="_he4bMRO0Ee-4k7CzzL6IsA" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
113 | <layoutConstraint xmi:type="notation:Location" xmi:id="_he4bMhO0Ee-4k7CzzL6IsA"/> | ||
114 | </children> | ||
103 | <styles xmi:type="notation:SortingStyle" xmi:id="_QKLK1aA6EeuqkpDnuik1sg"/> | 115 | <styles xmi:type="notation:SortingStyle" xmi:id="_QKLK1aA6EeuqkpDnuik1sg"/> |
104 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QKLK1qA6EeuqkpDnuik1sg"/> | 116 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QKLK1qA6EeuqkpDnuik1sg"/> |
105 | </children> | 117 | </children> |
106 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QKLK0aA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> | 118 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QKLK0aA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> |
107 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QKLK0qA6EeuqkpDnuik1sg" x="1687" y="530" width="120" height="100"/> | 119 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QKLK0qA6EeuqkpDnuik1sg" x="1656" y="516" width="174" height="114"/> |
108 | </children> | 120 | </children> |
109 | <children xmi:type="notation:Node" xmi:id="_jP6FkKA6EeuqkpDnuik1sg" type="2003" element="_jPpm4KA6EeuqkpDnuik1sg"> | 121 | <children xmi:type="notation:Node" xmi:id="_jP6FkKA6EeuqkpDnuik1sg" type="2003" element="_jPpm4KA6EeuqkpDnuik1sg"> |
110 | <children xmi:type="notation:Node" xmi:id="_jP6soKA6EeuqkpDnuik1sg" type="5007"/> | 122 | <children xmi:type="notation:Node" xmi:id="_jP6soKA6EeuqkpDnuik1sg" type="5007"/> |
@@ -246,6 +258,10 @@ | |||
246 | <children xmi:type="notation:Node" xmi:id="_N0FQ4CrZEeyyC-O0_LlY9w" type="2003" element="_NzpMACrZEeyyC-O0_LlY9w"> | 258 | <children xmi:type="notation:Node" xmi:id="_N0FQ4CrZEeyyC-O0_LlY9w" type="2003" element="_NzpMACrZEeyyC-O0_LlY9w"> |
247 | <children xmi:type="notation:Node" xmi:id="_N0F38CrZEeyyC-O0_LlY9w" type="5007"/> | 259 | <children xmi:type="notation:Node" xmi:id="_N0F38CrZEeyyC-O0_LlY9w" type="5007"/> |
248 | <children xmi:type="notation:Node" xmi:id="_N0F38SrZEeyyC-O0_LlY9w" type="7004"> | 260 | <children xmi:type="notation:Node" xmi:id="_N0F38SrZEeyyC-O0_LlY9w" type="7004"> |
261 | <children xmi:type="notation:Node" xmi:id="_-wphkBOzEe-4k7CzzL6IsA" type="3010" element="_-wOq0BOzEe-4k7CzzL6IsA"> | ||
262 | <styles xmi:type="notation:FontStyle" xmi:id="_-wphkROzEe-4k7CzzL6IsA" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
263 | <layoutConstraint xmi:type="notation:Location" xmi:id="_-wphkhOzEe-4k7CzzL6IsA"/> | ||
264 | </children> | ||
249 | <styles xmi:type="notation:SortingStyle" xmi:id="_N0F38irZEeyyC-O0_LlY9w"/> | 265 | <styles xmi:type="notation:SortingStyle" xmi:id="_N0F38irZEeyyC-O0_LlY9w"/> |
250 | <styles xmi:type="notation:FilteringStyle" xmi:id="_N0F38yrZEeyyC-O0_LlY9w"/> | 266 | <styles xmi:type="notation:FilteringStyle" xmi:id="_N0F38yrZEeyyC-O0_LlY9w"/> |
251 | </children> | 267 | </children> |
@@ -289,11 +305,15 @@ | |||
289 | <styles xmi:type="notation:FontStyle" xmi:id="_9ZwJoc9jEe6T2u19X9cqmQ" fontName="Noto Sans" fontHeight="8"/> | 305 | <styles xmi:type="notation:FontStyle" xmi:id="_9ZwJoc9jEe6T2u19X9cqmQ" fontName="Noto Sans" fontHeight="8"/> |
290 | <layoutConstraint xmi:type="notation:Location" xmi:id="_9ZwJos9jEe6T2u19X9cqmQ"/> | 306 | <layoutConstraint xmi:type="notation:Location" xmi:id="_9ZwJos9jEe6T2u19X9cqmQ"/> |
291 | </children> | 307 | </children> |
308 | <children xmi:type="notation:Node" xmi:id="_Cl4ksB6fEe-D29eT4GV5Hg" type="3010" element="_Ck5GMB6fEe-D29eT4GV5Hg"> | ||
309 | <styles xmi:type="notation:FontStyle" xmi:id="_Cl4ksR6fEe-D29eT4GV5Hg" fontName="Noto Sans" fontHeight="8"/> | ||
310 | <layoutConstraint xmi:type="notation:Location" xmi:id="_Cl4ksh6fEe-D29eT4GV5Hg"/> | ||
311 | </children> | ||
292 | <styles xmi:type="notation:SortingStyle" xmi:id="_xp2JgjNlEe2fD4dIhR_vzA"/> | 312 | <styles xmi:type="notation:SortingStyle" xmi:id="_xp2JgjNlEe2fD4dIhR_vzA"/> |
293 | <styles xmi:type="notation:FilteringStyle" xmi:id="_xp2JgzNlEe2fD4dIhR_vzA"/> | 313 | <styles xmi:type="notation:FilteringStyle" xmi:id="_xp2JgzNlEe2fD4dIhR_vzA"/> |
294 | </children> | 314 | </children> |
295 | <styles xmi:type="notation:ShapeStyle" xmi:id="_xp1icTNlEe2fD4dIhR_vzA" fontName="Noto Sans" fontHeight="8"/> | 315 | <styles xmi:type="notation:ShapeStyle" xmi:id="_xp1icTNlEe2fD4dIhR_vzA" fontName="Noto Sans" fontHeight="8"/> |
296 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xp1icjNlEe2fD4dIhR_vzA" x="574" y="1280" width="120" height="100"/> | 316 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xp1icjNlEe2fD4dIhR_vzA" x="574" y="1280" width="120" height="115"/> |
297 | </children> | 317 | </children> |
298 | <children xmi:type="notation:Node" xmi:id="_782skF9mEe2rXNsIDUvqhw" type="2003" element="_78pRMF9mEe2rXNsIDUvqhw"> | 318 | <children xmi:type="notation:Node" xmi:id="_782skF9mEe2rXNsIDUvqhw" type="2003" element="_78pRMF9mEe2rXNsIDUvqhw"> |
299 | <children xmi:type="notation:Node" xmi:id="_783ToF9mEe2rXNsIDUvqhw" type="5007"/> | 319 | <children xmi:type="notation:Node" xmi:id="_783ToF9mEe2rXNsIDUvqhw" type="5007"/> |
@@ -436,6 +456,48 @@ | |||
436 | <styles xmi:type="notation:ShapeStyle" xmi:id="_jlSckdsVEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> | 456 | <styles xmi:type="notation:ShapeStyle" xmi:id="_jlSckdsVEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> |
437 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jlScktsVEe6c9ehqpe3s7A" x="1128" y="716" width="147" height="100"/> | 457 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jlScktsVEe6c9ehqpe3s7A" x="1128" y="716" width="147" height="100"/> |
438 | </children> | 458 | </children> |
459 | <children xmi:type="notation:Node" xmi:id="_3c-frBOzEe-4k7CzzL6IsA" type="2003" element="_3cdiQBOzEe-4k7CzzL6IsA"> | ||
460 | <children xmi:type="notation:Node" xmi:id="_3c-frxOzEe-4k7CzzL6IsA" type="5007"/> | ||
461 | <children xmi:type="notation:Node" xmi:id="_3c-fsBOzEe-4k7CzzL6IsA" type="7004"> | ||
462 | <children xmi:type="notation:Node" xmi:id="_5DOEsBOzEe-4k7CzzL6IsA" type="3010" element="_5Cz1ABOzEe-4k7CzzL6IsA"> | ||
463 | <styles xmi:type="notation:FontStyle" xmi:id="_5DOEsROzEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
464 | <layoutConstraint xmi:type="notation:Location" xmi:id="_5DOEshOzEe-4k7CzzL6IsA"/> | ||
465 | </children> | ||
466 | <children xmi:type="notation:Node" xmi:id="_7IGGgBOzEe-4k7CzzL6IsA" type="3010" element="_7Hb_MBOzEe-4k7CzzL6IsA"> | ||
467 | <styles xmi:type="notation:FontStyle" xmi:id="_7IGGgROzEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
468 | <layoutConstraint xmi:type="notation:Location" xmi:id="_7IGGghOzEe-4k7CzzL6IsA"/> | ||
469 | </children> | ||
470 | <children xmi:type="notation:Node" xmi:id="_8KIyUBOzEe-4k7CzzL6IsA" type="3010" element="_8JiVYBOzEe-4k7CzzL6IsA"> | ||
471 | <styles xmi:type="notation:FontStyle" xmi:id="_8KIyUROzEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
472 | <layoutConstraint xmi:type="notation:Location" xmi:id="_8KIyUhOzEe-4k7CzzL6IsA"/> | ||
473 | </children> | ||
474 | <styles xmi:type="notation:SortingStyle" xmi:id="_3c-fsROzEe-4k7CzzL6IsA"/> | ||
475 | <styles xmi:type="notation:FilteringStyle" xmi:id="_3c-fshOzEe-4k7CzzL6IsA"/> | ||
476 | </children> | ||
477 | <styles xmi:type="notation:ShapeStyle" xmi:id="_3c-frROzEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
478 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3c-frhOzEe-4k7CzzL6IsA" x="2298" y="1280" width="120" height="100"/> | ||
479 | </children> | ||
480 | <children xmi:type="notation:Node" xmi:id="_Z2K9bBO0Ee-4k7CzzL6IsA" type="2003" element="_Z12NQBO0Ee-4k7CzzL6IsA"> | ||
481 | <children xmi:type="notation:Node" xmi:id="_Z2K9bxO0Ee-4k7CzzL6IsA" type="5007"/> | ||
482 | <children xmi:type="notation:Node" xmi:id="_Z2K9cBO0Ee-4k7CzzL6IsA" type="7004"> | ||
483 | <children xmi:type="notation:Node" xmi:id="_eBUvNhO0Ee-4k7CzzL6IsA" type="3010" element="_eBCbUBO0Ee-4k7CzzL6IsA"> | ||
484 | <styles xmi:type="notation:FontStyle" xmi:id="_eBUvNxO0Ee-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
485 | <layoutConstraint xmi:type="notation:Location" xmi:id="_eBUvOBO0Ee-4k7CzzL6IsA"/> | ||
486 | </children> | ||
487 | <children xmi:type="notation:Node" xmi:id="_eoD_HBO0Ee-4k7CzzL6IsA" type="3010" element="_enuA0BO0Ee-4k7CzzL6IsA"> | ||
488 | <styles xmi:type="notation:FontStyle" xmi:id="_eoD_HRO0Ee-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
489 | <layoutConstraint xmi:type="notation:Location" xmi:id="_eoD_HhO0Ee-4k7CzzL6IsA"/> | ||
490 | </children> | ||
491 | <children xmi:type="notation:Node" xmi:id="_fGm8QBO0Ee-4k7CzzL6IsA" type="3010" element="_fGJCMBO0Ee-4k7CzzL6IsA"> | ||
492 | <styles xmi:type="notation:FontStyle" xmi:id="_fGm8QRO0Ee-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
493 | <layoutConstraint xmi:type="notation:Location" xmi:id="_fGm8QhO0Ee-4k7CzzL6IsA"/> | ||
494 | </children> | ||
495 | <styles xmi:type="notation:SortingStyle" xmi:id="_Z2K9cRO0Ee-4k7CzzL6IsA"/> | ||
496 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Z2K9chO0Ee-4k7CzzL6IsA"/> | ||
497 | </children> | ||
498 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Z2K9bRO0Ee-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
499 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z2K9bhO0Ee-4k7CzzL6IsA" x="2039" y="332" width="120" height="100"/> | ||
500 | </children> | ||
439 | <styles xmi:type="notation:DiagramStyle" xmi:id="_CsZB8qA4EeuqkpDnuik1sg"/> | 501 | <styles xmi:type="notation:DiagramStyle" xmi:id="_CsZB8qA4EeuqkpDnuik1sg"/> |
440 | <edges xmi:type="notation:Edge" xmi:id="_4eaYwKA8EeuqkpDnuik1sg" type="4001" element="_4eU5TqA8EeuqkpDnuik1sg" source="_D1D6MKA4EeuqkpDnuik1sg" target="_xsq_MKA8EeuqkpDnuik1sg"> | 502 | <edges xmi:type="notation:Edge" xmi:id="_4eaYwKA8EeuqkpDnuik1sg" type="4001" element="_4eU5TqA8EeuqkpDnuik1sg" source="_D1D6MKA4EeuqkpDnuik1sg" target="_xsq_MKA8EeuqkpDnuik1sg"> |
441 | <children xmi:type="notation:Node" xmi:id="_4ea_06A8EeuqkpDnuik1sg" type="6001"> | 503 | <children xmi:type="notation:Node" xmi:id="_4ea_06A8EeuqkpDnuik1sg" type="6001"> |
@@ -610,7 +672,7 @@ | |||
610 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_onzXUaA6EeuqkpDnuik1sg" routing="Tree"/> | 672 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_onzXUaA6EeuqkpDnuik1sg" routing="Tree"/> |
611 | <styles xmi:type="notation:FontStyle" xmi:id="_onzXUqA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> | 673 | <styles xmi:type="notation:FontStyle" xmi:id="_onzXUqA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> |
612 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_onzXU6A6EeuqkpDnuik1sg" points="[0, 0, 61, 191]$[0, -72, 61, 119]$[-60, -72, 1, 119]$[-60, -142, 1, 49]"/> | 674 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_onzXU6A6EeuqkpDnuik1sg" points="[0, 0, 61, 191]$[0, -72, 61, 119]$[-60, -72, 1, 119]$[-60, -142, 1, 49]"/> |
613 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_on1MgKA6EeuqkpDnuik1sg" id="(0.2033898305084746,0.0)"/> | 675 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_on1MgKA6EeuqkpDnuik1sg" id="(0.31976744186046513,0.125)"/> |
614 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_on1MgaA6EeuqkpDnuik1sg" id="(0.5,0.5)"/> | 676 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_on1MgaA6EeuqkpDnuik1sg" id="(0.5,0.5)"/> |
615 | </edges> | 677 | </edges> |
616 | <edges xmi:type="notation:Edge" xmi:id="_vndkcCrcEeyyC-O0_LlY9w" type="4001" element="_Uy4bWaA6EeuqkpDnuik1sg" source="_A9YrQCrZEeyyC-O0_LlY9w" target="_QKLK0KA6EeuqkpDnuik1sg"> | 678 | <edges xmi:type="notation:Edge" xmi:id="_vndkcCrcEeyyC-O0_LlY9w" type="4001" element="_Uy4bWaA6EeuqkpDnuik1sg" source="_A9YrQCrZEeyyC-O0_LlY9w" target="_QKLK0KA6EeuqkpDnuik1sg"> |
@@ -627,7 +689,7 @@ | |||
627 | <styles xmi:type="notation:FontStyle" xmi:id="_vndkcircEeyyC-O0_LlY9w" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> | 689 | <styles xmi:type="notation:FontStyle" xmi:id="_vndkcircEeyyC-O0_LlY9w" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/> |
628 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vndkcyrcEeyyC-O0_LlY9w" points="[-38, -41, 287, 48]$[-258, -41, 67, 48]"/> | 690 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vndkcyrcEeyyC-O0_LlY9w" points="[-38, -41, 287, 48]$[-258, -41, 67, 48]"/> |
629 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vndkeircEeyyC-O0_LlY9w" id="(0.2602739726027397,0.9081632653061225)"/> | 691 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vndkeircEeyyC-O0_LlY9w" id="(0.2602739726027397,0.9081632653061225)"/> |
630 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vneLgCrcEeyyC-O0_LlY9w" id="(0.4322033898305085,0.0)"/> | 692 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vneLgCrcEeyyC-O0_LlY9w" id="(0.47674418604651164,0.125)"/> |
631 | </edges> | 693 | </edges> |
632 | <edges xmi:type="notation:Edge" xmi:id="_TuLToNbNEeuymriYTNxK2g" type="4001" element="_Tt9RRtbNEeuymriYTNxK2g" source="_jP6FkKA6EeuqkpDnuik1sg" target="_Kw-vINbNEeuymriYTNxK2g"> | 694 | <edges xmi:type="notation:Edge" xmi:id="_TuLToNbNEeuymriYTNxK2g" type="4001" element="_Tt9RRtbNEeuymriYTNxK2g" source="_jP6FkKA6EeuqkpDnuik1sg" target="_Kw-vINbNEeuymriYTNxK2g"> |
633 | <children xmi:type="notation:Node" xmi:id="_TuLTpNbNEeuymriYTNxK2g" type="6001"> | 695 | <children xmi:type="notation:Node" xmi:id="_TuLTpNbNEeuymriYTNxK2g" type="6001"> |
@@ -1202,7 +1264,7 @@ | |||
1202 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_iXIY4WTzEe2qdtyPWAtoxA" routing="Rectilinear"/> | 1264 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_iXIY4WTzEe2qdtyPWAtoxA" routing="Rectilinear"/> |
1203 | <styles xmi:type="notation:FontStyle" xmi:id="_iXIY4mTzEe2qdtyPWAtoxA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 1265 | <styles xmi:type="notation:FontStyle" xmi:id="_iXIY4mTzEe2qdtyPWAtoxA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
1204 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iXIY42TzEe2qdtyPWAtoxA" points="[-72, 48, 1131, 5]$[-1144, 48, 59, 5]"/> | 1266 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iXIY42TzEe2qdtyPWAtoxA" points="[-72, 48, 1131, 5]$[-1144, 48, 59, 5]"/> |
1205 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iXIY6mTzEe2qdtyPWAtoxA" id="(0.6101694915254238,0.0)"/> | 1267 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iXIY6mTzEe2qdtyPWAtoxA" id="(0.5988372093023255,0.125)"/> |
1206 | </edges> | 1268 | </edges> |
1207 | <edges xmi:type="notation:Edge" xmi:id="_q7DhwGTzEe2qdtyPWAtoxA" type="4001" element="_q604amTzEe2qdtyPWAtoxA" source="_zaq8oKA9EeuqkpDnuik1sg" target="_dzfLYGTvEe2qdtyPWAtoxA"> | 1269 | <edges xmi:type="notation:Edge" xmi:id="_q7DhwGTzEe2qdtyPWAtoxA" type="4001" element="_q604amTzEe2qdtyPWAtoxA" source="_zaq8oKA9EeuqkpDnuik1sg" target="_dzfLYGTvEe2qdtyPWAtoxA"> |
1208 | <children xmi:type="notation:Node" xmi:id="_q7EI0GTzEe2qdtyPWAtoxA" type="6001"> | 1270 | <children xmi:type="notation:Node" xmi:id="_q7EI0GTzEe2qdtyPWAtoxA" type="6001"> |
@@ -1532,10 +1594,34 @@ | |||
1532 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 1594 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
1533 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 1595 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
1534 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 1596 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
1535 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_Cr-9nBjHEe2_erjsEmF9GQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | 1597 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_iG6EixO0Ee-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> |
1536 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | 1598 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> |
1537 | </ownedStyle> | 1599 | </ownedStyle> |
1538 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 1600 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
1601 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_JRfVABOyEe-4k7CzzL6IsA" name="concreteness : Concreteness = PARTIAL" tooltipText=""> | ||
1602 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Parameter/concreteness"/> | ||
1603 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Parameter/concreteness"/> | ||
1604 | <ownedStyle xmi:type="diagram:BundledImage" uid="_KAVYBROyEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
1605 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
1606 | </ownedStyle> | ||
1607 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
1608 | </ownedElements> | ||
1609 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_LJG98BOyEe-4k7CzzL6IsA" name="modality : Modality = NONE" tooltipText=""> | ||
1610 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Parameter/modality"/> | ||
1611 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Parameter/modality"/> | ||
1612 | <ownedStyle xmi:type="diagram:BundledImage" uid="_LwmbwxOyEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
1613 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
1614 | </ownedStyle> | ||
1615 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
1616 | </ownedElements> | ||
1617 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_heTzcBO0Ee-4k7CzzL6IsA" name="binding : ParameterBinding = SINGLE" tooltipText=""> | ||
1618 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Parameter/binding"/> | ||
1619 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Parameter/binding"/> | ||
1620 | <ownedStyle xmi:type="diagram:BundledImage" uid="_iG75tRO0Ee-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
1621 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
1622 | </ownedStyle> | ||
1623 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
1624 | </ownedElements> | ||
1539 | </ownedDiagramElements> | 1625 | </ownedDiagramElements> |
1540 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_Uy4bWaA6EeuqkpDnuik1sg" name="[0..*] parameters" sourceNode="_A8hIkCrZEeyyC-O0_LlY9w" targetNode="_QKD2EKA6EeuqkpDnuik1sg"> | 1626 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_Uy4bWaA6EeuqkpDnuik1sg" name="[0..*] parameters" sourceNode="_A8hIkCrZEeyyC-O0_LlY9w" targetNode="_QKD2EKA6EeuqkpDnuik1sg"> |
1541 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//ParametricDefinition/parameters"/> | 1627 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//ParametricDefinition/parameters"/> |
@@ -1565,12 +1651,12 @@ | |||
1565 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_oni4rKA6EeuqkpDnuik1sg" sourceNode="_QKD2EKA6EeuqkpDnuik1sg" targetNode="_jPpm4KA6EeuqkpDnuik1sg"> | 1651 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_oni4rKA6EeuqkpDnuik1sg" sourceNode="_QKD2EKA6EeuqkpDnuik1sg" targetNode="_jPpm4KA6EeuqkpDnuik1sg"> |
1566 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Parameter"/> | 1652 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Parameter"/> |
1567 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Parameter"/> | 1653 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Parameter"/> |
1568 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_CsIunBjHEe2_erjsEmF9GQ" targetArrow="InputClosedArrow" routingStyle="tree"> | 1654 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_iHDOfBO0Ee-4k7CzzL6IsA" targetArrow="InputClosedArrow" routingStyle="tree"> |
1569 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | 1655 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> |
1570 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_CsIunRjHEe2_erjsEmF9GQ" showIcon="false"> | 1656 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_iHDOfRO0Ee-4k7CzzL6IsA" showIcon="false"> |
1571 | <labelFormat>italic</labelFormat> | 1657 | <labelFormat>italic</labelFormat> |
1572 | </beginLabelStyle> | 1658 | </beginLabelStyle> |
1573 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_CsIunhjHEe2_erjsEmF9GQ" showIcon="false"/> | 1659 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_iHDOfhO0Ee-4k7CzzL6IsA" showIcon="false"/> |
1574 | </ownedStyle> | 1660 | </ownedStyle> |
1575 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 1661 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
1576 | </ownedDiagramElements> | 1662 | </ownedDiagramElements> |
@@ -2004,10 +2090,18 @@ | |||
2004 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 2090 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
2005 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 2091 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
2006 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 2092 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
2007 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_OVFKZhEJEe2AArBmfNpEZA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | 2093 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="__y9TRxOzEe-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> |
2008 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | 2094 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> |
2009 | </ownedStyle> | 2095 | </ownedStyle> |
2010 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 2096 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
2097 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_-wOq0BOzEe-4k7CzzL6IsA" name="kind : RuleKind = REFINEMENT" tooltipText=""> | ||
2098 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//RuleDefinition/kind"/> | ||
2099 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//RuleDefinition/kind"/> | ||
2100 | <ownedStyle xmi:type="diagram:BundledImage" uid="__y-hRhOzEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
2101 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
2102 | </ownedStyle> | ||
2103 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
2104 | </ownedElements> | ||
2011 | </ownedDiagramElements> | 2105 | </ownedDiagramElements> |
2012 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ddmjcCrZEeyyC-O0_LlY9w" sourceNode="_fihqUKA5EeuqkpDnuik1sg" targetNode="_A8hIkCrZEeyyC-O0_LlY9w"> | 2106 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ddmjcCrZEeyyC-O0_LlY9w" sourceNode="_fihqUKA5EeuqkpDnuik1sg" targetNode="_A8hIkCrZEeyyC-O0_LlY9w"> |
2013 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//PredicateDefinition"/> | 2107 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//PredicateDefinition"/> |
@@ -2024,12 +2118,12 @@ | |||
2024 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_eGZo7irZEeyyC-O0_LlY9w" sourceNode="_NzpMACrZEeyyC-O0_LlY9w" targetNode="_A8hIkCrZEeyyC-O0_LlY9w"> | 2118 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_eGZo7irZEeyyC-O0_LlY9w" sourceNode="_NzpMACrZEeyyC-O0_LlY9w" targetNode="_A8hIkCrZEeyyC-O0_LlY9w"> |
2025 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> | 2119 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> |
2026 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> | 2120 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> |
2027 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_OVL4VhEJEe2AArBmfNpEZA" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> | 2121 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="__zCMAxOzEe-4k7CzzL6IsA" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> |
2028 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/> | 2122 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/> |
2029 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_OVL4VxEJEe2AArBmfNpEZA" showIcon="false"> | 2123 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="__zCMBBOzEe-4k7CzzL6IsA" showIcon="false"> |
2030 | <labelFormat>italic</labelFormat> | 2124 | <labelFormat>italic</labelFormat> |
2031 | </beginLabelStyle> | 2125 | </beginLabelStyle> |
2032 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_OVL4WBEJEe2AArBmfNpEZA" showIcon="false"/> | 2126 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="__zCMBROzEe-4k7CzzL6IsA" showIcon="false"/> |
2033 | </ownedStyle> | 2127 | </ownedStyle> |
2034 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 2128 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
2035 | </ownedDiagramElements> | 2129 | </ownedDiagramElements> |
@@ -2050,9 +2144,9 @@ | |||
2050 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 2144 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
2051 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 2145 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
2052 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 2146 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
2053 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_swnaiirZEeyyC-O0_LlY9w" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> | 2147 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_tGkYexRqEe-4k7CzzL6IsA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_interface.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> |
2054 | <labelFormat>italic</labelFormat> | 2148 | <labelFormat>italic</labelFormat> |
2055 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | 2149 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.0/@style"/> |
2056 | </ownedStyle> | 2150 | </ownedStyle> |
2057 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 2151 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
2058 | </ownedDiagramElements> | 2152 | </ownedDiagramElements> |
@@ -2072,12 +2166,12 @@ | |||
2072 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WUsgHCrcEeyyC-O0_LlY9w" sourceNode="_NzpMACrZEeyyC-O0_LlY9w" targetNode="_RzK-YKA5EeuqkpDnuik1sg"> | 2166 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_WUsgHCrcEeyyC-O0_LlY9w" sourceNode="_NzpMACrZEeyyC-O0_LlY9w" targetNode="_RzK-YKA5EeuqkpDnuik1sg"> |
2073 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> | 2167 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> |
2074 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> | 2168 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//RuleDefinition"/> |
2075 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_OVMfAxEJEe2AArBmfNpEZA" targetArrow="InputClosedArrow" routingStyle="tree"> | 2169 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="__zCMCROzEe-4k7CzzL6IsA" targetArrow="InputClosedArrow" routingStyle="tree"> |
2076 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | 2170 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> |
2077 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_OVMfBBEJEe2AArBmfNpEZA" showIcon="false"> | 2171 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="__zCMChOzEe-4k7CzzL6IsA" showIcon="false"> |
2078 | <labelFormat>italic</labelFormat> | 2172 | <labelFormat>italic</labelFormat> |
2079 | </beginLabelStyle> | 2173 | </beginLabelStyle> |
2080 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_OVMfBREJEe2AArBmfNpEZA" showIcon="false"/> | 2174 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="__zCMCxOzEe-4k7CzzL6IsA" showIcon="false"/> |
2081 | </ownedStyle> | 2175 | </ownedStyle> |
2082 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 2176 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
2083 | </ownedDiagramElements> | 2177 | </ownedDiagramElements> |
@@ -2136,6 +2230,14 @@ | |||
2136 | </ownedStyle> | 2230 | </ownedStyle> |
2137 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | 2231 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> |
2138 | </ownedElements> | 2232 | </ownedElements> |
2233 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_Ck5GMB6fEe-D29eT4GV5Hg" name="PARTIAL" tooltipText=""> | ||
2234 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ReferenceKind/PARTIAL"/> | ||
2235 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ReferenceKind/PARTIAL"/> | ||
2236 | <ownedStyle xmi:type="diagram:BundledImage" uid="_Ck67YB6fEe-D29eT4GV5Hg" labelAlignment="LEFT"> | ||
2237 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2238 | </ownedStyle> | ||
2239 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2240 | </ownedElements> | ||
2139 | </ownedDiagramElements> | 2241 | </ownedDiagramElements> |
2140 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_78pRMF9mEe2rXNsIDUvqhw" name="FunctionDefinition" tooltipText="" outgoingEdges="_rKoQHF9nEe2rXNsIDUvqhw _S6YCJl9wEe2rXNsIDUvqhw _sMPaBmTvEe2qdtyPWAtoxA _RjRnQs9lEe6T2u19X9cqmQ" width="12" height="10"> | 2242 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_78pRMF9mEe2rXNsIDUvqhw" name="FunctionDefinition" tooltipText="" outgoingEdges="_rKoQHF9nEe2rXNsIDUvqhw _S6YCJl9wEe2rXNsIDUvqhw _sMPaBmTvEe2qdtyPWAtoxA _RjRnQs9lEe6T2u19X9cqmQ" width="12" height="10"> |
2141 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//FunctionDefinition"/> | 2243 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//FunctionDefinition"/> |
@@ -2680,6 +2782,76 @@ | |||
2680 | </ownedStyle> | 2782 | </ownedStyle> |
2681 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 2783 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
2682 | </ownedDiagramElements> | 2784 | </ownedDiagramElements> |
2785 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_3cdiQBOzEe-4k7CzzL6IsA" name="RuleKind" tooltipText="" width="12" height="10"> | ||
2786 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//RuleKind"/> | ||
2787 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//RuleKind"/> | ||
2788 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
2789 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
2790 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
2791 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_3cdiQROzEe-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
2792 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> | ||
2793 | </ownedStyle> | ||
2794 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> | ||
2795 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_5Cz1ABOzEe-4k7CzzL6IsA" name="REFINEMENT" tooltipText=""> | ||
2796 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//RuleKind/REFINEMENT"/> | ||
2797 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//RuleKind/REFINEMENT"/> | ||
2798 | <ownedStyle xmi:type="diagram:BundledImage" uid="_5Cz1AROzEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
2799 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2800 | </ownedStyle> | ||
2801 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2802 | </ownedElements> | ||
2803 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_7Hb_MBOzEe-4k7CzzL6IsA" name="PROPAGATION" tooltipText=""> | ||
2804 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//RuleKind/PROPAGATION"/> | ||
2805 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//RuleKind/PROPAGATION"/> | ||
2806 | <ownedStyle xmi:type="diagram:BundledImage" uid="_7Hb_MROzEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
2807 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2808 | </ownedStyle> | ||
2809 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2810 | </ownedElements> | ||
2811 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_8JiVYBOzEe-4k7CzzL6IsA" name="DECISION" tooltipText=""> | ||
2812 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//RuleKind/DECISION"/> | ||
2813 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//RuleKind/DECISION"/> | ||
2814 | <ownedStyle xmi:type="diagram:BundledImage" uid="_8JiVYROzEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
2815 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2816 | </ownedStyle> | ||
2817 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2818 | </ownedElements> | ||
2819 | </ownedDiagramElements> | ||
2820 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_Z12NQBO0Ee-4k7CzzL6IsA" name="ParameterBinding" tooltipText="" width="12" height="10"> | ||
2821 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ParameterBinding"/> | ||
2822 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ParameterBinding"/> | ||
2823 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
2824 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
2825 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
2826 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_Z12NQRO0Ee-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
2827 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> | ||
2828 | </ownedStyle> | ||
2829 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> | ||
2830 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_eBCbUBO0Ee-4k7CzzL6IsA" name="SINGLE" tooltipText=""> | ||
2831 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ParameterBinding/SINGLE"/> | ||
2832 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ParameterBinding/SINGLE"/> | ||
2833 | <ownedStyle xmi:type="diagram:BundledImage" uid="_eBCbURO0Ee-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
2834 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2835 | </ownedStyle> | ||
2836 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2837 | </ownedElements> | ||
2838 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_enuA0BO0Ee-4k7CzzL6IsA" name="FOCUS" tooltipText=""> | ||
2839 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ParameterBinding/FOCUS"/> | ||
2840 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ParameterBinding/FOCUS"/> | ||
2841 | <ownedStyle xmi:type="diagram:BundledImage" uid="_enun4BO0Ee-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
2842 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2843 | </ownedStyle> | ||
2844 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2845 | </ownedElements> | ||
2846 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_fGJCMBO0Ee-4k7CzzL6IsA" name="MULTI" tooltipText=""> | ||
2847 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ParameterBinding/MULTI"/> | ||
2848 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ParameterBinding/MULTI"/> | ||
2849 | <ownedStyle xmi:type="diagram:BundledImage" uid="_fGJCMRO0Ee-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
2850 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2851 | </ownedStyle> | ||
2852 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2853 | </ownedElements> | ||
2854 | </ownedDiagramElements> | ||
2683 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 2855 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
2684 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_CsWlsKA4EeuqkpDnuik1sg"/> | 2856 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_CsWlsKA4EeuqkpDnuik1sg"/> |
2685 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | 2857 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> |
@@ -2724,7 +2896,7 @@ | |||
2724 | <styles xmi:type="notation:FilteringStyle" xmi:id="_bTgeLF3tEe2LuOZzJ_LhLg"/> | 2896 | <styles xmi:type="notation:FilteringStyle" xmi:id="_bTgeLF3tEe2LuOZzJ_LhLg"/> |
2725 | </children> | 2897 | </children> |
2726 | <styles xmi:type="notation:ShapeStyle" xmi:id="_bTgeJ13tEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2898 | <styles xmi:type="notation:ShapeStyle" xmi:id="_bTgeJ13tEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2727 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bTgeKF3tEe2LuOZzJ_LhLg" x="1955" y="168" width="120" height="100"/> | 2899 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bTgeKF3tEe2LuOZzJ_LhLg" x="2123" y="168" width="120" height="100"/> |
2728 | </children> | 2900 | </children> |
2729 | <children xmi:type="notation:Node" xmi:id="_meWJcF3uEe2LuOZzJ_LhLg" type="2003" element="_mdrbEF3uEe2LuOZzJ_LhLg"> | 2901 | <children xmi:type="notation:Node" xmi:id="_meWJcF3uEe2LuOZzJ_LhLg" type="2003" element="_mdrbEF3uEe2LuOZzJ_LhLg"> |
2730 | <children xmi:type="notation:Node" xmi:id="_meWwgF3uEe2LuOZzJ_LhLg" type="5007"/> | 2902 | <children xmi:type="notation:Node" xmi:id="_meWwgF3uEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2791,7 +2963,7 @@ | |||
2791 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ccRVpl3wEe2LuOZzJ_LhLg"/> | 2963 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ccRVpl3wEe2LuOZzJ_LhLg"/> |
2792 | </children> | 2964 | </children> |
2793 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ccRVoV3wEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2965 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ccRVoV3wEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2794 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ccRVol3wEe2LuOZzJ_LhLg" x="1616" y="450" width="120" height="165"/> | 2966 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ccRVol3wEe2LuOZzJ_LhLg" x="1784" y="450" width="120" height="165"/> |
2795 | </children> | 2967 | </children> |
2796 | <children xmi:type="notation:Node" xmi:id="_R7b9sF38Ee2LuOZzJ_LhLg" type="2003" element="_R7XFMF38Ee2LuOZzJ_LhLg"> | 2968 | <children xmi:type="notation:Node" xmi:id="_R7b9sF38Ee2LuOZzJ_LhLg" type="2003" element="_R7XFMF38Ee2LuOZzJ_LhLg"> |
2797 | <children xmi:type="notation:Node" xmi:id="_R7b9s138Ee2LuOZzJ_LhLg" type="5007"/> | 2969 | <children xmi:type="notation:Node" xmi:id="_R7b9s138Ee2LuOZzJ_LhLg" type="5007"/> |
@@ -2840,7 +3012,7 @@ | |||
2840 | <styles xmi:type="notation:FilteringStyle" xmi:id="_87Ju5l4IEe2LuOZzJ_LhLg"/> | 3012 | <styles xmi:type="notation:FilteringStyle" xmi:id="_87Ju5l4IEe2LuOZzJ_LhLg"/> |
2841 | </children> | 3013 | </children> |
2842 | <styles xmi:type="notation:ShapeStyle" xmi:id="_87Ju4V4IEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8" italic="true"/> | 3014 | <styles xmi:type="notation:ShapeStyle" xmi:id="_87Ju4V4IEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8" italic="true"/> |
2843 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87Ju4l4IEe2LuOZzJ_LhLg" x="2820" y="168"/> | 3015 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87Ju4l4IEe2LuOZzJ_LhLg" x="2988" y="168"/> |
2844 | </children> | 3016 | </children> |
2845 | <children xmi:type="notation:Node" xmi:id="_JYXdgF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIwF4JEe2LuOZzJ_LhLg"> | 3017 | <children xmi:type="notation:Node" xmi:id="_JYXdgF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIwF4JEe2LuOZzJ_LhLg"> |
2846 | <children xmi:type="notation:Node" xmi:id="_JYXdg14JEe2LuOZzJ_LhLg" type="5007"/> | 3018 | <children xmi:type="notation:Node" xmi:id="_JYXdg14JEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2853,7 +3025,7 @@ | |||
2853 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYXdhl4JEe2LuOZzJ_LhLg"/> | 3025 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYXdhl4JEe2LuOZzJ_LhLg"/> |
2854 | </children> | 3026 | </children> |
2855 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYXdgV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 3027 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYXdgV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2856 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYXdgl4JEe2LuOZzJ_LhLg" x="2456" y="312"/> | 3028 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYXdgl4JEe2LuOZzJ_LhLg" x="2624" y="312"/> |
2857 | </children> | 3029 | </children> |
2858 | <children xmi:type="notation:Node" xmi:id="_JYYEkF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIw14JEe2LuOZzJ_LhLg"> | 3030 | <children xmi:type="notation:Node" xmi:id="_JYYEkF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIw14JEe2LuOZzJ_LhLg"> |
2859 | <children xmi:type="notation:Node" xmi:id="_JYYEk14JEe2LuOZzJ_LhLg" type="5007"/> | 3031 | <children xmi:type="notation:Node" xmi:id="_JYYEk14JEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2866,7 +3038,7 @@ | |||
2866 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEll4JEe2LuOZzJ_LhLg"/> | 3038 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEll4JEe2LuOZzJ_LhLg"/> |
2867 | </children> | 3039 | </children> |
2868 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEkV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 3040 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEkV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2869 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEkl4JEe2LuOZzJ_LhLg" x="2605" y="312"/> | 3041 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEkl4JEe2LuOZzJ_LhLg" x="2773" y="312"/> |
2870 | </children> | 3042 | </children> |
2871 | <children xmi:type="notation:Node" xmi:id="_JYYEl14JEe2LuOZzJ_LhLg" type="2003" element="_JYQv0l4JEe2LuOZzJ_LhLg"> | 3043 | <children xmi:type="notation:Node" xmi:id="_JYYEl14JEe2LuOZzJ_LhLg" type="2003" element="_JYQv0l4JEe2LuOZzJ_LhLg"> |
2872 | <children xmi:type="notation:Node" xmi:id="_JYYEml4JEe2LuOZzJ_LhLg" type="5007"/> | 3044 | <children xmi:type="notation:Node" xmi:id="_JYYEml4JEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2879,7 +3051,7 @@ | |||
2879 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEnV4JEe2LuOZzJ_LhLg"/> | 3051 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEnV4JEe2LuOZzJ_LhLg"/> |
2880 | </children> | 3052 | </children> |
2881 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEmF4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 3053 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEmF4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2882 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEmV4JEe2LuOZzJ_LhLg" x="2792" y="312"/> | 3054 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEmV4JEe2LuOZzJ_LhLg" x="2960" y="312"/> |
2883 | </children> | 3055 | </children> |
2884 | <children xmi:type="notation:Node" xmi:id="_9AqPEF4KEe2m7IaHDkh2Xg" type="2003" element="_9AeB0F4KEe2m7IaHDkh2Xg"> | 3056 | <children xmi:type="notation:Node" xmi:id="_9AqPEF4KEe2m7IaHDkh2Xg" type="2003" element="_9AeB0F4KEe2m7IaHDkh2Xg"> |
2885 | <children xmi:type="notation:Node" xmi:id="_9ArdMF4KEe2m7IaHDkh2Xg" type="5007"/> | 3057 | <children xmi:type="notation:Node" xmi:id="_9ArdMF4KEe2m7IaHDkh2Xg" type="5007"/> |
@@ -2910,7 +3082,7 @@ | |||
2910 | <styles xmi:type="notation:FilteringStyle" xmi:id="_GNwrhmTUEe2qdtyPWAtoxA"/> | 3082 | <styles xmi:type="notation:FilteringStyle" xmi:id="_GNwrhmTUEe2qdtyPWAtoxA"/> |
2911 | </children> | 3083 | </children> |
2912 | <styles xmi:type="notation:ShapeStyle" xmi:id="_GNwrgWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | 3084 | <styles xmi:type="notation:ShapeStyle" xmi:id="_GNwrgWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> |
2913 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GNwrgmTUEe2qdtyPWAtoxA" x="1952" y="312" width="123"/> | 3085 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GNwrgmTUEe2qdtyPWAtoxA" x="2120" y="312" width="123"/> |
2914 | </children> | 3086 | </children> |
2915 | <children xmi:type="notation:Node" xmi:id="_M-upAGTUEe2qdtyPWAtoxA" type="2003" element="_M-ZR0GTUEe2qdtyPWAtoxA"> | 3087 | <children xmi:type="notation:Node" xmi:id="_M-upAGTUEe2qdtyPWAtoxA" type="2003" element="_M-ZR0GTUEe2qdtyPWAtoxA"> |
2916 | <children xmi:type="notation:Node" xmi:id="_M-upA2TUEe2qdtyPWAtoxA" type="5007"/> | 3088 | <children xmi:type="notation:Node" xmi:id="_M-upA2TUEe2qdtyPWAtoxA" type="5007"/> |
@@ -2923,7 +3095,7 @@ | |||
2923 | <styles xmi:type="notation:FilteringStyle" xmi:id="_M-upBmTUEe2qdtyPWAtoxA"/> | 3095 | <styles xmi:type="notation:FilteringStyle" xmi:id="_M-upBmTUEe2qdtyPWAtoxA"/> |
2924 | </children> | 3096 | </children> |
2925 | <styles xmi:type="notation:ShapeStyle" xmi:id="_M-upAWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | 3097 | <styles xmi:type="notation:ShapeStyle" xmi:id="_M-upAWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> |
2926 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M-upAmTUEe2qdtyPWAtoxA" x="1608" y="312" width="135" height="100"/> | 3098 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M-upAmTUEe2qdtyPWAtoxA" x="1776" y="312" width="135" height="100"/> |
2927 | </children> | 3099 | </children> |
2928 | <children xmi:type="notation:Node" xmi:id="_QkXS8GTUEe2qdtyPWAtoxA" type="2003" element="_QkP-MGTUEe2qdtyPWAtoxA"> | 3100 | <children xmi:type="notation:Node" xmi:id="_QkXS8GTUEe2qdtyPWAtoxA" type="2003" element="_QkP-MGTUEe2qdtyPWAtoxA"> |
2929 | <children xmi:type="notation:Node" xmi:id="_QkXS82TUEe2qdtyPWAtoxA" type="5007"/> | 3101 | <children xmi:type="notation:Node" xmi:id="_QkXS82TUEe2qdtyPWAtoxA" type="5007"/> |
@@ -2968,7 +3140,7 @@ | |||
2968 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QkXS9mTUEe2qdtyPWAtoxA"/> | 3140 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QkXS9mTUEe2qdtyPWAtoxA"/> |
2969 | </children> | 3141 | </children> |
2970 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QkXS8WTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | 3142 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QkXS8WTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> |
2971 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QkXS8mTUEe2qdtyPWAtoxA" x="1954" y="448" height="179"/> | 3143 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QkXS8mTUEe2qdtyPWAtoxA" x="2122" y="448" height="179"/> |
2972 | </children> | 3144 | </children> |
2973 | <children xmi:type="notation:Node" xmi:id="_36XqIGTuEe2qdtyPWAtoxA" type="2003" element="_36CS8GTuEe2qdtyPWAtoxA"> | 3145 | <children xmi:type="notation:Node" xmi:id="_36XqIGTuEe2qdtyPWAtoxA" type="2003" element="_36CS8GTuEe2qdtyPWAtoxA"> |
2974 | <children xmi:type="notation:Node" xmi:id="_36YRMGTuEe2qdtyPWAtoxA" type="5007"/> | 3146 | <children xmi:type="notation:Node" xmi:id="_36YRMGTuEe2qdtyPWAtoxA" type="5007"/> |
@@ -3017,7 +3189,7 @@ | |||
3017 | <styles xmi:type="notation:FilteringStyle" xmi:id="_3ahdpmgpEe24RpwpWgpkFQ"/> | 3189 | <styles xmi:type="notation:FilteringStyle" xmi:id="_3ahdpmgpEe24RpwpWgpkFQ"/> |
3018 | </children> | 3190 | </children> |
3019 | <styles xmi:type="notation:ShapeStyle" xmi:id="_3ahdoWgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8"/> | 3191 | <styles xmi:type="notation:ShapeStyle" xmi:id="_3ahdoWgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8"/> |
3020 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3ahdomgpEe24RpwpWgpkFQ" x="2120" y="312" width="120" height="100"/> | 3192 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3ahdomgpEe24RpwpWgpkFQ" x="2288" y="312" width="120" height="100"/> |
3021 | </children> | 3193 | </children> |
3022 | <children xmi:type="notation:Node" xmi:id="_ZjfaEGkGEe24rIYSlCjKHA" type="2003" element="_Zi8AcGkGEe24rIYSlCjKHA"> | 3194 | <children xmi:type="notation:Node" xmi:id="_ZjfaEGkGEe24rIYSlCjKHA" type="2003" element="_Zi8AcGkGEe24rIYSlCjKHA"> |
3023 | <children xmi:type="notation:Node" xmi:id="_ZjkSkGkGEe24rIYSlCjKHA" type="5007"/> | 3195 | <children xmi:type="notation:Node" xmi:id="_ZjkSkGkGEe24rIYSlCjKHA" type="5007"/> |
@@ -3030,7 +3202,7 @@ | |||
3030 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ZjkSk2kGEe24rIYSlCjKHA"/> | 3202 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ZjkSk2kGEe24rIYSlCjKHA"/> |
3031 | </children> | 3203 | </children> |
3032 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ZjfaEWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> | 3204 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ZjfaEWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> |
3033 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZjfaEmkGEe24rIYSlCjKHA" x="3120" y="312" width="120" height="100"/> | 3205 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZjfaEmkGEe24rIYSlCjKHA" x="3288" y="312" width="120" height="100"/> |
3034 | </children> | 3206 | </children> |
3035 | <children xmi:type="notation:Node" xmi:id="_fdU7QGkGEe24rIYSlCjKHA" type="2003" element="_fdLKQGkGEe24rIYSlCjKHA"> | 3207 | <children xmi:type="notation:Node" xmi:id="_fdU7QGkGEe24rIYSlCjKHA" type="2003" element="_fdLKQGkGEe24rIYSlCjKHA"> |
3036 | <children xmi:type="notation:Node" xmi:id="_fdViUGkGEe24rIYSlCjKHA" type="5007"/> | 3208 | <children xmi:type="notation:Node" xmi:id="_fdViUGkGEe24rIYSlCjKHA" type="5007"/> |
@@ -3055,7 +3227,7 @@ | |||
3055 | <styles xmi:type="notation:FilteringStyle" xmi:id="_fdViU2kGEe24rIYSlCjKHA"/> | 3227 | <styles xmi:type="notation:FilteringStyle" xmi:id="_fdViU2kGEe24rIYSlCjKHA"/> |
3056 | </children> | 3228 | </children> |
3057 | <styles xmi:type="notation:ShapeStyle" xmi:id="_fdU7QWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> | 3229 | <styles xmi:type="notation:ShapeStyle" xmi:id="_fdU7QWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> |
3058 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fdU7QmkGEe24rIYSlCjKHA" x="3120" y="449"/> | 3230 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fdU7QmkGEe24rIYSlCjKHA" x="3288" y="449"/> |
3059 | </children> | 3231 | </children> |
3060 | <children xmi:type="notation:Node" xmi:id="_IYGPgNZUEe69IbObpvsypA" type="2003" element="_IXrYwNZUEe69IbObpvsypA"> | 3232 | <children xmi:type="notation:Node" xmi:id="_IYGPgNZUEe69IbObpvsypA" type="2003" element="_IXrYwNZUEe69IbObpvsypA"> |
3061 | <children xmi:type="notation:Node" xmi:id="_IYGPg9ZUEe69IbObpvsypA" type="5007"/> | 3233 | <children xmi:type="notation:Node" xmi:id="_IYGPg9ZUEe69IbObpvsypA" type="5007"/> |
@@ -3068,7 +3240,7 @@ | |||
3068 | <styles xmi:type="notation:FilteringStyle" xmi:id="_IYGPhtZUEe69IbObpvsypA"/> | 3240 | <styles xmi:type="notation:FilteringStyle" xmi:id="_IYGPhtZUEe69IbObpvsypA"/> |
3069 | </children> | 3241 | </children> |
3070 | <styles xmi:type="notation:ShapeStyle" xmi:id="_IYGPgdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> | 3242 | <styles xmi:type="notation:ShapeStyle" xmi:id="_IYGPgdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> |
3071 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IYGPgtZUEe69IbObpvsypA" x="1784" y="312" width="120" height="100"/> | 3243 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IYGPgtZUEe69IbObpvsypA" x="1952" y="312" width="120" height="100"/> |
3072 | </children> | 3244 | </children> |
3073 | <children xmi:type="notation:Node" xmi:id="_Nm2zYNZUEe69IbObpvsypA" type="2003" element="_Nmg1INZUEe69IbObpvsypA"> | 3245 | <children xmi:type="notation:Node" xmi:id="_Nm2zYNZUEe69IbObpvsypA" type="2003" element="_Nmg1INZUEe69IbObpvsypA"> |
3074 | <children xmi:type="notation:Node" xmi:id="_Nm2zY9ZUEe69IbObpvsypA" type="5007"/> | 3246 | <children xmi:type="notation:Node" xmi:id="_Nm2zY9ZUEe69IbObpvsypA" type="5007"/> |
@@ -3085,7 +3257,7 @@ | |||
3085 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Nm3actZUEe69IbObpvsypA"/> | 3257 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Nm3actZUEe69IbObpvsypA"/> |
3086 | </children> | 3258 | </children> |
3087 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Nm2zYdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> | 3259 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Nm2zYdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> |
3088 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Nm2zYtZUEe69IbObpvsypA" x="1784" y="449" width="120" height="100"/> | 3260 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Nm2zYtZUEe69IbObpvsypA" x="1952" y="449" width="120" height="100"/> |
3089 | </children> | 3261 | </children> |
3090 | <children xmi:type="notation:Node" xmi:id="_FTa2MNZXEe69IbObpvsypA" type="2003" element="_FTH7QNZXEe69IbObpvsypA"> | 3262 | <children xmi:type="notation:Node" xmi:id="_FTa2MNZXEe69IbObpvsypA" type="2003" element="_FTH7QNZXEe69IbObpvsypA"> |
3091 | <children xmi:type="notation:Node" xmi:id="_FTbdQNZXEe69IbObpvsypA" type="5007"/> | 3263 | <children xmi:type="notation:Node" xmi:id="_FTbdQNZXEe69IbObpvsypA" type="5007"/> |
@@ -3103,7 +3275,7 @@ | |||
3103 | <styles xmi:type="notation:FilteringStyle" xmi:id="_c0zXctcIEe6pjNxdSs0E0Q"/> | 3275 | <styles xmi:type="notation:FilteringStyle" xmi:id="_c0zXctcIEe6pjNxdSs0E0Q"/> |
3104 | </children> | 3276 | </children> |
3105 | <styles xmi:type="notation:ShapeStyle" xmi:id="_c0ue8NcIEe6pjNxdSs0E0Q" fontName="Noto Sans" fontHeight="8"/> | 3277 | <styles xmi:type="notation:ShapeStyle" xmi:id="_c0ue8NcIEe6pjNxdSs0E0Q" fontName="Noto Sans" fontHeight="8"/> |
3106 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_c0ue8dcIEe6pjNxdSs0E0Q" x="2288" y="312" width="120" height="100"/> | 3278 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_c0ue8dcIEe6pjNxdSs0E0Q" x="2456" y="312" width="120" height="100"/> |
3107 | </children> | 3279 | </children> |
3108 | <children xmi:type="notation:Node" xmi:id="_hOS68NjvEe66mJJuF_pPGg" type="2003" element="_hNitANjvEe66mJJuF_pPGg"> | 3280 | <children xmi:type="notation:Node" xmi:id="_hOS68NjvEe66mJJuF_pPGg" type="2003" element="_hNitANjvEe66mJJuF_pPGg"> |
3109 | <children xmi:type="notation:Node" xmi:id="_hOYagNjvEe66mJJuF_pPGg" type="5007"/> | 3281 | <children xmi:type="notation:Node" xmi:id="_hOYagNjvEe66mJJuF_pPGg" type="5007"/> |
@@ -3112,7 +3284,7 @@ | |||
3112 | <styles xmi:type="notation:FilteringStyle" xmi:id="_hOZBktjvEe66mJJuF_pPGg"/> | 3284 | <styles xmi:type="notation:FilteringStyle" xmi:id="_hOZBktjvEe66mJJuF_pPGg"/> |
3113 | </children> | 3285 | </children> |
3114 | <styles xmi:type="notation:ShapeStyle" xmi:id="_hOS68djvEe66mJJuF_pPGg" fontName="Noto Sans" fontHeight="8"/> | 3286 | <styles xmi:type="notation:ShapeStyle" xmi:id="_hOS68djvEe66mJJuF_pPGg" fontName="Noto Sans" fontHeight="8"/> |
3115 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hOS68tjvEe66mJJuF_pPGg" x="2964" y="312" width="120" height="100"/> | 3287 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hOS68tjvEe66mJJuF_pPGg" x="3132" y="312" width="120" height="100"/> |
3116 | </children> | 3288 | </children> |
3117 | <children xmi:type="notation:Node" xmi:id="_tkOK4NsVEe6c9ehqpe3s7A" type="2003" element="_tkAvgNsVEe6c9ehqpe3s7A"> | 3289 | <children xmi:type="notation:Node" xmi:id="_tkOK4NsVEe6c9ehqpe3s7A" type="2003" element="_tkAvgNsVEe6c9ehqpe3s7A"> |
3118 | <children xmi:type="notation:Node" xmi:id="_tkOK49sVEe6c9ehqpe3s7A" type="5007"/> | 3290 | <children xmi:type="notation:Node" xmi:id="_tkOK49sVEe6c9ehqpe3s7A" type="5007"/> |
@@ -3123,6 +3295,61 @@ | |||
3123 | <styles xmi:type="notation:ShapeStyle" xmi:id="_tkOK4dsVEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> | 3295 | <styles xmi:type="notation:ShapeStyle" xmi:id="_tkOK4dsVEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> |
3124 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tkOK4tsVEe6c9ehqpe3s7A" x="919" y="448" width="147"/> | 3296 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tkOK4tsVEe6c9ehqpe3s7A" x="919" y="448" width="147"/> |
3125 | </children> | 3297 | </children> |
3298 | <children xmi:type="notation:Node" xmi:id="_c_yWgBOwEe-4k7CzzL6IsA" type="2003" element="_c_NHsBOwEe-4k7CzzL6IsA"> | ||
3299 | <children xmi:type="notation:Node" xmi:id="_c_3PABOwEe-4k7CzzL6IsA" type="5007"/> | ||
3300 | <children xmi:type="notation:Node" xmi:id="_c_32EBOwEe-4k7CzzL6IsA" type="7004"> | ||
3301 | <children xmi:type="notation:Node" xmi:id="_npv-0BOwEe-4k7CzzL6IsA" type="3010" element="_npF3gBOwEe-4k7CzzL6IsA"> | ||
3302 | <styles xmi:type="notation:FontStyle" xmi:id="_npv-0ROwEe-4k7CzzL6IsA" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
3303 | <layoutConstraint xmi:type="notation:Location" xmi:id="_npv-0hOwEe-4k7CzzL6IsA"/> | ||
3304 | </children> | ||
3305 | <children xmi:type="notation:Node" xmi:id="_96Pv8BOxEe-4k7CzzL6IsA" type="3010" element="_95pTABOxEe-4k7CzzL6IsA"> | ||
3306 | <styles xmi:type="notation:FontStyle" xmi:id="_96Pv8ROxEe-4k7CzzL6IsA" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
3307 | <layoutConstraint xmi:type="notation:Location" xmi:id="_96Pv8hOxEe-4k7CzzL6IsA"/> | ||
3308 | </children> | ||
3309 | <styles xmi:type="notation:SortingStyle" xmi:id="_c_32EROwEe-4k7CzzL6IsA"/> | ||
3310 | <styles xmi:type="notation:FilteringStyle" xmi:id="_c_32EhOwEe-4k7CzzL6IsA"/> | ||
3311 | </children> | ||
3312 | <styles xmi:type="notation:ShapeStyle" xmi:id="_c_yWgROwEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3313 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_c_yWghOwEe-4k7CzzL6IsA" x="1608" y="312" width="120" height="123"/> | ||
3314 | </children> | ||
3315 | <children xmi:type="notation:Node" xmi:id="_gNr14BOwEe-4k7CzzL6IsA" type="2003" element="_gNJqYBOwEe-4k7CzzL6IsA"> | ||
3316 | <children xmi:type="notation:Node" xmi:id="_gNr14xOwEe-4k7CzzL6IsA" type="5007"/> | ||
3317 | <children xmi:type="notation:Node" xmi:id="_gNr15BOwEe-4k7CzzL6IsA" type="7004"> | ||
3318 | <children xmi:type="notation:Node" xmi:id="_huzqYBOwEe-4k7CzzL6IsA" type="3010" element="_huUiMBOwEe-4k7CzzL6IsA"> | ||
3319 | <styles xmi:type="notation:FontStyle" xmi:id="_huzqYROwEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3320 | <layoutConstraint xmi:type="notation:Location" xmi:id="_huzqYhOwEe-4k7CzzL6IsA"/> | ||
3321 | </children> | ||
3322 | <children xmi:type="notation:Node" xmi:id="_iW6zQBOwEe-4k7CzzL6IsA" type="3010" element="_iWYAsBOwEe-4k7CzzL6IsA"> | ||
3323 | <styles xmi:type="notation:FontStyle" xmi:id="_iW6zQROwEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3324 | <layoutConstraint xmi:type="notation:Location" xmi:id="_iW6zQhOwEe-4k7CzzL6IsA"/> | ||
3325 | </children> | ||
3326 | <children xmi:type="notation:Node" xmi:id="_nKNtsBOxEe-4k7CzzL6IsA" type="3010" element="_nJq7IBOxEe-4k7CzzL6IsA"> | ||
3327 | <styles xmi:type="notation:FontStyle" xmi:id="_nKNtsROxEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3328 | <layoutConstraint xmi:type="notation:Location" xmi:id="_nKNtshOxEe-4k7CzzL6IsA"/> | ||
3329 | </children> | ||
3330 | <styles xmi:type="notation:SortingStyle" xmi:id="_gNr15ROwEe-4k7CzzL6IsA"/> | ||
3331 | <styles xmi:type="notation:FilteringStyle" xmi:id="_gNr15hOwEe-4k7CzzL6IsA"/> | ||
3332 | </children> | ||
3333 | <styles xmi:type="notation:ShapeStyle" xmi:id="_gNr14ROwEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3334 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gNr14hOwEe-4k7CzzL6IsA" x="1608" y="600" width="120" height="100"/> | ||
3335 | </children> | ||
3336 | <children xmi:type="notation:Node" xmi:id="_4aF6EBOxEe-4k7CzzL6IsA" type="2003" element="_4ZutsBOxEe-4k7CzzL6IsA"> | ||
3337 | <children xmi:type="notation:Node" xmi:id="_4aF6ExOxEe-4k7CzzL6IsA" type="5007"/> | ||
3338 | <children xmi:type="notation:Node" xmi:id="_4aF6FBOxEe-4k7CzzL6IsA" type="7004"> | ||
3339 | <children xmi:type="notation:Node" xmi:id="_50fbgBOxEe-4k7CzzL6IsA" type="3010" element="_50L5gBOxEe-4k7CzzL6IsA"> | ||
3340 | <styles xmi:type="notation:FontStyle" xmi:id="_50fbgROxEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3341 | <layoutConstraint xmi:type="notation:Location" xmi:id="_50fbghOxEe-4k7CzzL6IsA"/> | ||
3342 | </children> | ||
3343 | <children xmi:type="notation:Node" xmi:id="_6dbDxhOxEe-4k7CzzL6IsA" type="3010" element="_6c108BOxEe-4k7CzzL6IsA"> | ||
3344 | <styles xmi:type="notation:FontStyle" xmi:id="_6dbDxxOxEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3345 | <layoutConstraint xmi:type="notation:Location" xmi:id="_6dbDyBOxEe-4k7CzzL6IsA"/> | ||
3346 | </children> | ||
3347 | <styles xmi:type="notation:SortingStyle" xmi:id="_4aF6FROxEe-4k7CzzL6IsA"/> | ||
3348 | <styles xmi:type="notation:FilteringStyle" xmi:id="_4aF6FhOxEe-4k7CzzL6IsA"/> | ||
3349 | </children> | ||
3350 | <styles xmi:type="notation:ShapeStyle" xmi:id="_4aF6EROxEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3351 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4aF6EhOxEe-4k7CzzL6IsA" x="1608" y="468" width="120" height="100"/> | ||
3352 | </children> | ||
3126 | <styles xmi:type="notation:DiagramStyle" xmi:id="_z1ff0l3lEe2LuOZzJ_LhLg"/> | 3353 | <styles xmi:type="notation:DiagramStyle" xmi:id="_z1ff0l3lEe2LuOZzJ_LhLg"/> |
3127 | <edges xmi:type="notation:Edge" xmi:id="_C-b04F3mEe2LuOZzJ_LhLg" type="4001" element="_C9_I8F3mEe2LuOZzJ_LhLg" source="_9ZUmgF3lEe2LuOZzJ_LhLg" target="_8bUtMF3lEe2LuOZzJ_LhLg"> | 3354 | <edges xmi:type="notation:Edge" xmi:id="_C-b04F3mEe2LuOZzJ_LhLg" type="4001" element="_C9_I8F3mEe2LuOZzJ_LhLg" source="_9ZUmgF3lEe2LuOZzJ_LhLg" target="_8bUtMF3lEe2LuOZzJ_LhLg"> |
3128 | <children xmi:type="notation:Node" xmi:id="_C-cb8F3mEe2LuOZzJ_LhLg" type="6001"> | 3355 | <children xmi:type="notation:Node" xmi:id="_C-cb8F3mEe2LuOZzJ_LhLg" type="6001"> |
@@ -3158,33 +3385,33 @@ | |||
3158 | </edges> | 3385 | </edges> |
3159 | <edges xmi:type="notation:Edge" xmi:id="_oAifgF3vEe2LuOZzJ_LhLg" type="4001" element="_oARZ0l3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> | 3386 | <edges xmi:type="notation:Edge" xmi:id="_oAifgF3vEe2LuOZzJ_LhLg" type="4001" element="_oARZ0l3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> |
3160 | <children xmi:type="notation:Node" xmi:id="_oAifhF3vEe2LuOZzJ_LhLg" type="6001"> | 3387 | <children xmi:type="notation:Node" xmi:id="_oAifhF3vEe2LuOZzJ_LhLg" type="6001"> |
3161 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifhV3vEe2LuOZzJ_LhLg" x="-281" y="-38"/> | 3388 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifhV3vEe2LuOZzJ_LhLg" x="-365" y="-38"/> |
3162 | </children> | 3389 | </children> |
3163 | <children xmi:type="notation:Node" xmi:id="_oAifhl3vEe2LuOZzJ_LhLg" type="6002"> | 3390 | <children xmi:type="notation:Node" xmi:id="_oAifhl3vEe2LuOZzJ_LhLg" type="6002"> |
3164 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifh13vEe2LuOZzJ_LhLg" x="-26" y="-68"/> | 3391 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifh13vEe2LuOZzJ_LhLg" x="-51" y="-68"/> |
3165 | </children> | 3392 | </children> |
3166 | <children xmi:type="notation:Node" xmi:id="_oAifiF3vEe2LuOZzJ_LhLg" type="6003"> | 3393 | <children xmi:type="notation:Node" xmi:id="_oAifiF3vEe2LuOZzJ_LhLg" type="6003"> |
3167 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifiV3vEe2LuOZzJ_LhLg" x="-324" y="-10"/> | 3394 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifiV3vEe2LuOZzJ_LhLg" x="-299" y="-10"/> |
3168 | </children> | 3395 | </children> |
3169 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_oAifgV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> | 3396 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_oAifgV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> |
3170 | <styles xmi:type="notation:FontStyle" xmi:id="_oAifgl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 3397 | <styles xmi:type="notation:FontStyle" xmi:id="_oAifgl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
3171 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oAifg13vEe2LuOZzJ_LhLg" points="[6, 0, 802, 50]$[6, -96, 802, -46]$[-714, -96, 82, -46]"/> | 3398 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oAifg13vEe2LuOZzJ_LhLg" points="[6, 0, 970, 50]$[6, -96, 970, -46]$[-882, -96, 82, -46]"/> |
3172 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifil3vEe2LuOZzJ_LhLg" id="(0.3050847457627119,0.0)"/> | 3399 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifil3vEe2LuOZzJ_LhLg" id="(0.3050847457627119,0.0)"/> |
3173 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifi13vEe2LuOZzJ_LhLg" id="(0.3050847457627119,1.0)"/> | 3400 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifi13vEe2LuOZzJ_LhLg" id="(0.3050847457627119,1.0)"/> |
3174 | </edges> | 3401 | </edges> |
3175 | <edges xmi:type="notation:Edge" xmi:id="_qyMHwF3vEe2LuOZzJ_LhLg" type="4001" element="_qx9eWF3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> | 3402 | <edges xmi:type="notation:Edge" xmi:id="_qyMHwF3vEe2LuOZzJ_LhLg" type="4001" element="_qx9eWF3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> |
3176 | <children xmi:type="notation:Node" xmi:id="_qyMHxF3vEe2LuOZzJ_LhLg" type="6001"> | 3403 | <children xmi:type="notation:Node" xmi:id="_qyMHxF3vEe2LuOZzJ_LhLg" type="6001"> |
3177 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHxV3vEe2LuOZzJ_LhLg" x="-354" y="-62"/> | 3404 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHxV3vEe2LuOZzJ_LhLg" x="-438" y="-62"/> |
3178 | </children> | 3405 | </children> |
3179 | <children xmi:type="notation:Node" xmi:id="_qyMHxl3vEe2LuOZzJ_LhLg" type="6002"> | 3406 | <children xmi:type="notation:Node" xmi:id="_qyMHxl3vEe2LuOZzJ_LhLg" type="6002"> |
3180 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHx13vEe2LuOZzJ_LhLg" x="-10" y="-83"/> | 3407 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHx13vEe2LuOZzJ_LhLg" x="-35" y="-83"/> |
3181 | </children> | 3408 | </children> |
3182 | <children xmi:type="notation:Node" xmi:id="_qyMHyF3vEe2LuOZzJ_LhLg" type="6003"> | 3409 | <children xmi:type="notation:Node" xmi:id="_qyMHyF3vEe2LuOZzJ_LhLg" type="6003"> |
3183 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHyV3vEe2LuOZzJ_LhLg" x="-330" y="-10"/> | 3410 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHyV3vEe2LuOZzJ_LhLg" x="-305" y="-10"/> |
3184 | </children> | 3411 | </children> |
3185 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_qyMHwV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> | 3412 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_qyMHwV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> |
3186 | <styles xmi:type="notation:FontStyle" xmi:id="_qyMHwl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 3413 | <styles xmi:type="notation:FontStyle" xmi:id="_qyMHwl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
3187 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qyMHw13vEe2LuOZzJ_LhLg" points="[0, 0, 796, 50]$[0, -120, 796, -70]$[-750, -120, 46, -70]"/> | 3414 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qyMHw13vEe2LuOZzJ_LhLg" points="[0, 0, 964, 50]$[0, -120, 964, -70]$[-918, -120, 46, -70]"/> |
3188 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHyl3vEe2LuOZzJ_LhLg" id="(0.6101694915254238,0.0)"/> | 3415 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHyl3vEe2LuOZzJ_LhLg" id="(0.6101694915254238,0.0)"/> |
3189 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHy13vEe2LuOZzJ_LhLg" id="(0.6101694915254238,1.0)"/> | 3416 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHy13vEe2LuOZzJ_LhLg" id="(0.6101694915254238,1.0)"/> |
3190 | </edges> | 3417 | </edges> |
@@ -3732,6 +3959,22 @@ | |||
3732 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vaGudtsVEe6c9ehqpe3s7A" id="(0.503448275862069,1.0)"/> | 3959 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vaGudtsVEe6c9ehqpe3s7A" id="(0.503448275862069,1.0)"/> |
3733 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vaGud9sVEe6c9ehqpe3s7A" id="(0.503448275862069,0.0)"/> | 3960 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vaGud9sVEe6c9ehqpe3s7A" id="(0.503448275862069,0.0)"/> |
3734 | </edges> | 3961 | </edges> |
3962 | <edges xmi:type="notation:Edge" xmi:id="_nOVOIBOwEe-4k7CzzL6IsA" type="4001" element="_nN6XfhOwEe-4k7CzzL6IsA" source="_c_yWgBOwEe-4k7CzzL6IsA" target="_meWJcF3uEe2LuOZzJ_LhLg"> | ||
3963 | <children xmi:type="notation:Node" xmi:id="_nOZfkBOwEe-4k7CzzL6IsA" type="6001"> | ||
3964 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nOZfkROwEe-4k7CzzL6IsA" y="-10"/> | ||
3965 | </children> | ||
3966 | <children xmi:type="notation:Node" xmi:id="_nOaGoBOwEe-4k7CzzL6IsA" type="6002"> | ||
3967 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nOaGoROwEe-4k7CzzL6IsA" y="10"/> | ||
3968 | </children> | ||
3969 | <children xmi:type="notation:Node" xmi:id="_nOaGohOwEe-4k7CzzL6IsA" type="6003"> | ||
3970 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nOaGoxOwEe-4k7CzzL6IsA" y="10"/> | ||
3971 | </children> | ||
3972 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_nOVOIROwEe-4k7CzzL6IsA" routing="Tree"/> | ||
3973 | <styles xmi:type="notation:FontStyle" xmi:id="_nOVOIhOwEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
3974 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nOVOIxOwEe-4k7CzzL6IsA" points="[0, 0, 199, 72]$[-199, -72, 0, 0]"/> | ||
3975 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nOb70BOwEe-4k7CzzL6IsA" id="(0.5084745762711864,0.0)"/> | ||
3976 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nOb70ROwEe-4k7CzzL6IsA" id="(0.5,0.5)"/> | ||
3977 | </edges> | ||
3735 | </data> | 3978 | </data> |
3736 | </ownedAnnotationEntries> | 3979 | </ownedAnnotationEntries> |
3737 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_z1k_YV3lEe2LuOZzJ_LhLg" source="DANNOTATION_CUSTOMIZATION_KEY"> | 3980 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_z1k_YV3lEe2LuOZzJ_LhLg" source="DANNOTATION_CUSTOMIZATION_KEY"> |
@@ -3808,7 +4051,7 @@ | |||
3808 | </ownedStyle> | 4051 | </ownedStyle> |
3809 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 4052 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
3810 | </ownedDiagramElements> | 4053 | </ownedDiagramElements> |
3811 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_mdrbEF3uEe2LuOZzJ_LhLg" name="UnaryExpr" tooltipText="" outgoingEdges="_FMB-xl3vEe2LuOZzJ_LhLg _uSiCAF3vEe2LuOZzJ_LhLg" incomingEdges="_vB8OTF4GEe2LuOZzJ_LhLg _EUlvyF4LEe2m7IaHDkh2Xg" width="12" height="10"> | 4054 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_mdrbEF3uEe2LuOZzJ_LhLg" name="UnaryExpr" tooltipText="" outgoingEdges="_FMB-xl3vEe2LuOZzJ_LhLg _uSiCAF3vEe2LuOZzJ_LhLg" incomingEdges="_vB8OTF4GEe2LuOZzJ_LhLg _EUlvyF4LEe2m7IaHDkh2Xg _nN6XfhOwEe-4k7CzzL6IsA" width="12" height="10"> |
3812 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> | 4055 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> |
3813 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> | 4056 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> |
3814 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 4057 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
@@ -4852,6 +5095,107 @@ | |||
4852 | </ownedStyle> | 5095 | </ownedStyle> |
4853 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | 5096 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> |
4854 | </ownedDiagramElements> | 5097 | </ownedDiagramElements> |
5098 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_c_NHsBOwEe-4k7CzzL6IsA" name="ModalExpr" tooltipText="" outgoingEdges="_nN6XfhOwEe-4k7CzzL6IsA" width="12" height="10"> | ||
5099 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
5100 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
5101 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5102 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5103 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5104 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_-VI8ShOxEe-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
5105 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
5106 | </ownedStyle> | ||
5107 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
5108 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_npF3gBOwEe-4k7CzzL6IsA" name="concreteness : Concreteness = PARTIAL" tooltipText=""> | ||
5109 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//ModalExpr/concreteness"/> | ||
5110 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//ModalExpr/concreteness"/> | ||
5111 | <ownedStyle xmi:type="diagram:BundledImage" uid="_oXtRAROwEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5112 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
5113 | </ownedStyle> | ||
5114 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
5115 | </ownedElements> | ||
5116 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_95pTABOxEe-4k7CzzL6IsA" name="modality : Modality = NONE" tooltipText=""> | ||
5117 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//ModalExpr/modality"/> | ||
5118 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//ModalExpr/modality"/> | ||
5119 | <ownedStyle xmi:type="diagram:BundledImage" uid="_-VKxYROxEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5120 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
5121 | </ownedStyle> | ||
5122 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
5123 | </ownedElements> | ||
5124 | </ownedDiagramElements> | ||
5125 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_gNJqYBOwEe-4k7CzzL6IsA" name="Modality" tooltipText="" width="12" height="10"> | ||
5126 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Modality"/> | ||
5127 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Modality"/> | ||
5128 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5129 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5130 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5131 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_gNJqYROwEe-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
5132 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> | ||
5133 | </ownedStyle> | ||
5134 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> | ||
5135 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_huUiMBOwEe-4k7CzzL6IsA" name="NONE" tooltipText=""> | ||
5136 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/NONE"/> | ||
5137 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/NONE"/> | ||
5138 | <ownedStyle xmi:type="diagram:BundledImage" uid="_huUiMROwEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5139 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
5140 | </ownedStyle> | ||
5141 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
5142 | </ownedElements> | ||
5143 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_iWYAsBOwEe-4k7CzzL6IsA" name="MUST" tooltipText=""> | ||
5144 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MUST"/> | ||
5145 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MUST"/> | ||
5146 | <ownedStyle xmi:type="diagram:BundledImage" uid="_iWYAsROwEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5147 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
5148 | </ownedStyle> | ||
5149 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
5150 | </ownedElements> | ||
5151 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_nJq7IBOxEe-4k7CzzL6IsA" name="MAY" tooltipText=""> | ||
5152 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MAY"/> | ||
5153 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MAY"/> | ||
5154 | <ownedStyle xmi:type="diagram:BundledImage" uid="_nJq7IROxEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5155 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
5156 | </ownedStyle> | ||
5157 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
5158 | </ownedElements> | ||
5159 | </ownedDiagramElements> | ||
5160 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_nN6XfhOwEe-4k7CzzL6IsA" sourceNode="_c_NHsBOwEe-4k7CzzL6IsA" targetNode="_mdrbEF3uEe2LuOZzJ_LhLg"> | ||
5161 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
5162 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
5163 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_-VPp5hOxEe-4k7CzzL6IsA" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
5164 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | ||
5165 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_-VPp5xOxEe-4k7CzzL6IsA" showIcon="false"> | ||
5166 | <labelFormat>italic</labelFormat> | ||
5167 | </beginLabelStyle> | ||
5168 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_-VPp6BOxEe-4k7CzzL6IsA" showIcon="false"/> | ||
5169 | </ownedStyle> | ||
5170 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | ||
5171 | </ownedDiagramElements> | ||
5172 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_4ZutsBOxEe-4k7CzzL6IsA" name="Concreteness" tooltipText="" width="12" height="10"> | ||
5173 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Concreteness"/> | ||
5174 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Concreteness"/> | ||
5175 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5176 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5177 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5178 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_4ZutsROxEe-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
5179 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> | ||
5180 | </ownedStyle> | ||
5181 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> | ||
5182 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_50L5gBOxEe-4k7CzzL6IsA" name="PARTIAL" tooltipText=""> | ||
5183 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Concreteness/PARTIAL"/> | ||
5184 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Concreteness/PARTIAL"/> | ||
5185 | <ownedStyle xmi:type="diagram:BundledImage" uid="_50L5gROxEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5186 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
5187 | </ownedStyle> | ||
5188 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
5189 | </ownedElements> | ||
5190 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_6c108BOxEe-4k7CzzL6IsA" name="CANDIDATE" tooltipText=""> | ||
5191 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Concreteness/CANDIDATE"/> | ||
5192 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Concreteness/CANDIDATE"/> | ||
5193 | <ownedStyle xmi:type="diagram:BundledImage" uid="_6c108ROxEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5194 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
5195 | </ownedStyle> | ||
5196 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
5197 | </ownedElements> | ||
5198 | </ownedDiagramElements> | ||
4855 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 5199 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
4856 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_z1aAQF3lEe2LuOZzJ_LhLg"/> | 5200 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_z1aAQF3lEe2LuOZzJ_LhLg"/> |
4857 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | 5201 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> |
@@ -4869,20 +5213,16 @@ | |||
4869 | <styles xmi:type="notation:FilteringStyle" xmi:id="_yj6zVl4eEe2rXNsIDUvqhw"/> | 5213 | <styles xmi:type="notation:FilteringStyle" xmi:id="_yj6zVl4eEe2rXNsIDUvqhw"/> |
4870 | </children> | 5214 | </children> |
4871 | <styles xmi:type="notation:ShapeStyle" xmi:id="_yj6zUV4eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> | 5215 | <styles xmi:type="notation:ShapeStyle" xmi:id="_yj6zUV4eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> |
4872 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yj6zUl4eEe2rXNsIDUvqhw" x="357" y="24"/> | 5216 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yj6zUl4eEe2rXNsIDUvqhw" x="786" y="48"/> |
4873 | </children> | 5217 | </children> |
4874 | <children xmi:type="notation:Node" xmi:id="_z9rbk14eEe2rXNsIDUvqhw" type="2003" element="_z9nxMF4eEe2rXNsIDUvqhw"> | 5218 | <children xmi:type="notation:Node" xmi:id="_z9rbk14eEe2rXNsIDUvqhw" type="2003" element="_z9nxMF4eEe2rXNsIDUvqhw"> |
4875 | <children xmi:type="notation:Node" xmi:id="_z9rbll4eEe2rXNsIDUvqhw" type="5007"/> | 5219 | <children xmi:type="notation:Node" xmi:id="_z9rbll4eEe2rXNsIDUvqhw" type="5007"/> |
4876 | <children xmi:type="notation:Node" xmi:id="_z9rbl14eEe2rXNsIDUvqhw" type="7004"> | 5220 | <children xmi:type="notation:Node" xmi:id="_z9rbl14eEe2rXNsIDUvqhw" type="7004"> |
4877 | <children xmi:type="notation:Node" xmi:id="_z9sCql4eEe2rXNsIDUvqhw" type="3010" element="_z9qNcF4eEe2rXNsIDUvqhw"> | ||
4878 | <styles xmi:type="notation:FontStyle" xmi:id="_z9sCq14eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
4879 | <layoutConstraint xmi:type="notation:Location" xmi:id="_z9sCrF4eEe2rXNsIDUvqhw"/> | ||
4880 | </children> | ||
4881 | <styles xmi:type="notation:SortingStyle" xmi:id="_z9rbmF4eEe2rXNsIDUvqhw"/> | 5221 | <styles xmi:type="notation:SortingStyle" xmi:id="_z9rbmF4eEe2rXNsIDUvqhw"/> |
4882 | <styles xmi:type="notation:FilteringStyle" xmi:id="_z9rbmV4eEe2rXNsIDUvqhw"/> | 5222 | <styles xmi:type="notation:FilteringStyle" xmi:id="_z9rbmV4eEe2rXNsIDUvqhw"/> |
4883 | </children> | 5223 | </children> |
4884 | <styles xmi:type="notation:ShapeStyle" xmi:id="_z9rblF4eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5224 | <styles xmi:type="notation:ShapeStyle" xmi:id="_z9rblF4eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
4885 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z9rblV4eEe2rXNsIDUvqhw" x="336" y="180"/> | 5225 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z9rblV4eEe2rXNsIDUvqhw" x="328" y="48"/> |
4886 | </children> | 5226 | </children> |
4887 | <children xmi:type="notation:Node" xmi:id="_z9sCoF4eEe2rXNsIDUvqhw" type="2003" element="_z9oYQF4eEe2rXNsIDUvqhw"> | 5227 | <children xmi:type="notation:Node" xmi:id="_z9sCoF4eEe2rXNsIDUvqhw" type="2003" element="_z9oYQF4eEe2rXNsIDUvqhw"> |
4888 | <children xmi:type="notation:Node" xmi:id="_z9sCo14eEe2rXNsIDUvqhw" type="5007"/> | 5228 | <children xmi:type="notation:Node" xmi:id="_z9sCo14eEe2rXNsIDUvqhw" type="5007"/> |
@@ -4891,9 +5231,9 @@ | |||
4891 | <styles xmi:type="notation:FilteringStyle" xmi:id="_z9sCpl4eEe2rXNsIDUvqhw"/> | 5231 | <styles xmi:type="notation:FilteringStyle" xmi:id="_z9sCpl4eEe2rXNsIDUvqhw"/> |
4892 | </children> | 5232 | </children> |
4893 | <styles xmi:type="notation:ShapeStyle" xmi:id="_z9sCoV4eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> | 5233 | <styles xmi:type="notation:ShapeStyle" xmi:id="_z9sCoV4eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> |
4894 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z9sCol4eEe2rXNsIDUvqhw" x="166" y="356"/> | 5234 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z9sCol4eEe2rXNsIDUvqhw" x="158" y="224"/> |
4895 | </children> | 5235 | </children> |
4896 | <children xmi:type="notation:Node" xmi:id="_A-j38F4fEe2rXNsIDUvqhw" type="2003" element="_A-fmgF4fEe2rXNsIDUvqhw"> | 5236 | <children xmi:type="notation:Node" xmi:id="_A-j38F4fEe2rXNsIDUvqhw" visible="false" type="2003" element="_A-fmgF4fEe2rXNsIDUvqhw"> |
4897 | <children xmi:type="notation:Node" xmi:id="_A-j3814fEe2rXNsIDUvqhw" type="5007"/> | 5237 | <children xmi:type="notation:Node" xmi:id="_A-j3814fEe2rXNsIDUvqhw" type="5007"/> |
4898 | <children xmi:type="notation:Node" xmi:id="_A-j39F4fEe2rXNsIDUvqhw" type="7004"> | 5238 | <children xmi:type="notation:Node" xmi:id="_A-j39F4fEe2rXNsIDUvqhw" type="7004"> |
4899 | <styles xmi:type="notation:SortingStyle" xmi:id="_A-j39V4fEe2rXNsIDUvqhw"/> | 5239 | <styles xmi:type="notation:SortingStyle" xmi:id="_A-j39V4fEe2rXNsIDUvqhw"/> |
@@ -4909,7 +5249,7 @@ | |||
4909 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ChaKzV4fEe2rXNsIDUvqhw"/> | 5249 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ChaKzV4fEe2rXNsIDUvqhw"/> |
4910 | </children> | 5250 | </children> |
4911 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ChaKyF4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5251 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ChaKyF4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
4912 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChaKyV4fEe2rXNsIDUvqhw" x="240" y="516" width="159"/> | 5252 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChaKyV4fEe2rXNsIDUvqhw" x="232" y="384" width="159"/> |
4913 | </children> | 5253 | </children> |
4914 | <children xmi:type="notation:Node" xmi:id="_ChaKzl4fEe2rXNsIDUvqhw" type="2003" element="_ChVSQF4fEe2rXNsIDUvqhw"> | 5254 | <children xmi:type="notation:Node" xmi:id="_ChaKzl4fEe2rXNsIDUvqhw" type="2003" element="_ChVSQF4fEe2rXNsIDUvqhw"> |
4915 | <children xmi:type="notation:Node" xmi:id="_Chax0F4fEe2rXNsIDUvqhw" type="5007"/> | 5255 | <children xmi:type="notation:Node" xmi:id="_Chax0F4fEe2rXNsIDUvqhw" type="5007"/> |
@@ -4918,7 +5258,7 @@ | |||
4918 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Chax014fEe2rXNsIDUvqhw"/> | 5258 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Chax014fEe2rXNsIDUvqhw"/> |
4919 | </children> | 5259 | </children> |
4920 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ChaKz14fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5260 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ChaKz14fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
4921 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChaK0F4fEe2rXNsIDUvqhw" x="20" y="516"/> | 5261 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChaK0F4fEe2rXNsIDUvqhw" x="27" y="384"/> |
4922 | </children> | 5262 | </children> |
4923 | <children xmi:type="notation:Node" xmi:id="_85Kp8GTvEe2qdtyPWAtoxA" type="2003" element="_85G_kGTvEe2qdtyPWAtoxA"> | 5263 | <children xmi:type="notation:Node" xmi:id="_85Kp8GTvEe2qdtyPWAtoxA" type="2003" element="_85G_kGTvEe2qdtyPWAtoxA"> |
4924 | <children xmi:type="notation:Node" xmi:id="_85Kp82TvEe2qdtyPWAtoxA" type="5007"/> | 5264 | <children xmi:type="notation:Node" xmi:id="_85Kp82TvEe2qdtyPWAtoxA" type="5007"/> |
@@ -4927,7 +5267,7 @@ | |||
4927 | <styles xmi:type="notation:FilteringStyle" xmi:id="_85Kp9mTvEe2qdtyPWAtoxA"/> | 5267 | <styles xmi:type="notation:FilteringStyle" xmi:id="_85Kp9mTvEe2qdtyPWAtoxA"/> |
4928 | </children> | 5268 | </children> |
4929 | <styles xmi:type="notation:ShapeStyle" xmi:id="_85Kp8WTvEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8" italic="true"/> | 5269 | <styles xmi:type="notation:ShapeStyle" xmi:id="_85Kp8WTvEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8" italic="true"/> |
4930 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_85Kp8mTvEe2qdtyPWAtoxA" x="44" y="180"/> | 5270 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_85Kp8mTvEe2qdtyPWAtoxA" x="36" y="48"/> |
4931 | </children> | 5271 | </children> |
4932 | <children xmi:type="notation:Node" xmi:id="_IhNHMGgpEe24RpwpWgpkFQ" type="2003" element="_IhJc0GgpEe24RpwpWgpkFQ"> | 5272 | <children xmi:type="notation:Node" xmi:id="_IhNHMGgpEe24RpwpWgpkFQ" type="2003" element="_IhJc0GgpEe24RpwpWgpkFQ"> |
4933 | <children xmi:type="notation:Node" xmi:id="_IhNHM2gpEe24RpwpWgpkFQ" type="5007"/> | 5273 | <children xmi:type="notation:Node" xmi:id="_IhNHM2gpEe24RpwpWgpkFQ" type="5007"/> |
@@ -4936,7 +5276,29 @@ | |||
4936 | <styles xmi:type="notation:FilteringStyle" xmi:id="_IhNHNmgpEe24RpwpWgpkFQ"/> | 5276 | <styles xmi:type="notation:FilteringStyle" xmi:id="_IhNHNmgpEe24RpwpWgpkFQ"/> |
4937 | </children> | 5277 | </children> |
4938 | <styles xmi:type="notation:ShapeStyle" xmi:id="_IhNHMWgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8" italic="true"/> | 5278 | <styles xmi:type="notation:ShapeStyle" xmi:id="_IhNHMWgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8" italic="true"/> |
4939 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IhNHMmgpEe24RpwpWgpkFQ" x="636" y="356"/> | 5279 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IhNHMmgpEe24RpwpWgpkFQ" x="459" y="224"/> |
5280 | </children> | ||
5281 | <children xmi:type="notation:Node" xmi:id="_dZ_BIBReEe-4k7CzzL6IsA" type="2003" element="_dZ46gBReEe-4k7CzzL6IsA"> | ||
5282 | <children xmi:type="notation:Node" xmi:id="_dZ_BIxReEe-4k7CzzL6IsA" type="5007"/> | ||
5283 | <children xmi:type="notation:Node" xmi:id="_dZ_BJBReEe-4k7CzzL6IsA" type="7004"> | ||
5284 | <styles xmi:type="notation:SortingStyle" xmi:id="_dZ_BJRReEe-4k7CzzL6IsA"/> | ||
5285 | <styles xmi:type="notation:FilteringStyle" xmi:id="_dZ_BJhReEe-4k7CzzL6IsA"/> | ||
5286 | </children> | ||
5287 | <styles xmi:type="notation:ShapeStyle" xmi:id="_dZ_BIRReEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8" italic="true"/> | ||
5288 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dZ_BIhReEe-4k7CzzL6IsA" x="252" y="576"/> | ||
5289 | </children> | ||
5290 | <children xmi:type="notation:Node" xmi:id="_W77iOBRqEe-4k7CzzL6IsA" type="2003" element="_W7ZWoBRqEe-4k7CzzL6IsA"> | ||
5291 | <children xmi:type="notation:Node" xmi:id="_W77iOxRqEe-4k7CzzL6IsA" type="5007"/> | ||
5292 | <children xmi:type="notation:Node" xmi:id="_W77iPBRqEe-4k7CzzL6IsA" type="7004"> | ||
5293 | <children xmi:type="notation:Node" xmi:id="_bZwYUBRqEe-4k7CzzL6IsA" type="3010" element="_bZWIoBRqEe-4k7CzzL6IsA"> | ||
5294 | <styles xmi:type="notation:FontStyle" xmi:id="_bZwYURRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5295 | <layoutConstraint xmi:type="notation:Location" xmi:id="_bZwYUhRqEe-4k7CzzL6IsA"/> | ||
5296 | </children> | ||
5297 | <styles xmi:type="notation:SortingStyle" xmi:id="_W77iPRRqEe-4k7CzzL6IsA"/> | ||
5298 | <styles xmi:type="notation:FilteringStyle" xmi:id="_W77iPhRqEe-4k7CzzL6IsA"/> | ||
5299 | </children> | ||
5300 | <styles xmi:type="notation:ShapeStyle" xmi:id="_W77iORRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5301 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_W77iOhRqEe-4k7CzzL6IsA" x="786" y="432" width="120" height="100"/> | ||
4940 | </children> | 5302 | </children> |
4941 | <styles xmi:type="notation:DiagramStyle" xmi:id="_xkD40l4eEe2rXNsIDUvqhw"/> | 5303 | <styles xmi:type="notation:DiagramStyle" xmi:id="_xkD40l4eEe2rXNsIDUvqhw"/> |
4942 | <edges xmi:type="notation:Edge" xmi:id="_z9sps14eEe2rXNsIDUvqhw" type="4001" element="_z9q0gF4eEe2rXNsIDUvqhw" source="_z9rbk14eEe2rXNsIDUvqhw" target="_z9sCoF4eEe2rXNsIDUvqhw"> | 5304 | <edges xmi:type="notation:Edge" xmi:id="_z9sps14eEe2rXNsIDUvqhw" type="4001" element="_z9q0gF4eEe2rXNsIDUvqhw" source="_z9rbk14eEe2rXNsIDUvqhw" target="_z9sCoF4eEe2rXNsIDUvqhw"> |
@@ -4955,38 +5317,6 @@ | |||
4955 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z9spvV4eEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5317 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z9spvV4eEe2rXNsIDUvqhw" id="(0.5,0.5)"/> |
4956 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z9spvl4eEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5318 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z9spvl4eEe2rXNsIDUvqhw" id="(0.5,0.5)"/> |
4957 | </edges> | 5319 | </edges> |
4958 | <edges xmi:type="notation:Edge" xmi:id="_z9spv14eEe2rXNsIDUvqhw" type="4001" element="_z9q0il4eEe2rXNsIDUvqhw" source="_z9rbk14eEe2rXNsIDUvqhw" target="_yj6zUF4eEe2rXNsIDUvqhw"> | ||
4959 | <children xmi:type="notation:Node" xmi:id="_z9spw14eEe2rXNsIDUvqhw" type="6001"> | ||
4960 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z9spxF4eEe2rXNsIDUvqhw" y="-10"/> | ||
4961 | </children> | ||
4962 | <children xmi:type="notation:Node" xmi:id="_z9tQwF4eEe2rXNsIDUvqhw" type="6002"> | ||
4963 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z9tQwV4eEe2rXNsIDUvqhw" y="10"/> | ||
4964 | </children> | ||
4965 | <children xmi:type="notation:Node" xmi:id="_z9tQwl4eEe2rXNsIDUvqhw" type="6003"> | ||
4966 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z9tQw14eEe2rXNsIDUvqhw" y="10"/> | ||
4967 | </children> | ||
4968 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_z9spwF4eEe2rXNsIDUvqhw" routing="Tree"/> | ||
4969 | <styles xmi:type="notation:FontStyle" xmi:id="_z9spwV4eEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
4970 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_z9spwl4eEe2rXNsIDUvqhw" points="[0, 0, -71, 555]$[71, -555, 0, 0]"/> | ||
4971 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z9tQxF4eEe2rXNsIDUvqhw" id="(0.3522012578616352,0.05102040816326531)"/> | ||
4972 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_z9tQxV4eEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | ||
4973 | </edges> | ||
4974 | <edges xmi:type="notation:Edge" xmi:id="_ChbY4l4fEe2rXNsIDUvqhw" type="4001" element="_ChYVqV4fEe2rXNsIDUvqhw" source="_ChaKx14fEe2rXNsIDUvqhw" target="_A-j38F4fEe2rXNsIDUvqhw"> | ||
4975 | <children xmi:type="notation:Node" xmi:id="_ChbY5l4fEe2rXNsIDUvqhw" type="6001"> | ||
4976 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChbY514fEe2rXNsIDUvqhw" x="-5" y="34"/> | ||
4977 | </children> | ||
4978 | <children xmi:type="notation:Node" xmi:id="_ChbY6F4fEe2rXNsIDUvqhw" type="6002"> | ||
4979 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChbY6V4fEe2rXNsIDUvqhw" x="25" y="-4"/> | ||
4980 | </children> | ||
4981 | <children xmi:type="notation:Node" xmi:id="_ChbY6l4fEe2rXNsIDUvqhw" type="6003"> | ||
4982 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChbY614fEe2rXNsIDUvqhw" x="-19" y="-10"/> | ||
4983 | </children> | ||
4984 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_ChbY414fEe2rXNsIDUvqhw" routing="Rectilinear"/> | ||
4985 | <styles xmi:type="notation:FontStyle" xmi:id="_ChbY5F4fEe2rXNsIDUvqhw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | ||
4986 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ChbY5V4fEe2rXNsIDUvqhw" points="[5, 49, 24, -74]$[5, 119, 24, -4]"/> | ||
4987 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ChbY7F4fEe2rXNsIDUvqhw" id="(0.4681528662420382,0.5)"/> | ||
4988 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ChbY7V4fEe2rXNsIDUvqhw" id="(0.288135593220339,0.04081632653061224)"/> | ||
4989 | </edges> | ||
4990 | <edges xmi:type="notation:Edge" xmi:id="_ChcnBF4fEe2rXNsIDUvqhw" type="4001" element="_ChY8uV4fEe2rXNsIDUvqhw" source="_ChaKx14fEe2rXNsIDUvqhw" target="_z9sCoF4eEe2rXNsIDUvqhw"> | 5320 | <edges xmi:type="notation:Edge" xmi:id="_ChcnBF4fEe2rXNsIDUvqhw" type="4001" element="_ChY8uV4fEe2rXNsIDUvqhw" source="_ChaKx14fEe2rXNsIDUvqhw" target="_z9sCoF4eEe2rXNsIDUvqhw"> |
4991 | <children xmi:type="notation:Node" xmi:id="_ChcnCF4fEe2rXNsIDUvqhw" type="6001"> | 5321 | <children xmi:type="notation:Node" xmi:id="_ChcnCF4fEe2rXNsIDUvqhw" type="6001"> |
4992 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChcnCV4fEe2rXNsIDUvqhw" y="-10"/> | 5322 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ChcnCV4fEe2rXNsIDUvqhw" y="-10"/> |
@@ -5037,20 +5367,84 @@ | |||
5037 | </edges> | 5367 | </edges> |
5038 | <edges xmi:type="notation:Edge" xmi:id="_jkascGkGEe24rIYSlCjKHA" type="4001" element="_CxoVTGgpEe24RpwpWgpkFQ" source="_z9rbk14eEe2rXNsIDUvqhw" target="_IhNHMGgpEe24RpwpWgpkFQ"> | 5368 | <edges xmi:type="notation:Edge" xmi:id="_jkascGkGEe24rIYSlCjKHA" type="4001" element="_CxoVTGgpEe24RpwpWgpkFQ" source="_z9rbk14eEe2rXNsIDUvqhw" target="_IhNHMGgpEe24RpwpWgpkFQ"> |
5039 | <children xmi:type="notation:Node" xmi:id="_jkbTg2kGEe24rIYSlCjKHA" type="6001"> | 5369 | <children xmi:type="notation:Node" xmi:id="_jkbTg2kGEe24rIYSlCjKHA" type="6001"> |
5040 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jkbThGkGEe24rIYSlCjKHA" x="-72" y="-16"/> | 5370 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jkbThGkGEe24rIYSlCjKHA" x="22" y="-16"/> |
5041 | </children> | 5371 | </children> |
5042 | <children xmi:type="notation:Node" xmi:id="_jkbThWkGEe24rIYSlCjKHA" type="6002"> | 5372 | <children xmi:type="notation:Node" xmi:id="_jkbThWkGEe24rIYSlCjKHA" type="6002"> |
5043 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jkbThmkGEe24rIYSlCjKHA" x="52" y="10"/> | 5373 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jkbThmkGEe24rIYSlCjKHA" x="30" y="-73"/> |
5044 | </children> | 5374 | </children> |
5045 | <children xmi:type="notation:Node" xmi:id="_jkbTh2kGEe24rIYSlCjKHA" type="6003"> | 5375 | <children xmi:type="notation:Node" xmi:id="_jkbTh2kGEe24rIYSlCjKHA" type="6003"> |
5046 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jkbTiGkGEe24rIYSlCjKHA" x="6" y="23"/> | 5376 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jkbTiGkGEe24rIYSlCjKHA" x="18" y="11"/> |
5047 | </children> | 5377 | </children> |
5048 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_jkbTgGkGEe24rIYSlCjKHA" routing="Rectilinear"/> | 5378 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_jkbTgGkGEe24rIYSlCjKHA" routing="Rectilinear"/> |
5049 | <styles xmi:type="notation:FontStyle" xmi:id="_jkbTgWkGEe24rIYSlCjKHA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 5379 | <styles xmi:type="notation:FontStyle" xmi:id="_jkbTgWkGEe24rIYSlCjKHA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
5050 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jkbTgmkGEe24rIYSlCjKHA" points="[13, 0, -225, -91]$[13, 46, -225, -45]$[251, 46, 13, -45]$[251, 78, 13, -13]"/> | 5380 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_jkbTgmkGEe24rIYSlCjKHA" points="[3, 0, -93, -91]$[3, 46, -93, -45]$[100, 46, 4, -45]$[100, 78, 4, -13]"/> |
5051 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jkchoGkGEe24rIYSlCjKHA" id="(0.6792452830188679,1.0)"/> | 5381 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jkchoGkGEe24rIYSlCjKHA" id="(0.6792452830188679,1.0)"/> |
5052 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jkchoWkGEe24rIYSlCjKHA" id="(0.3813559322033898,0.1326530612244898)"/> | 5382 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_jkchoWkGEe24rIYSlCjKHA" id="(0.3813559322033898,0.1326530612244898)"/> |
5053 | </edges> | 5383 | </edges> |
5384 | <edges xmi:type="notation:Edge" xmi:id="_dZ_BJxReEe-4k7CzzL6IsA" visible="false" type="4001" element="_dZ9zEhReEe-4k7CzzL6IsA" source="_A-j38F4fEe2rXNsIDUvqhw" target="_dZ_BIBReEe-4k7CzzL6IsA"> | ||
5385 | <children xmi:type="notation:Node" xmi:id="_dZ_oMBReEe-4k7CzzL6IsA" type="6001"> | ||
5386 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dZ_oMRReEe-4k7CzzL6IsA" y="-10"/> | ||
5387 | </children> | ||
5388 | <children xmi:type="notation:Node" xmi:id="_dZ_oMhReEe-4k7CzzL6IsA" type="6002"> | ||
5389 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dZ_oMxReEe-4k7CzzL6IsA" y="10"/> | ||
5390 | </children> | ||
5391 | <children xmi:type="notation:Node" xmi:id="_dZ_oNBReEe-4k7CzzL6IsA" type="6003"> | ||
5392 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dZ_oNRReEe-4k7CzzL6IsA" y="10"/> | ||
5393 | </children> | ||
5394 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_dZ_BKBReEe-4k7CzzL6IsA" routing="Tree"/> | ||
5395 | <styles xmi:type="notation:FontStyle" xmi:id="_dZ_BKRReEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5396 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dZ_BKhReEe-4k7CzzL6IsA" points="[3, 1, -806, -254]$[749, 236, -60, -19]"/> | ||
5397 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_daFu0BReEe-4k7CzzL6IsA" id="(0.5,0.5)"/> | ||
5398 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_daFu0RReEe-4k7CzzL6IsA" id="(0.5,0.5)"/> | ||
5399 | </edges> | ||
5400 | <edges xmi:type="notation:Edge" xmi:id="_eIo27BReEe-4k7CzzL6IsA" type="4001" element="_ChYVqV4fEe2rXNsIDUvqhw" source="_ChaKx14fEe2rXNsIDUvqhw" target="_dZ_BIBReEe-4k7CzzL6IsA"> | ||
5401 | <children xmi:type="notation:Node" xmi:id="_eIo28BReEe-4k7CzzL6IsA" type="6001"> | ||
5402 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eIo28RReEe-4k7CzzL6IsA" x="7" y="1"/> | ||
5403 | </children> | ||
5404 | <children xmi:type="notation:Node" xmi:id="_eIpd8BReEe-4k7CzzL6IsA" type="6002"> | ||
5405 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eIpd8RReEe-4k7CzzL6IsA" x="17"/> | ||
5406 | </children> | ||
5407 | <children xmi:type="notation:Node" xmi:id="_eIpd8hReEe-4k7CzzL6IsA" type="6003"> | ||
5408 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eIpd8xReEe-4k7CzzL6IsA" x="5" y="10"/> | ||
5409 | </children> | ||
5410 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_eIo27RReEe-4k7CzzL6IsA" routing="Rectilinear"/> | ||
5411 | <styles xmi:type="notation:FontStyle" xmi:id="_eIo27hReEe-4k7CzzL6IsA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | ||
5412 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eIo27xReEe-4k7CzzL6IsA" points="[6, 49, 0, -143]$[6, 143, 0, -49]"/> | ||
5413 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eIpd9BReEe-4k7CzzL6IsA" id="(0.4681528662420382,0.5)"/> | ||
5414 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YahnEBRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> | ||
5415 | </edges> | ||
5416 | <edges xmi:type="notation:Edge" xmi:id="_aTR4cBRqEe-4k7CzzL6IsA" type="4001" element="_z9q0il4eEe2rXNsIDUvqhw" source="_W77iOBRqEe-4k7CzzL6IsA" target="_yj6zUF4eEe2rXNsIDUvqhw"> | ||
5417 | <children xmi:type="notation:Node" xmi:id="_aTR4dBRqEe-4k7CzzL6IsA" type="6001"> | ||
5418 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aTR4dRRqEe-4k7CzzL6IsA" x="-109" y="-38"/> | ||
5419 | </children> | ||
5420 | <children xmi:type="notation:Node" xmi:id="_aTR4dhRqEe-4k7CzzL6IsA" type="6002"> | ||
5421 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aTR4dxRqEe-4k7CzzL6IsA" x="-1" y="10"/> | ||
5422 | </children> | ||
5423 | <children xmi:type="notation:Node" xmi:id="_aTR4eBRqEe-4k7CzzL6IsA" type="6003"> | ||
5424 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aTR4eRRqEe-4k7CzzL6IsA" x="-69" y="19"/> | ||
5425 | </children> | ||
5426 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_aTR4cRRqEe-4k7CzzL6IsA" routing="Tree"/> | ||
5427 | <styles xmi:type="notation:FontStyle" xmi:id="_aTR4chRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5428 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aTR4cxRqEe-4k7CzzL6IsA" points="[0, -5, 36, 335]$[0, -185, 36, 155]$[-37, -185, -1, 155]$[-37, -291, -1, 49]"/> | ||
5429 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aTSfgBRqEe-4k7CzzL6IsA" id="(0.8050847457627118,0.05102040816326531)"/> | ||
5430 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aTSfgRRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> | ||
5431 | </edges> | ||
5432 | <edges xmi:type="notation:Edge" xmi:id="_kJDqwBRqEe-4k7CzzL6IsA" type="4001" element="_kInl-BRqEe-4k7CzzL6IsA" source="_W77iOBRqEe-4k7CzzL6IsA" target="_z9rbk14eEe2rXNsIDUvqhw"> | ||
5433 | <children xmi:type="notation:Node" xmi:id="_kJDqxBRqEe-4k7CzzL6IsA" type="6001"> | ||
5434 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kJDqxRRqEe-4k7CzzL6IsA" x="-184" y="-10"/> | ||
5435 | </children> | ||
5436 | <children xmi:type="notation:Node" xmi:id="_kJDqxhRqEe-4k7CzzL6IsA" type="6002"> | ||
5437 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kJDqxxRqEe-4k7CzzL6IsA" x="-38" y="-48"/> | ||
5438 | </children> | ||
5439 | <children xmi:type="notation:Node" xmi:id="_kJDqyBRqEe-4k7CzzL6IsA" type="6003"> | ||
5440 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kJDqyRRqEe-4k7CzzL6IsA" x="-79" y="95"/> | ||
5441 | </children> | ||
5442 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_kJDqwRRqEe-4k7CzzL6IsA" routing="Tree"/> | ||
5443 | <styles xmi:type="notation:FontStyle" xmi:id="_kJDqwhRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5444 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kJDqwxRqEe-4k7CzzL6IsA" points="[0, -24, 466, 335]$[0, -108, 466, 251]$[-465, -108, 1, 251]$[-465, -310, 1, 49]"/> | ||
5445 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kJER0BRqEe-4k7CzzL6IsA" id="(0.22033898305084745,0.061224489795918366)"/> | ||
5446 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kJER0RRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> | ||
5447 | </edges> | ||
5054 | </data> | 5448 | </data> |
5055 | </ownedAnnotationEntries> | 5449 | </ownedAnnotationEntries> |
5056 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_xkO38F4eEe2rXNsIDUvqhw" source="DANNOTATION_CUSTOMIZATION_KEY"> | 5450 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_xkO38F4eEe2rXNsIDUvqhw" source="DANNOTATION_CUSTOMIZATION_KEY"> |
@@ -5078,24 +5472,17 @@ | |||
5078 | </ownedStyle> | 5472 | </ownedStyle> |
5079 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5473 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5080 | </ownedDiagramElements> | 5474 | </ownedDiagramElements> |
5081 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_z9nxMF4eEe2rXNsIDUvqhw" name="Assertion" tooltipText="" outgoingEdges="_z9q0gF4eEe2rXNsIDUvqhw _z9q0il4eEe2rXNsIDUvqhw _AUF41GTwEe2qdtyPWAtoxA _CxoVTGgpEe24RpwpWgpkFQ" width="12" height="10"> | 5475 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_z9nxMF4eEe2rXNsIDUvqhw" name="AbstractAssertion" tooltipText="" outgoingEdges="_z9q0gF4eEe2rXNsIDUvqhw _AUF41GTwEe2qdtyPWAtoxA _CxoVTGgpEe24RpwpWgpkFQ" incomingEdges="_kInl-BRqEe-4k7CzzL6IsA" width="12" height="10"> |
5082 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | 5476 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AbstractAssertion"/> |
5083 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | 5477 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AbstractAssertion"/> |
5084 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 5478 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
5085 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 5479 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
5086 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 5480 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
5087 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_F1pf42gpEe24RpwpWgpkFQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | 5481 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_hH94XxRqEe-4k7CzzL6IsA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> |
5088 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | 5482 | <labelFormat>italic</labelFormat> |
5483 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | ||
5089 | </ownedStyle> | 5484 | </ownedStyle> |
5090 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5485 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5091 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_z9qNcF4eEe2rXNsIDUvqhw" name="default : EBoolean = false" tooltipText=""> | ||
5092 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Assertion/default"/> | ||
5093 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Assertion/default"/> | ||
5094 | <ownedStyle xmi:type="diagram:BundledImage" uid="_z9qNcV4eEe2rXNsIDUvqhw" labelAlignment="LEFT"> | ||
5095 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
5096 | </ownedStyle> | ||
5097 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
5098 | </ownedElements> | ||
5099 | </ownedDiagramElements> | 5486 | </ownedDiagramElements> |
5100 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_z9oYQF4eEe2rXNsIDUvqhw" name="AssertionArgument" tooltipText="" incomingEdges="_z9q0gF4eEe2rXNsIDUvqhw _ChY8uV4fEe2rXNsIDUvqhw _ChZjtl4fEe2rXNsIDUvqhw" width="12" height="10"> | 5487 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_z9oYQF4eEe2rXNsIDUvqhw" name="AssertionArgument" tooltipText="" incomingEdges="_z9q0gF4eEe2rXNsIDUvqhw _ChY8uV4fEe2rXNsIDUvqhw _ChZjtl4fEe2rXNsIDUvqhw" width="12" height="10"> |
5101 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionArgument"/> | 5488 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionArgument"/> |
@@ -5110,8 +5497,8 @@ | |||
5110 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5497 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5111 | </ownedDiagramElements> | 5498 | </ownedDiagramElements> |
5112 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_z9q0gF4eEe2rXNsIDUvqhw" name="[0..*] arguments" sourceNode="_z9nxMF4eEe2rXNsIDUvqhw" targetNode="_z9oYQF4eEe2rXNsIDUvqhw"> | 5499 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_z9q0gF4eEe2rXNsIDUvqhw" name="[0..*] arguments" sourceNode="_z9nxMF4eEe2rXNsIDUvqhw" targetNode="_z9oYQF4eEe2rXNsIDUvqhw"> |
5113 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Assertion/arguments"/> | 5500 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/arguments"/> |
5114 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Assertion/arguments"/> | 5501 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/arguments"/> |
5115 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_z9q0hF4eEe2rXNsIDUvqhw" description="_z9q0gV4eEe2rXNsIDUvqhw" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | 5502 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_z9q0hF4eEe2rXNsIDUvqhw" description="_z9q0gV4eEe2rXNsIDUvqhw" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> |
5116 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_z9q0hl4eEe2rXNsIDUvqhw" showIcon="false"> | 5503 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_z9q0hl4eEe2rXNsIDUvqhw" showIcon="false"> |
5117 | <customFeatures>labelSize</customFeatures> | 5504 | <customFeatures>labelSize</customFeatures> |
@@ -5122,7 +5509,7 @@ | |||
5122 | </ownedStyle> | 5509 | </ownedStyle> |
5123 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | 5510 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> |
5124 | </ownedDiagramElements> | 5511 | </ownedDiagramElements> |
5125 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_z9q0il4eEe2rXNsIDUvqhw" sourceNode="_z9nxMF4eEe2rXNsIDUvqhw" targetNode="_yj4-IF4eEe2rXNsIDUvqhw"> | 5512 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_z9q0il4eEe2rXNsIDUvqhw" sourceNode="_W7ZWoBRqEe-4k7CzzL6IsA" targetNode="_yj4-IF4eEe2rXNsIDUvqhw"> |
5126 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | 5513 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> |
5127 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | 5514 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> |
5128 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_F1rVImgpEe24RpwpWgpkFQ" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> | 5515 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_F1rVImgpEe24RpwpWgpkFQ" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> |
@@ -5134,9 +5521,10 @@ | |||
5134 | </ownedStyle> | 5521 | </ownedStyle> |
5135 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 5522 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
5136 | </ownedDiagramElements> | 5523 | </ownedDiagramElements> |
5137 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_A-fmgF4fEe2rXNsIDUvqhw" name="Node" tooltipText="" incomingEdges="_ChYVqV4fEe2rXNsIDUvqhw" width="12" height="10"> | 5524 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_A-fmgF4fEe2rXNsIDUvqhw" name="Node" visible="false" tooltipText="" outgoingEdges="_dZ9zEhReEe-4k7CzzL6IsA" width="12" height="10"> |
5138 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Node"/> | 5525 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Node"/> |
5139 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Node"/> | 5526 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Node"/> |
5527 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_GLUFoBRfEe-4k7CzzL6IsA"/> | ||
5140 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 5528 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
5141 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 5529 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
5142 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 5530 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
@@ -5167,7 +5555,7 @@ | |||
5167 | </ownedStyle> | 5555 | </ownedStyle> |
5168 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5556 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5169 | </ownedDiagramElements> | 5557 | </ownedDiagramElements> |
5170 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ChYVqV4fEe2rXNsIDUvqhw" name="[0..1] node" sourceNode="_ChUrMl4fEe2rXNsIDUvqhw" targetNode="_A-fmgF4fEe2rXNsIDUvqhw"> | 5558 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ChYVqV4fEe2rXNsIDUvqhw" name="[0..1] node" sourceNode="_ChUrMl4fEe2rXNsIDUvqhw" targetNode="_dZ46gBReEe-4k7CzzL6IsA"> |
5171 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NodeAssertionArgument/node"/> | 5559 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NodeAssertionArgument/node"/> |
5172 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NodeAssertionArgument/node"/> | 5560 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NodeAssertionArgument/node"/> |
5173 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ChY8oF4fEe2rXNsIDUvqhw" routingStyle="manhattan" strokeColor="0,0,0"> | 5561 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ChY8oF4fEe2rXNsIDUvqhw" routingStyle="manhattan" strokeColor="0,0,0"> |
@@ -5218,8 +5606,8 @@ | |||
5218 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5606 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5219 | </ownedDiagramElements> | 5607 | </ownedDiagramElements> |
5220 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_AUF41GTwEe2qdtyPWAtoxA" name="[0..1] relation" sourceNode="_z9nxMF4eEe2rXNsIDUvqhw" targetNode="_85G_kGTvEe2qdtyPWAtoxA"> | 5608 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_AUF41GTwEe2qdtyPWAtoxA" name="[0..1] relation" sourceNode="_z9nxMF4eEe2rXNsIDUvqhw" targetNode="_85G_kGTvEe2qdtyPWAtoxA"> |
5221 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Assertion/relation"/> | 5609 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/relation"/> |
5222 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Assertion/relation"/> | 5610 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/relation"/> |
5223 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_AUGfwGTwEe2qdtyPWAtoxA" routingStyle="manhattan" strokeColor="0,0,0"> | 5611 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_AUGfwGTwEe2qdtyPWAtoxA" routingStyle="manhattan" strokeColor="0,0,0"> |
5224 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/> | 5612 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/> |
5225 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_AUGfwmTwEe2qdtyPWAtoxA" showIcon="false"> | 5613 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_AUGfwmTwEe2qdtyPWAtoxA" showIcon="false"> |
@@ -5232,8 +5620,8 @@ | |||
5232 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | 5620 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> |
5233 | </ownedDiagramElements> | 5621 | </ownedDiagramElements> |
5234 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_CxoVTGgpEe24RpwpWgpkFQ" name="[0..1] value" sourceNode="_z9nxMF4eEe2rXNsIDUvqhw" targetNode="_IhJc0GgpEe24RpwpWgpkFQ"> | 5622 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_CxoVTGgpEe24RpwpWgpkFQ" name="[0..1] value" sourceNode="_z9nxMF4eEe2rXNsIDUvqhw" targetNode="_IhJc0GgpEe24RpwpWgpkFQ"> |
5235 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Assertion/value"/> | 5623 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/value"/> |
5236 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Assertion/value"/> | 5624 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/value"/> |
5237 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_Gl7GTGgpEe24RpwpWgpkFQ" description="_z9q0gV4eEe2rXNsIDUvqhw" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | 5625 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_Gl7GTGgpEe24RpwpWgpkFQ" description="_z9q0gV4eEe2rXNsIDUvqhw" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> |
5238 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_Gl7GTmgpEe24RpwpWgpkFQ" showIcon="false"> | 5626 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_Gl7GTmgpEe24RpwpWgpkFQ" showIcon="false"> |
5239 | <customFeatures>labelSize</customFeatures> | 5627 | <customFeatures>labelSize</customFeatures> |
@@ -5256,6 +5644,61 @@ | |||
5256 | </ownedStyle> | 5644 | </ownedStyle> |
5257 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5645 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5258 | </ownedDiagramElements> | 5646 | </ownedDiagramElements> |
5647 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_dZ46gBReEe-4k7CzzL6IsA" name="VariableOrNode" tooltipText="" incomingEdges="_dZ9zEhReEe-4k7CzzL6IsA _ChYVqV4fEe2rXNsIDUvqhw" width="12" height="10"> | ||
5648 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//VariableOrNode"/> | ||
5649 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//VariableOrNode"/> | ||
5650 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5651 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5652 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5653 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_dZ5hkBReEe-4k7CzzL6IsA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> | ||
5654 | <labelFormat>italic</labelFormat> | ||
5655 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | ||
5656 | </ownedStyle> | ||
5657 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
5658 | </ownedDiagramElements> | ||
5659 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_dZ9zEhReEe-4k7CzzL6IsA" visible="false" sourceNode="_A-fmgF4fEe2rXNsIDUvqhw" targetNode="_dZ46gBReEe-4k7CzzL6IsA"> | ||
5660 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Node"/> | ||
5661 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Node"/> | ||
5662 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_dZ9zExReEe-4k7CzzL6IsA" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
5663 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | ||
5664 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_dZ9zFBReEe-4k7CzzL6IsA" showIcon="false"> | ||
5665 | <labelFormat>italic</labelFormat> | ||
5666 | </beginLabelStyle> | ||
5667 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_dZ9zFRReEe-4k7CzzL6IsA" showIcon="false"/> | ||
5668 | </ownedStyle> | ||
5669 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | ||
5670 | </ownedDiagramElements> | ||
5671 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_W7ZWoBRqEe-4k7CzzL6IsA" name="Assertion" tooltipText="" outgoingEdges="_z9q0il4eEe2rXNsIDUvqhw _kInl-BRqEe-4k7CzzL6IsA" width="12" height="10"> | ||
5672 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | ||
5673 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | ||
5674 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5675 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5676 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5677 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_W7ZWoRRqEe-4k7CzzL6IsA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
5678 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
5679 | </ownedStyle> | ||
5680 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
5681 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_bZWIoBRqEe-4k7CzzL6IsA" name="default : EBoolean = false" tooltipText=""> | ||
5682 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Assertion/default"/> | ||
5683 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Assertion/default"/> | ||
5684 | <ownedStyle xmi:type="diagram:BundledImage" uid="_bZWIoRRqEe-4k7CzzL6IsA" labelAlignment="LEFT"> | ||
5685 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
5686 | </ownedStyle> | ||
5687 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
5688 | </ownedElements> | ||
5689 | </ownedDiagramElements> | ||
5690 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_kInl-BRqEe-4k7CzzL6IsA" sourceNode="_W7ZWoBRqEe-4k7CzzL6IsA" targetNode="_z9nxMF4eEe2rXNsIDUvqhw"> | ||
5691 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | ||
5692 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Assertion"/> | ||
5693 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_kIoM8BRqEe-4k7CzzL6IsA" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
5694 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | ||
5695 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_kIoM8RRqEe-4k7CzzL6IsA" showIcon="false"> | ||
5696 | <labelFormat>italic</labelFormat> | ||
5697 | </beginLabelStyle> | ||
5698 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_kIoM8hRqEe-4k7CzzL6IsA" showIcon="false"/> | ||
5699 | </ownedStyle> | ||
5700 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | ||
5701 | </ownedDiagramElements> | ||
5259 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 5702 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
5260 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_xj8kEF4eEe2rXNsIDUvqhw"/> | 5703 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_xj8kEF4eEe2rXNsIDUvqhw"/> |
5261 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | 5704 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> |
@@ -5273,94 +5716,63 @@ | |||
5273 | <styles xmi:type="notation:FilteringStyle" xmi:id="_x-y3k14fEe2rXNsIDUvqhw"/> | 5716 | <styles xmi:type="notation:FilteringStyle" xmi:id="_x-y3k14fEe2rXNsIDUvqhw"/> |
5274 | </children> | 5717 | </children> |
5275 | <styles xmi:type="notation:ShapeStyle" xmi:id="_x-yQi14fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> | 5718 | <styles xmi:type="notation:ShapeStyle" xmi:id="_x-yQi14fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> |
5276 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-yQjF4fEe2rXNsIDUvqhw" x="356" y="20"/> | 5719 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-yQjF4fEe2rXNsIDUvqhw" x="36" y="36"/> |
5277 | </children> | 5720 | </children> |
5278 | <children xmi:type="notation:Node" xmi:id="_x-y3lF4fEe2rXNsIDUvqhw" type="2003" element="_x-t_EF4fEe2rXNsIDUvqhw"> | 5721 | <children xmi:type="notation:Node" xmi:id="_x-y3lF4fEe2rXNsIDUvqhw" type="2003" element="_x-t_EF4fEe2rXNsIDUvqhw"> |
5279 | <children xmi:type="notation:Node" xmi:id="_x-y3l14fEe2rXNsIDUvqhw" type="5007"/> | 5722 | <children xmi:type="notation:Node" xmi:id="_x-y3l14fEe2rXNsIDUvqhw" type="5007"/> |
5280 | <children xmi:type="notation:Node" xmi:id="_x-y3mF4fEe2rXNsIDUvqhw" type="7004"> | 5723 | <children xmi:type="notation:Node" xmi:id="_x-y3mF4fEe2rXNsIDUvqhw" type="7004"> |
5281 | <children xmi:type="notation:Node" xmi:id="_x-0FtF4fEe2rXNsIDUvqhw" type="3010" element="_x-wbWF4fEe2rXNsIDUvqhw"> | ||
5282 | <styles xmi:type="notation:FontStyle" xmi:id="_x-0FtV4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
5283 | <layoutConstraint xmi:type="notation:Location" xmi:id="_x-0Ftl4fEe2rXNsIDUvqhw"/> | ||
5284 | </children> | ||
5285 | <children xmi:type="notation:Node" xmi:id="_x-0Ft14fEe2rXNsIDUvqhw" type="3010" element="_x-wbWl4fEe2rXNsIDUvqhw"> | ||
5286 | <styles xmi:type="notation:FontStyle" xmi:id="_x-0FuF4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
5287 | <layoutConstraint xmi:type="notation:Location" xmi:id="_x-0FuV4fEe2rXNsIDUvqhw"/> | ||
5288 | </children> | ||
5289 | <styles xmi:type="notation:SortingStyle" xmi:id="_x-y3mV4fEe2rXNsIDUvqhw"/> | 5724 | <styles xmi:type="notation:SortingStyle" xmi:id="_x-y3mV4fEe2rXNsIDUvqhw"/> |
5290 | <styles xmi:type="notation:FilteringStyle" xmi:id="_x-y3ml4fEe2rXNsIDUvqhw"/> | 5725 | <styles xmi:type="notation:FilteringStyle" xmi:id="_x-y3ml4fEe2rXNsIDUvqhw"/> |
5291 | </children> | 5726 | </children> |
5292 | <styles xmi:type="notation:ShapeStyle" xmi:id="_x-y3lV4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5727 | <styles xmi:type="notation:ShapeStyle" xmi:id="_x-y3lV4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5293 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-y3ll4fEe2rXNsIDUvqhw" x="116" y="176"/> | 5728 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-y3ll4fEe2rXNsIDUvqhw" x="120" y="192"/> |
5294 | </children> | ||
5295 | <children xmi:type="notation:Node" xmi:id="_x-y3m14fEe2rXNsIDUvqhw" type="2003" element="_x-t_E14fEe2rXNsIDUvqhw"> | ||
5296 | <children xmi:type="notation:Node" xmi:id="_x-zeoF4fEe2rXNsIDUvqhw" type="5007"/> | ||
5297 | <children xmi:type="notation:Node" xmi:id="_x-zeoV4fEe2rXNsIDUvqhw" type="7004"> | ||
5298 | <styles xmi:type="notation:SortingStyle" xmi:id="_x-zeol4fEe2rXNsIDUvqhw"/> | ||
5299 | <styles xmi:type="notation:FilteringStyle" xmi:id="_x-zeo14fEe2rXNsIDUvqhw"/> | ||
5300 | </children> | ||
5301 | <styles xmi:type="notation:ShapeStyle" xmi:id="_x-y3nF4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
5302 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-y3nV4fEe2rXNsIDUvqhw" x="608" y="176"/> | ||
5303 | </children> | ||
5304 | <children xmi:type="notation:Node" xmi:id="_x-zepF4fEe2rXNsIDUvqhw" type="2003" element="_x-umIF4fEe2rXNsIDUvqhw"> | ||
5305 | <children xmi:type="notation:Node" xmi:id="_x-0FsF4fEe2rXNsIDUvqhw" type="5007"/> | ||
5306 | <children xmi:type="notation:Node" xmi:id="_x-0FsV4fEe2rXNsIDUvqhw" type="7004"> | ||
5307 | <styles xmi:type="notation:SortingStyle" xmi:id="_x-0Fsl4fEe2rXNsIDUvqhw"/> | ||
5308 | <styles xmi:type="notation:FilteringStyle" xmi:id="_x-0Fs14fEe2rXNsIDUvqhw"/> | ||
5309 | </children> | ||
5310 | <styles xmi:type="notation:ShapeStyle" xmi:id="_x-zepV4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
5311 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-zepl4fEe2rXNsIDUvqhw" x="356" y="176"/> | ||
5312 | </children> | ||
5313 | <children xmi:type="notation:Node" xmi:id="_1WZFgF4fEe2rXNsIDUvqhw" type="2003" element="_1WVbIF4fEe2rXNsIDUvqhw"> | ||
5314 | <children xmi:type="notation:Node" xmi:id="_1WZFg14fEe2rXNsIDUvqhw" type="5007"/> | ||
5315 | <children xmi:type="notation:Node" xmi:id="_1WZFhF4fEe2rXNsIDUvqhw" type="7004"> | ||
5316 | <styles xmi:type="notation:SortingStyle" xmi:id="_1WZFhV4fEe2rXNsIDUvqhw"/> | ||
5317 | <styles xmi:type="notation:FilteringStyle" xmi:id="_1WZFhl4fEe2rXNsIDUvqhw"/> | ||
5318 | </children> | ||
5319 | <styles xmi:type="notation:ShapeStyle" xmi:id="_1WZFgV4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
5320 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1WZFgl4fEe2rXNsIDUvqhw" x="404" y="584"/> | ||
5321 | </children> | 5729 | </children> |
5322 | <children xmi:type="notation:Node" xmi:id="_mjEJMF4hEe2rXNsIDUvqhw" type="2003" element="_mi_QsF4hEe2rXNsIDUvqhw"> | 5730 | <children xmi:type="notation:Node" xmi:id="_mjEJMF4hEe2rXNsIDUvqhw" visible="false" type="2003" element="_mi_QsF4hEe2rXNsIDUvqhw"> |
5323 | <children xmi:type="notation:Node" xmi:id="_mjEJM14hEe2rXNsIDUvqhw" type="5007"/> | 5731 | <children xmi:type="notation:Node" xmi:id="_mjEJM14hEe2rXNsIDUvqhw" type="5007"/> |
5324 | <children xmi:type="notation:Node" xmi:id="_mjEJNF4hEe2rXNsIDUvqhw" type="7004"> | 5732 | <children xmi:type="notation:Node" xmi:id="_mjEJNF4hEe2rXNsIDUvqhw" type="7004"> |
5325 | <styles xmi:type="notation:SortingStyle" xmi:id="_mjEJNV4hEe2rXNsIDUvqhw"/> | 5733 | <styles xmi:type="notation:SortingStyle" xmi:id="_mjEJNV4hEe2rXNsIDUvqhw"/> |
5326 | <styles xmi:type="notation:FilteringStyle" xmi:id="_mjEJNl4hEe2rXNsIDUvqhw"/> | 5734 | <styles xmi:type="notation:FilteringStyle" xmi:id="_mjEJNl4hEe2rXNsIDUvqhw"/> |
5327 | </children> | 5735 | </children> |
5328 | <styles xmi:type="notation:ShapeStyle" xmi:id="_mjEJMV4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> | 5736 | <styles xmi:type="notation:ShapeStyle" xmi:id="_mjEJMV4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> |
5329 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjEJMl4hEe2rXNsIDUvqhw" x="608" y="368"/> | 5737 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjEJMl4hEe2rXNsIDUvqhw" x="684" y="372"/> |
5330 | </children> | 5738 | </children> |
5331 | <children xmi:type="notation:Node" xmi:id="_vYOzEF4hEe2rXNsIDUvqhw" type="2003" element="_vYLvwF4hEe2rXNsIDUvqhw"> | 5739 | <children xmi:type="notation:Node" xmi:id="_vYOzEF4hEe2rXNsIDUvqhw" visible="false" type="2003" element="_vYLvwF4hEe2rXNsIDUvqhw"> |
5332 | <children xmi:type="notation:Node" xmi:id="_vYOzE14hEe2rXNsIDUvqhw" type="5007"/> | 5740 | <children xmi:type="notation:Node" xmi:id="_vYOzE14hEe2rXNsIDUvqhw" type="5007"/> |
5333 | <children xmi:type="notation:Node" xmi:id="_vYOzFF4hEe2rXNsIDUvqhw" type="7004"> | 5741 | <children xmi:type="notation:Node" xmi:id="_vYOzFF4hEe2rXNsIDUvqhw" type="7004"> |
5334 | <children xmi:type="notation:Node" xmi:id="_vYOzF14hEe2rXNsIDUvqhw" type="3010" element="_vYM9414hEe2rXNsIDUvqhw"> | 5742 | <children xmi:type="notation:Node" xmi:id="_vYOzF14hEe2rXNsIDUvqhw" visible="false" type="3010" element="_vYM9414hEe2rXNsIDUvqhw"> |
5335 | <styles xmi:type="notation:FontStyle" xmi:id="_vYOzGF4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5743 | <styles xmi:type="notation:FontStyle" xmi:id="_vYOzGF4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5336 | <layoutConstraint xmi:type="notation:Location" xmi:id="_vYOzGV4hEe2rXNsIDUvqhw"/> | 5744 | <layoutConstraint xmi:type="notation:Location" xmi:id="_vYOzGV4hEe2rXNsIDUvqhw"/> |
5337 | </children> | 5745 | </children> |
5338 | <children xmi:type="notation:Node" xmi:id="_3vtKMF63Ee2rXNsIDUvqhw" type="3010" element="_3vrVA163Ee2rXNsIDUvqhw"> | 5746 | <children xmi:type="notation:Node" xmi:id="_wueTIBRqEe-4k7CzzL6IsA" visible="false" type="3010" element="_wuaowBRqEe-4k7CzzL6IsA"> |
5339 | <styles xmi:type="notation:FontStyle" xmi:id="_3vtKMV63Ee2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5747 | <styles xmi:type="notation:FontStyle" xmi:id="_wueTIRRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> |
5340 | <layoutConstraint xmi:type="notation:Location" xmi:id="_3vtKMl63Ee2rXNsIDUvqhw"/> | 5748 | <layoutConstraint xmi:type="notation:Location" xmi:id="_wueTIhRqEe-4k7CzzL6IsA"/> |
5749 | </children> | ||
5750 | <children xmi:type="notation:Node" xmi:id="_wueTIxRqEe-4k7CzzL6IsA" visible="false" type="3010" element="_wuaowhRqEe-4k7CzzL6IsA"> | ||
5751 | <styles xmi:type="notation:FontStyle" xmi:id="_wueTJBRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5752 | <layoutConstraint xmi:type="notation:Location" xmi:id="_wueTJRRqEe-4k7CzzL6IsA"/> | ||
5341 | </children> | 5753 | </children> |
5342 | <styles xmi:type="notation:SortingStyle" xmi:id="_vYOzFV4hEe2rXNsIDUvqhw"/> | 5754 | <styles xmi:type="notation:SortingStyle" xmi:id="_vYOzFV4hEe2rXNsIDUvqhw"/> |
5343 | <styles xmi:type="notation:FilteringStyle" xmi:id="_vYOzFl4hEe2rXNsIDUvqhw"/> | 5755 | <styles xmi:type="notation:FilteringStyle" xmi:id="_vYOzFl4hEe2rXNsIDUvqhw"/> |
5344 | </children> | 5756 | </children> |
5345 | <styles xmi:type="notation:ShapeStyle" xmi:id="_vYOzEV4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5757 | <styles xmi:type="notation:ShapeStyle" xmi:id="_vYOzEV4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5346 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vYOzEl4hEe2rXNsIDUvqhw" x="92" y="380"/> | 5758 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vYOzEl4hEe2rXNsIDUvqhw" x="168" y="384"/> |
5347 | </children> | 5759 | </children> |
5348 | <children xmi:type="notation:Node" xmi:id="_4xYTwF4hEe2rXNsIDUvqhw" type="2003" element="_4xTbQF4hEe2rXNsIDUvqhw"> | 5760 | <children xmi:type="notation:Node" xmi:id="_4xYTwF4hEe2rXNsIDUvqhw" visible="false" type="2003" element="_4xTbQF4hEe2rXNsIDUvqhw"> |
5349 | <children xmi:type="notation:Node" xmi:id="_4xYTw14hEe2rXNsIDUvqhw" type="5007"/> | 5761 | <children xmi:type="notation:Node" xmi:id="_4xYTw14hEe2rXNsIDUvqhw" type="5007"/> |
5350 | <children xmi:type="notation:Node" xmi:id="_4xYTxF4hEe2rXNsIDUvqhw" type="7004"> | 5762 | <children xmi:type="notation:Node" xmi:id="_4xYTxF4hEe2rXNsIDUvqhw" type="7004"> |
5351 | <children xmi:type="notation:Node" xmi:id="_4xYTx14hEe2rXNsIDUvqhw" type="3010" element="_4xV3g14hEe2rXNsIDUvqhw"> | 5763 | <children xmi:type="notation:Node" xmi:id="_4xYTx14hEe2rXNsIDUvqhw" visible="false" type="3010" element="_4xV3g14hEe2rXNsIDUvqhw"> |
5352 | <styles xmi:type="notation:FontStyle" xmi:id="_4xYTyF4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5764 | <styles xmi:type="notation:FontStyle" xmi:id="_4xYTyF4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5353 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xYTyV4hEe2rXNsIDUvqhw"/> | 5765 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xYTyV4hEe2rXNsIDUvqhw"/> |
5354 | </children> | 5766 | </children> |
5355 | <children xmi:type="notation:Node" xmi:id="_4xYTyl4hEe2rXNsIDUvqhw" type="3010" element="_4xV3hV4hEe2rXNsIDUvqhw"> | 5767 | <children xmi:type="notation:Node" xmi:id="_4xYTyl4hEe2rXNsIDUvqhw" visible="false" type="3010" element="_4xV3hV4hEe2rXNsIDUvqhw"> |
5356 | <styles xmi:type="notation:FontStyle" xmi:id="_4xYTy14hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5768 | <styles xmi:type="notation:FontStyle" xmi:id="_4xYTy14hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5357 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xYTzF4hEe2rXNsIDUvqhw"/> | 5769 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xYTzF4hEe2rXNsIDUvqhw"/> |
5358 | </children> | 5770 | </children> |
5359 | <children xmi:type="notation:Node" xmi:id="_4xY60F4hEe2rXNsIDUvqhw" type="3010" element="_4xWekF4hEe2rXNsIDUvqhw"> | 5771 | <children xmi:type="notation:Node" xmi:id="_4xY60F4hEe2rXNsIDUvqhw" visible="false" type="3010" element="_4xWekF4hEe2rXNsIDUvqhw"> |
5360 | <styles xmi:type="notation:FontStyle" xmi:id="_4xY60V4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5772 | <styles xmi:type="notation:FontStyle" xmi:id="_4xY60V4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5361 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xY60l4hEe2rXNsIDUvqhw"/> | 5773 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xY60l4hEe2rXNsIDUvqhw"/> |
5362 | </children> | 5774 | </children> |
5363 | <children xmi:type="notation:Node" xmi:id="_4xY6014hEe2rXNsIDUvqhw" type="3010" element="_4xWekl4hEe2rXNsIDUvqhw"> | 5775 | <children xmi:type="notation:Node" xmi:id="_4xY6014hEe2rXNsIDUvqhw" visible="false" type="3010" element="_4xWekl4hEe2rXNsIDUvqhw"> |
5364 | <styles xmi:type="notation:FontStyle" xmi:id="_4xY61F4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5776 | <styles xmi:type="notation:FontStyle" xmi:id="_4xY61F4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5365 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xY61V4hEe2rXNsIDUvqhw"/> | 5777 | <layoutConstraint xmi:type="notation:Location" xmi:id="_4xY61V4hEe2rXNsIDUvqhw"/> |
5366 | </children> | 5778 | </children> |
@@ -5368,7 +5780,55 @@ | |||
5368 | <styles xmi:type="notation:FilteringStyle" xmi:id="_4xYTxl4hEe2rXNsIDUvqhw"/> | 5780 | <styles xmi:type="notation:FilteringStyle" xmi:id="_4xYTxl4hEe2rXNsIDUvqhw"/> |
5369 | </children> | 5781 | </children> |
5370 | <styles xmi:type="notation:ShapeStyle" xmi:id="_4xYTwV4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5782 | <styles xmi:type="notation:ShapeStyle" xmi:id="_4xYTwV4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5371 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4xYTwl4hEe2rXNsIDUvqhw" x="144" y="20"/> | 5783 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4xYTwl4hEe2rXNsIDUvqhw" x="360" y="24"/> |
5784 | </children> | ||
5785 | <children xmi:type="notation:Node" xmi:id="_nWw4wBOtEe-xzrPFjBSxRw" visible="false" type="2003" element="_nWhBIBOtEe-xzrPFjBSxRw"> | ||
5786 | <children xmi:type="notation:Node" xmi:id="_nWxf0BOtEe-xzrPFjBSxRw" type="5007"/> | ||
5787 | <children xmi:type="notation:Node" xmi:id="_nWyG4BOtEe-xzrPFjBSxRw" type="7004"> | ||
5788 | <styles xmi:type="notation:SortingStyle" xmi:id="_nWyG4ROtEe-xzrPFjBSxRw"/> | ||
5789 | <styles xmi:type="notation:FilteringStyle" xmi:id="_nWyG4hOtEe-xzrPFjBSxRw"/> | ||
5790 | </children> | ||
5791 | <styles xmi:type="notation:ShapeStyle" xmi:id="_nWw4wROtEe-xzrPFjBSxRw" fontName="Noto Sans" fontHeight="8" italic="true"/> | ||
5792 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nWw4whOtEe-xzrPFjBSxRw" x="360" y="480"/> | ||
5793 | </children> | ||
5794 | <children xmi:type="notation:Node" xmi:id="_e75ZcBRWEe-4k7CzzL6IsA" visible="false" type="2003" element="_e7zS0BRWEe-4k7CzzL6IsA"> | ||
5795 | <children xmi:type="notation:Node" xmi:id="_e75ZcxRWEe-4k7CzzL6IsA" type="5007"/> | ||
5796 | <children xmi:type="notation:Node" xmi:id="_e75ZdBRWEe-4k7CzzL6IsA" type="7004"> | ||
5797 | <styles xmi:type="notation:SortingStyle" xmi:id="_e75ZdRRWEe-4k7CzzL6IsA"/> | ||
5798 | <styles xmi:type="notation:FilteringStyle" xmi:id="_e75ZdhRWEe-4k7CzzL6IsA"/> | ||
5799 | </children> | ||
5800 | <styles xmi:type="notation:ShapeStyle" xmi:id="_e75ZcRRWEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8" italic="true"/> | ||
5801 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e75ZchRWEe-4k7CzzL6IsA" x="492" y="180"/> | ||
5802 | </children> | ||
5803 | <children xmi:type="notation:Node" xmi:id="_mJXFsBRWEe-4k7CzzL6IsA" visible="false" type="2003" element="_mJSNMBRWEe-4k7CzzL6IsA"> | ||
5804 | <children xmi:type="notation:Node" xmi:id="_mJXFsxRWEe-4k7CzzL6IsA" type="5007"/> | ||
5805 | <children xmi:type="notation:Node" xmi:id="_mJXFtBRWEe-4k7CzzL6IsA" type="7004"> | ||
5806 | <styles xmi:type="notation:SortingStyle" xmi:id="_mJXFtRRWEe-4k7CzzL6IsA"/> | ||
5807 | <styles xmi:type="notation:FilteringStyle" xmi:id="_mJXFthRWEe-4k7CzzL6IsA"/> | ||
5808 | </children> | ||
5809 | <styles xmi:type="notation:ShapeStyle" xmi:id="_mJXFsRRWEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8" italic="true"/> | ||
5810 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mJXFshRWEe-4k7CzzL6IsA" x="95" y="480"/> | ||
5811 | </children> | ||
5812 | <children xmi:type="notation:Node" xmi:id="_wudsFhRqEe-4k7CzzL6IsA" type="2003" element="_wuYMgBRqEe-4k7CzzL6IsA"> | ||
5813 | <children xmi:type="notation:Node" xmi:id="_wudsGRRqEe-4k7CzzL6IsA" type="5007"/> | ||
5814 | <children xmi:type="notation:Node" xmi:id="_wudsGhRqEe-4k7CzzL6IsA" type="7004"> | ||
5815 | <children xmi:type="notation:Node" xmi:id="_wueTJhRqEe-4k7CzzL6IsA" type="3010" element="_wubP0BRqEe-4k7CzzL6IsA"> | ||
5816 | <styles xmi:type="notation:FontStyle" xmi:id="_wueTJxRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5817 | <layoutConstraint xmi:type="notation:Location" xmi:id="_wueTKBRqEe-4k7CzzL6IsA"/> | ||
5818 | </children> | ||
5819 | <children xmi:type="notation:Node" xmi:id="_wueTKRRqEe-4k7CzzL6IsA" type="3010" element="_wubP0hRqEe-4k7CzzL6IsA"> | ||
5820 | <styles xmi:type="notation:FontStyle" xmi:id="_wueTKhRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5821 | <layoutConstraint xmi:type="notation:Location" xmi:id="_wueTKxRqEe-4k7CzzL6IsA"/> | ||
5822 | </children> | ||
5823 | <children xmi:type="notation:Node" xmi:id="_wueTLBRqEe-4k7CzzL6IsA" type="3010" element="_wubP1BRqEe-4k7CzzL6IsA"> | ||
5824 | <styles xmi:type="notation:FontStyle" xmi:id="_wueTLRRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> | ||
5825 | <layoutConstraint xmi:type="notation:Location" xmi:id="_wueTLhRqEe-4k7CzzL6IsA"/> | ||
5826 | </children> | ||
5827 | <styles xmi:type="notation:SortingStyle" xmi:id="_wudsGxRqEe-4k7CzzL6IsA"/> | ||
5828 | <styles xmi:type="notation:FilteringStyle" xmi:id="_wudsHBRqEe-4k7CzzL6IsA"/> | ||
5829 | </children> | ||
5830 | <styles xmi:type="notation:ShapeStyle" xmi:id="_wudsFxRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8" italic="true"/> | ||
5831 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wudsGBRqEe-4k7CzzL6IsA" x="240" y="36"/> | ||
5372 | </children> | 5832 | </children> |
5373 | <styles xmi:type="notation:DiagramStyle" xmi:id="_sCFolF4fEe2rXNsIDUvqhw"/> | 5833 | <styles xmi:type="notation:DiagramStyle" xmi:id="_sCFolF4fEe2rXNsIDUvqhw"/> |
5374 | <edges xmi:type="notation:Edge" xmi:id="_x-0sw14fEe2rXNsIDUvqhw" type="4001" element="_x-xpcV4fEe2rXNsIDUvqhw" source="_x-y3lF4fEe2rXNsIDUvqhw" target="_x-yQil4fEe2rXNsIDUvqhw"> | 5834 | <edges xmi:type="notation:Edge" xmi:id="_x-0sw14fEe2rXNsIDUvqhw" type="4001" element="_x-xpcV4fEe2rXNsIDUvqhw" source="_x-y3lF4fEe2rXNsIDUvqhw" target="_x-yQil4fEe2rXNsIDUvqhw"> |
@@ -5384,149 +5844,101 @@ | |||
5384 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_x-0sxF4fEe2rXNsIDUvqhw" routing="Tree"/> | 5844 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_x-0sxF4fEe2rXNsIDUvqhw" routing="Tree"/> |
5385 | <styles xmi:type="notation:FontStyle" xmi:id="_x-0sxV4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5845 | <styles xmi:type="notation:FontStyle" xmi:id="_x-0sxV4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
5386 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_x-0sxl4fEe2rXNsIDUvqhw" points="[0, 0, 12, 12]$[-12, -12, 0, 0]"/> | 5846 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_x-0sxl4fEe2rXNsIDUvqhw" points="[0, 0, 12, 12]$[-12, -12, 0, 0]"/> |
5387 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x-0szV4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5847 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_STXQEBOwEe-4k7CzzL6IsA" id="(0.2627118644067797,0.10204081632653061)"/> |
5388 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x-0szl4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5848 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x-0szl4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> |
5389 | </edges> | 5849 | </edges> |
5390 | <edges xmi:type="notation:Edge" xmi:id="_x-0sz14fEe2rXNsIDUvqhw" type="4001" element="_x-xpeF4fEe2rXNsIDUvqhw" source="_x-y3m14fEe2rXNsIDUvqhw" target="_x-yQil4fEe2rXNsIDUvqhw"> | 5850 | <edges xmi:type="notation:Edge" xmi:id="_wue6MBRqEe-4k7CzzL6IsA" visible="false" type="4001" element="_wub25hRqEe-4k7CzzL6IsA" source="_wudsFhRqEe-4k7CzzL6IsA" target="_mJXFsBRWEe-4k7CzzL6IsA"> |
5391 | <children xmi:type="notation:Node" xmi:id="_x-0s014fEe2rXNsIDUvqhw" type="6001"> | 5851 | <children xmi:type="notation:Node" xmi:id="_wue6NBRqEe-4k7CzzL6IsA" type="6001"> |
5392 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-0s1F4fEe2rXNsIDUvqhw" y="-10"/> | 5852 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wue6NRRqEe-4k7CzzL6IsA" y="-10"/> |
5393 | </children> | ||
5394 | <children xmi:type="notation:Node" xmi:id="_x-0s1V4fEe2rXNsIDUvqhw" type="6002"> | ||
5395 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-0s1l4fEe2rXNsIDUvqhw" y="10"/> | ||
5396 | </children> | ||
5397 | <children xmi:type="notation:Node" xmi:id="_x-0s114fEe2rXNsIDUvqhw" type="6003"> | ||
5398 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-0s2F4fEe2rXNsIDUvqhw" y="10"/> | ||
5399 | </children> | ||
5400 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_x-0s0F4fEe2rXNsIDUvqhw" routing="Tree"/> | ||
5401 | <styles xmi:type="notation:FontStyle" xmi:id="_x-0s0V4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
5402 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_x-0s0l4fEe2rXNsIDUvqhw" points="[0, 0, 24, 24]$[-24, -24, 0, 0]"/> | ||
5403 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x-1T0F4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | ||
5404 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x-1T0V4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | ||
5405 | </edges> | ||
5406 | <edges xmi:type="notation:Edge" xmi:id="_x-1T0l4fEe2rXNsIDUvqhw" type="4001" element="_x-yQg14fEe2rXNsIDUvqhw" source="_x-zepF4fEe2rXNsIDUvqhw" target="_x-yQil4fEe2rXNsIDUvqhw"> | ||
5407 | <children xmi:type="notation:Node" xmi:id="_x-1T1l4fEe2rXNsIDUvqhw" type="6001"> | ||
5408 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-1T114fEe2rXNsIDUvqhw" y="-10"/> | ||
5409 | </children> | ||
5410 | <children xmi:type="notation:Node" xmi:id="_x-1T2F4fEe2rXNsIDUvqhw" type="6002"> | ||
5411 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-1T2V4fEe2rXNsIDUvqhw" y="10"/> | ||
5412 | </children> | ||
5413 | <children xmi:type="notation:Node" xmi:id="_x-1T2l4fEe2rXNsIDUvqhw" type="6003"> | ||
5414 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_x-1T214fEe2rXNsIDUvqhw" y="10"/> | ||
5415 | </children> | ||
5416 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_x-1T014fEe2rXNsIDUvqhw" routing="Tree"/> | ||
5417 | <styles xmi:type="notation:FontStyle" xmi:id="_x-1T1F4fEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
5418 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_x-1T1V4fEe2rXNsIDUvqhw" points="[0, 0, 36, 36]$[-36, -36, 0, 0]"/> | ||
5419 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x-1T3F4fEe2rXNsIDUvqhw" id="(0.3389830508474576,0.0)"/> | ||
5420 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_x-1T3V4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | ||
5421 | </edges> | ||
5422 | <edges xmi:type="notation:Edge" xmi:id="_1WZFh14fEe2rXNsIDUvqhw" type="4001" element="_1WX3YF4fEe2rXNsIDUvqhw" source="_x-zepF4fEe2rXNsIDUvqhw" target="_1WZFgF4fEe2rXNsIDUvqhw"> | ||
5423 | <children xmi:type="notation:Node" xmi:id="_1WZFi14fEe2rXNsIDUvqhw" type="6001"> | ||
5424 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1WZFjF4fEe2rXNsIDUvqhw" x="-76" y="-100"/> | ||
5425 | </children> | ||
5426 | <children xmi:type="notation:Node" xmi:id="_1WZskF4fEe2rXNsIDUvqhw" type="6002"> | ||
5427 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1WZskV4fEe2rXNsIDUvqhw" x="-25"/> | ||
5428 | </children> | ||
5429 | <children xmi:type="notation:Node" xmi:id="_1WZskl4fEe2rXNsIDUvqhw" type="6003"> | ||
5430 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1WZsk14fEe2rXNsIDUvqhw" x="-86"/> | ||
5431 | </children> | ||
5432 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_1WZFiF4fEe2rXNsIDUvqhw" routing="Rectilinear"/> | ||
5433 | <styles xmi:type="notation:FontStyle" xmi:id="_1WZFiV4fEe2rXNsIDUvqhw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | ||
5434 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1WZFil4fEe2rXNsIDUvqhw" points="[4, 49, -44, -359]$[4, 191, -44, -217]$[43, 191, -5, -217]$[43, 359, -5, -49]"/> | ||
5435 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1WZslF4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | ||
5436 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1WZslV4fEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | ||
5437 | </edges> | ||
5438 | <edges xmi:type="notation:Edge" xmi:id="_mjEwQF4hEe2rXNsIDUvqhw" type="4001" element="_mjCUBl4hEe2rXNsIDUvqhw" source="_x-y3m14fEe2rXNsIDUvqhw" target="_mjEJMF4hEe2rXNsIDUvqhw"> | ||
5439 | <children xmi:type="notation:Node" xmi:id="_mjEwRF4hEe2rXNsIDUvqhw" type="6001"> | ||
5440 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjEwRV4hEe2rXNsIDUvqhw" x="-17" y="1"/> | ||
5441 | </children> | 5853 | </children> |
5442 | <children xmi:type="notation:Node" xmi:id="_mjEwRl4hEe2rXNsIDUvqhw" type="6002"> | 5854 | <children xmi:type="notation:Node" xmi:id="_wufhQBRqEe-4k7CzzL6IsA" type="6002"> |
5443 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjEwR14hEe2rXNsIDUvqhw" x="10"/> | 5855 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wufhQRRqEe-4k7CzzL6IsA" y="10"/> |
5444 | </children> | 5856 | </children> |
5445 | <children xmi:type="notation:Node" xmi:id="_mjEwSF4hEe2rXNsIDUvqhw" type="6003"> | 5857 | <children xmi:type="notation:Node" xmi:id="_wufhQhRqEe-4k7CzzL6IsA" type="6003"> |
5446 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjEwSV4hEe2rXNsIDUvqhw" x="10"/> | 5858 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wufhQxRqEe-4k7CzzL6IsA" y="10"/> |
5447 | </children> | 5859 | </children> |
5448 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_mjEwQV4hEe2rXNsIDUvqhw" routing="Rectilinear"/> | 5860 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_wue6MRRqEe-4k7CzzL6IsA" routing="Rectilinear"/> |
5449 | <styles xmi:type="notation:FontStyle" xmi:id="_mjEwQl4hEe2rXNsIDUvqhw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 5861 | <styles xmi:type="notation:FontStyle" xmi:id="_wue6MhRqEe-4k7CzzL6IsA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
5450 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mjEwQ14hEe2rXNsIDUvqhw" points="[1, 49, 1, -143]$[1, 143, 1, -49]"/> | 5862 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wue6MxRqEe-4k7CzzL6IsA" points="[-60, 0, 1322, 63]$[-710, 0, 672, 63]$[-710, -63, 672, 0]$[-1361, -63, 21, 0]"/> |
5451 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mjEwSl4hEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5863 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wufhRBRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> |
5452 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mjEwS14hEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5864 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wufhRRRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> |
5453 | </edges> | 5865 | </edges> |
5454 | <edges xmi:type="notation:Edge" xmi:id="_mjEwTF4hEe2rXNsIDUvqhw" type="4001" element="_mjCUDV4hEe2rXNsIDUvqhw" source="_x-zepF4fEe2rXNsIDUvqhw" target="_mjEJMF4hEe2rXNsIDUvqhw"> | 5866 | <edges xmi:type="notation:Edge" xmi:id="_wufhRhRqEe-4k7CzzL6IsA" visible="false" type="4001" element="_wucd8xRqEe-4k7CzzL6IsA" source="_wudsFhRqEe-4k7CzzL6IsA" target="_e75ZcBRWEe-4k7CzzL6IsA"> |
5455 | <children xmi:type="notation:Node" xmi:id="_mjEwUF4hEe2rXNsIDUvqhw" type="6001"> | 5867 | <children xmi:type="notation:Node" xmi:id="_wugIUxRqEe-4k7CzzL6IsA" type="6001"> |
5456 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjEwUV4hEe2rXNsIDUvqhw" x="-131" y="5"/> | 5868 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wugIVBRqEe-4k7CzzL6IsA" y="-10"/> |
5457 | </children> | 5869 | </children> |
5458 | <children xmi:type="notation:Node" xmi:id="_mjEwUl4hEe2rXNsIDUvqhw" type="6002"> | 5870 | <children xmi:type="notation:Node" xmi:id="_wugIVRRqEe-4k7CzzL6IsA" type="6002"> |
5459 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjEwU14hEe2rXNsIDUvqhw" x="-25" y="10"/> | 5871 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wugIVhRqEe-4k7CzzL6IsA" y="10"/> |
5460 | </children> | 5872 | </children> |
5461 | <children xmi:type="notation:Node" xmi:id="_mjFXUF4hEe2rXNsIDUvqhw" type="6003"> | 5873 | <children xmi:type="notation:Node" xmi:id="_wugIVxRqEe-4k7CzzL6IsA" type="6003"> |
5462 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjFXUV4hEe2rXNsIDUvqhw" x="-36" y="-100"/> | 5874 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wugIWBRqEe-4k7CzzL6IsA" y="10"/> |
5463 | </children> | 5875 | </children> |
5464 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_mjEwTV4hEe2rXNsIDUvqhw" routing="Rectilinear"/> | 5876 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_wugIUBRqEe-4k7CzzL6IsA" routing="Rectilinear"/> |
5465 | <styles xmi:type="notation:FontStyle" xmi:id="_mjEwTl4hEe2rXNsIDUvqhw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 5877 | <styles xmi:type="notation:FontStyle" xmi:id="_wugIURRqEe-4k7CzzL6IsA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
5466 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mjEwT14hEe2rXNsIDUvqhw" points="[59, 11, -193, -181]$[109, 11, -143, -181]$[109, 193, -143, 1]$[193, 193, -59, 1]"/> | 5878 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wugIUhRqEe-4k7CzzL6IsA" points="[-60, 0, 925, 363]$[-521, 0, 464, 363]$[-521, -363, 464, 0]$[-983, -363, 2, 0]"/> |
5467 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mjFXUl4hEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5879 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wugvYBRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> |
5468 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mjFXU14hEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5880 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wugvYRRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> |
5469 | </edges> | 5881 | </edges> |
5470 | <edges xmi:type="notation:Edge" xmi:id="_mjFXVF4hEe2rXNsIDUvqhw" type="4001" element="_mjC7Il4hEe2rXNsIDUvqhw" source="_1WZFgF4fEe2rXNsIDUvqhw" target="_mjEJMF4hEe2rXNsIDUvqhw"> | 5882 | <edges xmi:type="notation:Edge" xmi:id="_wugvYhRqEe-4k7CzzL6IsA" visible="false" type="4001" element="_wudFAxRqEe-4k7CzzL6IsA" source="_wudsFhRqEe-4k7CzzL6IsA" target="_nWw4wBOtEe-xzrPFjBSxRw"> |
5471 | <children xmi:type="notation:Node" xmi:id="_mjFXWF4hEe2rXNsIDUvqhw" type="6001"> | 5883 | <children xmi:type="notation:Node" xmi:id="_wugvZhRqEe-4k7CzzL6IsA" type="6001"> |
5472 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjFXWV4hEe2rXNsIDUvqhw" y="-10"/> | 5884 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wugvZxRqEe-4k7CzzL6IsA" y="-10"/> |
5473 | </children> | 5885 | </children> |
5474 | <children xmi:type="notation:Node" xmi:id="_mjFXWl4hEe2rXNsIDUvqhw" type="6002"> | 5886 | <children xmi:type="notation:Node" xmi:id="_wugvaBRqEe-4k7CzzL6IsA" type="6002"> |
5475 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjFXW14hEe2rXNsIDUvqhw" y="10"/> | 5887 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wugvaRRqEe-4k7CzzL6IsA" y="10"/> |
5476 | </children> | 5888 | </children> |
5477 | <children xmi:type="notation:Node" xmi:id="_mjFXXF4hEe2rXNsIDUvqhw" type="6003"> | 5889 | <children xmi:type="notation:Node" xmi:id="_wugvahRqEe-4k7CzzL6IsA" type="6003"> |
5478 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjFXXV4hEe2rXNsIDUvqhw" y="10"/> | 5890 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wugvaxRqEe-4k7CzzL6IsA" y="10"/> |
5479 | </children> | 5891 | </children> |
5480 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_mjFXVV4hEe2rXNsIDUvqhw" routing="Tree"/> | 5892 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_wugvYxRqEe-4k7CzzL6IsA" routing="Rectilinear"/> |
5481 | <styles xmi:type="notation:FontStyle" xmi:id="_mjFXVl4hEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 5893 | <styles xmi:type="notation:FontStyle" xmi:id="_wugvZBRqEe-4k7CzzL6IsA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
5482 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mjFXV14hEe2rXNsIDUvqhw" points="[26, 1, -688, -26]$[654, 24, -60, -3]"/> | 5894 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wugvZRRqEe-4k7CzzL6IsA" points="[-60, 0, 1057, 63]$[-580, 0, 537, 63]$[-580, -63, 537, 0]$[-1100, -63, 17, 0]"/> |
5483 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mjFXXl4hEe2rXNsIDUvqhw" id="(0.7966101694915254,0.11224489795918367)"/> | 5895 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wuhWcBRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> |
5484 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mjFXX14hEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5896 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wuhWcRRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> |
5485 | </edges> | 5897 | </edges> |
5486 | <edges xmi:type="notation:Edge" xmi:id="_vYOzIF4hEe2rXNsIDUvqhw" type="4001" element="_vYNlAl4hEe2rXNsIDUvqhw" source="_x-y3lF4fEe2rXNsIDUvqhw" target="_vYOzEF4hEe2rXNsIDUvqhw"> | 5898 | <edges xmi:type="notation:Edge" xmi:id="_xsGZBhRqEe-4k7CzzL6IsA" type="4001" element="_xrullhRqEe-4k7CzzL6IsA" source="_x-y3lF4fEe2rXNsIDUvqhw" target="_wudsFhRqEe-4k7CzzL6IsA"> |
5487 | <children xmi:type="notation:Node" xmi:id="_vYPaIF4hEe2rXNsIDUvqhw" type="6001"> | 5899 | <children xmi:type="notation:Node" xmi:id="_xsGZChRqEe-4k7CzzL6IsA" type="6001"> |
5488 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vYPaIV4hEe2rXNsIDUvqhw" x="-10"/> | 5900 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xsGZCxRqEe-4k7CzzL6IsA" y="-10"/> |
5489 | </children> | 5901 | </children> |
5490 | <children xmi:type="notation:Node" xmi:id="_vYPaIl4hEe2rXNsIDUvqhw" type="6002"> | 5902 | <children xmi:type="notation:Node" xmi:id="_xsGZDBRqEe-4k7CzzL6IsA" type="6002"> |
5491 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vYPaI14hEe2rXNsIDUvqhw" x="10"/> | 5903 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xsGZDRRqEe-4k7CzzL6IsA" y="10"/> |
5492 | </children> | 5904 | </children> |
5493 | <children xmi:type="notation:Node" xmi:id="_vYPaJF4hEe2rXNsIDUvqhw" type="6003"> | 5905 | <children xmi:type="notation:Node" xmi:id="_xsGZDhRqEe-4k7CzzL6IsA" type="6003"> |
5494 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vYPaJV4hEe2rXNsIDUvqhw" x="10"/> | 5906 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_xsGZDxRqEe-4k7CzzL6IsA" y="10"/> |
5495 | </children> | 5907 | </children> |
5496 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_vYOzIV4hEe2rXNsIDUvqhw" routing="Rectilinear"/> | 5908 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_xsGZBxRqEe-4k7CzzL6IsA" routing="Tree"/> |
5497 | <styles xmi:type="notation:FontStyle" xmi:id="_vYOzIl4hEe2rXNsIDUvqhw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 5909 | <styles xmi:type="notation:FontStyle" xmi:id="_xsGZCBRqEe-4k7CzzL6IsA" fontName="Noto Sans" fontHeight="8"/> |
5498 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vYOzI14hEe2rXNsIDUvqhw" points="[0, 49, 7, -155]$[0, 155, 7, -49]"/> | 5910 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xsGZCRRqEe-4k7CzzL6IsA" points="[0, 0, -72, 144]$[72, -144, 0, 0]"/> |
5499 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vYPaJl4hEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5911 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xsGZEBRqEe-4k7CzzL6IsA" id="(0.7627118644067796,0.14285714285714285)"/> |
5500 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vYPaJ14hEe2rXNsIDUvqhw" id="(0.5,0.5)"/> | 5912 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xsGZERRqEe-4k7CzzL6IsA" id="(0.5,0.5)"/> |
5501 | </edges> | 5913 | </edges> |
5502 | </data> | 5914 | </data> |
5503 | </ownedAnnotationEntries> | 5915 | </ownedAnnotationEntries> |
5504 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_sCG2sV4fEe2rXNsIDUvqhw" source="DANNOTATION_CUSTOMIZATION_KEY"> | 5916 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_sCG2sV4fEe2rXNsIDUvqhw" source="DANNOTATION_CUSTOMIZATION_KEY"> |
5505 | <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_sCG2sl4fEe2rXNsIDUvqhw"> | 5917 | <data xmi:type="diagram:ComputedStyleDescriptionRegistry" uid="_sCG2sl4fEe2rXNsIDUvqhw"> |
5506 | <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_1WX3YV4fEe2rXNsIDUvqhw" sourceArrow="FillDiamond" routingStyle="manhattan"> | 5918 | <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_wub25xRqEe-4k7CzzL6IsA" sourceArrow="FillDiamond" routingStyle="manhattan"> |
5507 | <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> | 5919 | <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> |
5508 | <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_1WX3Yl4fEe2rXNsIDUvqhw" showIcon="false" labelExpression="service:render"> | 5920 | <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_wub26BRqEe-4k7CzzL6IsA" showIcon="false" labelExpression="service:render"> |
5509 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> | 5921 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/> |
5510 | </centerLabelStyleDescription> | 5922 | </centerLabelStyleDescription> |
5511 | <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_1WX3Y14fEe2rXNsIDUvqhw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel"> | 5923 | <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_wub26RRqEe-4k7CzzL6IsA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel"> |
5512 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> | 5924 | <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/> |
5513 | </endLabelStyleDescription> | 5925 | </endLabelStyleDescription> |
5514 | </computedStyleDescriptions> | 5926 | </computedStyleDescriptions> |
5515 | </data> | 5927 | </data> |
5516 | </ownedAnnotationEntries> | 5928 | </ownedAnnotationEntries> |
5517 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_x-tYAF4fEe2rXNsIDUvqhw" name="Action" tooltipText="" incomingEdges="_x-xpcV4fEe2rXNsIDUvqhw _x-xpeF4fEe2rXNsIDUvqhw _x-yQg14fEe2rXNsIDUvqhw" width="12" height="10"> | 5929 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_x-tYAF4fEe2rXNsIDUvqhw" name="Action" tooltipText="" incomingEdges="_x-xpcV4fEe2rXNsIDUvqhw" width="12" height="10"> |
5518 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Action"/> | 5930 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Action"/> |
5519 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Action"/> | 5931 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Action"/> |
5520 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 5932 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
5521 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 5933 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
5522 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 5934 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
5523 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_x-tYAV4fEe2rXNsIDUvqhw" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> | 5935 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_tGqe8RRqEe-4k7CzzL6IsA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_interface.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> |
5524 | <labelFormat>italic</labelFormat> | 5936 | <labelFormat>italic</labelFormat> |
5525 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | 5937 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.0/@style"/> |
5526 | </ownedStyle> | 5938 | </ownedStyle> |
5527 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5939 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5528 | </ownedDiagramElements> | 5940 | </ownedDiagramElements> |
5529 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_x-t_EF4fEe2rXNsIDUvqhw" name="AssertionAction" tooltipText="" outgoingEdges="_x-xpcV4fEe2rXNsIDUvqhw _vYNlAl4hEe2rXNsIDUvqhw" width="12" height="10"> | 5941 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_x-t_EF4fEe2rXNsIDUvqhw" name="AssertionAction" tooltipText="" outgoingEdges="_x-xpcV4fEe2rXNsIDUvqhw _xrullhRqEe-4k7CzzL6IsA" width="12" height="10"> |
5530 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> | 5942 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> |
5531 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> | 5943 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> |
5532 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 5944 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
@@ -5536,108 +5948,23 @@ | |||
5536 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | 5948 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> |
5537 | </ownedStyle> | 5949 | </ownedStyle> |
5538 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5950 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5539 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_x-wbWF4fEe2rXNsIDUvqhw" name="value : LogicValue = TRUE" tooltipText=""> | ||
5540 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//AssertionAction/value"/> | ||
5541 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//AssertionAction/value"/> | ||
5542 | <ownedStyle xmi:type="diagram:BundledImage" uid="_x-wbWV4fEe2rXNsIDUvqhw" labelAlignment="LEFT"> | ||
5543 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
5544 | </ownedStyle> | ||
5545 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
5546 | </ownedElements> | ||
5547 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_x-wbWl4fEe2rXNsIDUvqhw" name="overwrite : EBoolean = FALSE" tooltipText=""> | ||
5548 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//AssertionAction/overwrite"/> | ||
5549 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//AssertionAction/overwrite"/> | ||
5550 | <ownedStyle xmi:type="diagram:BundledImage" uid="_x-xCYF4fEe2rXNsIDUvqhw" labelAlignment="LEFT"> | ||
5551 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
5552 | </ownedStyle> | ||
5553 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
5554 | </ownedElements> | ||
5555 | </ownedDiagramElements> | ||
5556 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_x-t_E14fEe2rXNsIDUvqhw" name="DeleteAction" tooltipText="" outgoingEdges="_x-xpeF4fEe2rXNsIDUvqhw _mjCUBl4hEe2rXNsIDUvqhw" width="12" height="10"> | ||
5557 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//DeleteAction"/> | ||
5558 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//DeleteAction"/> | ||
5559 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5560 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5561 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5562 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_x-t_FF4fEe2rXNsIDUvqhw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
5563 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
5564 | </ownedStyle> | ||
5565 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
5566 | </ownedDiagramElements> | ||
5567 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_x-umIF4fEe2rXNsIDUvqhw" name="NewAction" tooltipText="" outgoingEdges="_x-yQg14fEe2rXNsIDUvqhw _1WX3YF4fEe2rXNsIDUvqhw _mjCUDV4hEe2rXNsIDUvqhw" width="12" height="10"> | ||
5568 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewAction"/> | ||
5569 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewAction"/> | ||
5570 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5571 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5572 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5573 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_x-umIV4fEe2rXNsIDUvqhw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
5574 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
5575 | </ownedStyle> | ||
5576 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
5577 | </ownedDiagramElements> | 5951 | </ownedDiagramElements> |
5578 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_x-xpcV4fEe2rXNsIDUvqhw" sourceNode="_x-t_EF4fEe2rXNsIDUvqhw" targetNode="_x-tYAF4fEe2rXNsIDUvqhw"> | 5952 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_x-xpcV4fEe2rXNsIDUvqhw" sourceNode="_x-t_EF4fEe2rXNsIDUvqhw" targetNode="_x-tYAF4fEe2rXNsIDUvqhw"> |
5579 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> | 5953 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> |
5580 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> | 5954 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> |
5581 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_x-xpcl4fEe2rXNsIDUvqhw" targetArrow="InputClosedArrow" routingStyle="tree"> | 5955 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_tGrGBhRqEe-4k7CzzL6IsA" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> |
5582 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | 5956 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/> |
5583 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_x-xpc14fEe2rXNsIDUvqhw" showIcon="false"> | 5957 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_tGrGBxRqEe-4k7CzzL6IsA" showIcon="false"> |
5584 | <labelFormat>italic</labelFormat> | ||
5585 | </beginLabelStyle> | ||
5586 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_x-xpdF4fEe2rXNsIDUvqhw" showIcon="false"/> | ||
5587 | </ownedStyle> | ||
5588 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | ||
5589 | </ownedDiagramElements> | ||
5590 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_x-xpeF4fEe2rXNsIDUvqhw" sourceNode="_x-t_E14fEe2rXNsIDUvqhw" targetNode="_x-tYAF4fEe2rXNsIDUvqhw"> | ||
5591 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//DeleteAction"/> | ||
5592 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//DeleteAction"/> | ||
5593 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_x-xpeV4fEe2rXNsIDUvqhw" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
5594 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | ||
5595 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_x-xpel4fEe2rXNsIDUvqhw" showIcon="false"> | ||
5596 | <labelFormat>italic</labelFormat> | ||
5597 | </beginLabelStyle> | ||
5598 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_x-xpe14fEe2rXNsIDUvqhw" showIcon="false"/> | ||
5599 | </ownedStyle> | ||
5600 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | ||
5601 | </ownedDiagramElements> | ||
5602 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_x-yQg14fEe2rXNsIDUvqhw" sourceNode="_x-umIF4fEe2rXNsIDUvqhw" targetNode="_x-tYAF4fEe2rXNsIDUvqhw"> | ||
5603 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewAction"/> | ||
5604 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewAction"/> | ||
5605 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_x-yQhF4fEe2rXNsIDUvqhw" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
5606 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | ||
5607 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_x-yQhV4fEe2rXNsIDUvqhw" showIcon="false"> | ||
5608 | <labelFormat>italic</labelFormat> | 5958 | <labelFormat>italic</labelFormat> |
5609 | </beginLabelStyle> | 5959 | </beginLabelStyle> |
5610 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_x-yQhl4fEe2rXNsIDUvqhw" showIcon="false"/> | 5960 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_tGrGCBRqEe-4k7CzzL6IsA" showIcon="false"/> |
5611 | </ownedStyle> | 5961 | </ownedStyle> |
5612 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 5962 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
5613 | </ownedDiagramElements> | 5963 | </ownedDiagramElements> |
5614 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_1WVbIF4fEe2rXNsIDUvqhw" name="NewVariable" tooltipText="" outgoingEdges="_mjC7Il4hEe2rXNsIDUvqhw" incomingEdges="_1WX3YF4fEe2rXNsIDUvqhw" width="12" height="10"> | 5964 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_mi_QsF4hEe2rXNsIDUvqhw" name="VariableOrNode" visible="false" tooltipText="" width="12" height="10"> |
5615 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewVariable"/> | ||
5616 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewVariable"/> | ||
5617 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
5618 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
5619 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
5620 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_1WVbIV4fEe2rXNsIDUvqhw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
5621 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | ||
5622 | </ownedStyle> | ||
5623 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
5624 | </ownedDiagramElements> | ||
5625 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_1WX3YF4fEe2rXNsIDUvqhw" name="[0..1] variable" sourceNode="_x-umIF4fEe2rXNsIDUvqhw" targetNode="_1WVbIF4fEe2rXNsIDUvqhw"> | ||
5626 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NewAction/variable"/> | ||
5627 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NewAction/variable"/> | ||
5628 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_1WX3ZF4fEe2rXNsIDUvqhw" description="_1WX3YV4fEe2rXNsIDUvqhw" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | ||
5629 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_1WX3Zl4fEe2rXNsIDUvqhw" showIcon="false"> | ||
5630 | <customFeatures>labelSize</customFeatures> | ||
5631 | </centerLabelStyle> | ||
5632 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_1WX3ZV4fEe2rXNsIDUvqhw" showIcon="false" labelColor="39,76,114"> | ||
5633 | <customFeatures>labelSize</customFeatures> | ||
5634 | </endLabelStyle> | ||
5635 | </ownedStyle> | ||
5636 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
5637 | </ownedDiagramElements> | ||
5638 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_mi_QsF4hEe2rXNsIDUvqhw" name="VariableOrNode" tooltipText="" incomingEdges="_mjCUBl4hEe2rXNsIDUvqhw _mjCUDV4hEe2rXNsIDUvqhw _mjC7Il4hEe2rXNsIDUvqhw" width="12" height="10"> | ||
5639 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//VariableOrNode"/> | 5965 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//VariableOrNode"/> |
5640 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//VariableOrNode"/> | 5966 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//VariableOrNode"/> |
5967 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_IgckgBOwEe-4k7CzzL6IsA"/> | ||
5641 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 5968 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
5642 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 5969 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
5643 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 5970 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
@@ -5647,49 +5974,10 @@ | |||
5647 | </ownedStyle> | 5974 | </ownedStyle> |
5648 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5975 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5649 | </ownedDiagramElements> | 5976 | </ownedDiagramElements> |
5650 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_mjCUBl4hEe2rXNsIDUvqhw" name="[0..1] variableOrNode" sourceNode="_x-t_E14fEe2rXNsIDUvqhw" targetNode="_mi_QsF4hEe2rXNsIDUvqhw"> | 5977 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_vYLvwF4hEe2rXNsIDUvqhw" name="Atom" visible="false" tooltipText="" width="12" height="10"> |
5651 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//DeleteAction/variableOrNode"/> | ||
5652 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//DeleteAction/variableOrNode"/> | ||
5653 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_mjCUB14hEe2rXNsIDUvqhw" routingStyle="manhattan" strokeColor="0,0,0"> | ||
5654 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/> | ||
5655 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_mjCUCV4hEe2rXNsIDUvqhw" showIcon="false"> | ||
5656 | <customFeatures>labelSize</customFeatures> | ||
5657 | </centerLabelStyle> | ||
5658 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_mjCUCF4hEe2rXNsIDUvqhw" showIcon="false" labelColor="39,76,114"> | ||
5659 | <customFeatures>labelSize</customFeatures> | ||
5660 | </endLabelStyle> | ||
5661 | </ownedStyle> | ||
5662 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
5663 | </ownedDiagramElements> | ||
5664 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_mjCUDV4hEe2rXNsIDUvqhw" name="[0..1] parent" sourceNode="_x-umIF4fEe2rXNsIDUvqhw" targetNode="_mi_QsF4hEe2rXNsIDUvqhw"> | ||
5665 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NewAction/parent"/> | ||
5666 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NewAction/parent"/> | ||
5667 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_mjCUDl4hEe2rXNsIDUvqhw" routingStyle="manhattan" strokeColor="0,0,0"> | ||
5668 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/> | ||
5669 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_mjCUEF4hEe2rXNsIDUvqhw" showIcon="false"> | ||
5670 | <customFeatures>labelSize</customFeatures> | ||
5671 | </centerLabelStyle> | ||
5672 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_mjCUD14hEe2rXNsIDUvqhw" showIcon="false" labelColor="39,76,114"> | ||
5673 | <customFeatures>labelSize</customFeatures> | ||
5674 | </endLabelStyle> | ||
5675 | </ownedStyle> | ||
5676 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
5677 | </ownedDiagramElements> | ||
5678 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_mjC7Il4hEe2rXNsIDUvqhw" sourceNode="_1WVbIF4fEe2rXNsIDUvqhw" targetNode="_mi_QsF4hEe2rXNsIDUvqhw"> | ||
5679 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewVariable"/> | ||
5680 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NewVariable"/> | ||
5681 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_mjC7I14hEe2rXNsIDUvqhw" lineStyle="dot" targetArrow="InputClosedArrow" routingStyle="tree" strokeColor="125,125,125"> | ||
5682 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.1/@style"/> | ||
5683 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_mjC7JF4hEe2rXNsIDUvqhw" showIcon="false"> | ||
5684 | <labelFormat>italic</labelFormat> | ||
5685 | </beginLabelStyle> | ||
5686 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_mjC7JV4hEe2rXNsIDUvqhw" showIcon="false"/> | ||
5687 | </ownedStyle> | ||
5688 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | ||
5689 | </ownedDiagramElements> | ||
5690 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_vYLvwF4hEe2rXNsIDUvqhw" name="Atom" tooltipText="" incomingEdges="_vYNlAl4hEe2rXNsIDUvqhw" width="12" height="10"> | ||
5691 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> | 5978 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> |
5692 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> | 5979 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> |
5980 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_c74pgBRWEe-4k7CzzL6IsA"/> | ||
5693 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 5981 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
5694 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 5982 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
5695 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 5983 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
@@ -5697,7 +5985,7 @@ | |||
5697 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | 5985 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> |
5698 | </ownedStyle> | 5986 | </ownedStyle> |
5699 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 5987 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
5700 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_vYM9414hEe2rXNsIDUvqhw" name="transitiveClosure : EBoolean = false" tooltipText=""> | 5988 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_vYM9414hEe2rXNsIDUvqhw" name="transitiveClosure : EBoolean = false" visible="false" tooltipText=""> |
5701 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Atom/transitiveClosure"/> | 5989 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Atom/transitiveClosure"/> |
5702 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Atom/transitiveClosure"/> | 5990 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Atom/transitiveClosure"/> |
5703 | <ownedStyle xmi:type="diagram:BundledImage" uid="_vYM95F4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> | 5991 | <ownedStyle xmi:type="diagram:BundledImage" uid="_vYM95F4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> |
@@ -5705,31 +5993,27 @@ | |||
5705 | </ownedStyle> | 5993 | </ownedStyle> |
5706 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | 5994 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> |
5707 | </ownedElements> | 5995 | </ownedElements> |
5708 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_3vrVA163Ee2rXNsIDUvqhw" name=" arguments : Expr" tooltipText=""> | 5996 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_wuaowBRqEe-4k7CzzL6IsA" name=" arguments : Expr" visible="false" tooltipText=""> |
5709 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Atom/arguments"/> | 5997 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Atom/arguments"/> |
5710 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Atom/arguments"/> | 5998 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Atom/arguments"/> |
5711 | <ownedStyle xmi:type="diagram:BundledImage" uid="_3vrVBF63Ee2rXNsIDUvqhw" labelAlignment="LEFT" color="114,159,207"> | 5999 | <ownedStyle xmi:type="diagram:BundledImage" uid="_wuaowRRqEe-4k7CzzL6IsA" labelAlignment="LEFT" color="114,159,207"> |
6000 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/> | ||
6001 | </ownedStyle> | ||
6002 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/> | ||
6003 | </ownedElements> | ||
6004 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_wuaowhRqEe-4k7CzzL6IsA" name=" relation : Relation" visible="false" tooltipText=""> | ||
6005 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Atom/relation"/> | ||
6006 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//Atom/relation"/> | ||
6007 | <ownedStyle xmi:type="diagram:BundledImage" uid="_wuaowxRqEe-4k7CzzL6IsA" labelAlignment="LEFT" color="114,159,207"> | ||
5712 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/> | 6008 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/> |
5713 | </ownedStyle> | 6009 | </ownedStyle> |
5714 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/> | 6010 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/> |
5715 | </ownedElements> | 6011 | </ownedElements> |
5716 | </ownedDiagramElements> | 6012 | </ownedDiagramElements> |
5717 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_vYNlAl4hEe2rXNsIDUvqhw" name="[0..1] atom" sourceNode="_x-t_EF4fEe2rXNsIDUvqhw" targetNode="_vYLvwF4hEe2rXNsIDUvqhw"> | 6013 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_4xTbQF4hEe2rXNsIDUvqhw" name="LogicValue" visible="false" tooltipText="" width="12" height="10"> |
5718 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AssertionAction/atom"/> | ||
5719 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AssertionAction/atom"/> | ||
5720 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_vYNlA14hEe2rXNsIDUvqhw" description="_1WX3YV4fEe2rXNsIDUvqhw" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | ||
5721 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_vYNlBV4hEe2rXNsIDUvqhw" showIcon="false"> | ||
5722 | <customFeatures>labelSize</customFeatures> | ||
5723 | </centerLabelStyle> | ||
5724 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_vYNlBF4hEe2rXNsIDUvqhw" showIcon="false" labelColor="39,76,114"> | ||
5725 | <customFeatures>labelSize</customFeatures> | ||
5726 | </endLabelStyle> | ||
5727 | </ownedStyle> | ||
5728 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
5729 | </ownedDiagramElements> | ||
5730 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_4xTbQF4hEe2rXNsIDUvqhw" name="LogicValue" tooltipText="" width="12" height="10"> | ||
5731 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//LogicValue"/> | 6014 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//LogicValue"/> |
5732 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//LogicValue"/> | 6015 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//LogicValue"/> |
6016 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_lpamIBOtEe-xzrPFjBSxRw"/> | ||
5733 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 6017 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
5734 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 6018 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
5735 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 6019 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
@@ -5737,7 +6021,7 @@ | |||
5737 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> | 6021 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> |
5738 | </ownedStyle> | 6022 | </ownedStyle> |
5739 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> | 6023 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> |
5740 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xV3g14hEe2rXNsIDUvqhw" name="TRUE" tooltipText=""> | 6024 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xV3g14hEe2rXNsIDUvqhw" name="TRUE" visible="false" tooltipText=""> |
5741 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/TRUE"/> | 6025 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/TRUE"/> |
5742 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/TRUE"/> | 6026 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/TRUE"/> |
5743 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xV3hF4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> | 6027 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xV3hF4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> |
@@ -5745,7 +6029,7 @@ | |||
5745 | </ownedStyle> | 6029 | </ownedStyle> |
5746 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | 6030 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> |
5747 | </ownedElements> | 6031 | </ownedElements> |
5748 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xV3hV4hEe2rXNsIDUvqhw" name="FALSE" tooltipText=""> | 6032 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xV3hV4hEe2rXNsIDUvqhw" name="FALSE" visible="false" tooltipText=""> |
5749 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/FALSE"/> | 6033 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/FALSE"/> |
5750 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/FALSE"/> | 6034 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/FALSE"/> |
5751 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xV3hl4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> | 6035 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xV3hl4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> |
@@ -5753,7 +6037,7 @@ | |||
5753 | </ownedStyle> | 6037 | </ownedStyle> |
5754 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | 6038 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> |
5755 | </ownedElements> | 6039 | </ownedElements> |
5756 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xWekF4hEe2rXNsIDUvqhw" name="UNKNOWN" tooltipText=""> | 6040 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xWekF4hEe2rXNsIDUvqhw" name="UNKNOWN" visible="false" tooltipText=""> |
5757 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/UNKNOWN"/> | 6041 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/UNKNOWN"/> |
5758 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/UNKNOWN"/> | 6042 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/UNKNOWN"/> |
5759 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xWekV4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> | 6043 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xWekV4hEe2rXNsIDUvqhw" labelAlignment="LEFT"> |
@@ -5761,7 +6045,7 @@ | |||
5761 | </ownedStyle> | 6045 | </ownedStyle> |
5762 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | 6046 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> |
5763 | </ownedElements> | 6047 | </ownedElements> |
5764 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xWekl4hEe2rXNsIDUvqhw" name="ERROR" tooltipText=""> | 6048 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_4xWekl4hEe2rXNsIDUvqhw" name="ERROR" visible="false" tooltipText=""> |
5765 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/ERROR"/> | 6049 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/ERROR"/> |
5766 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/ERROR"/> | 6050 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//LogicValue/ERROR"/> |
5767 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xWek14hEe2rXNsIDUvqhw" labelAlignment="LEFT"> | 6051 | <ownedStyle xmi:type="diagram:BundledImage" uid="_4xWek14hEe2rXNsIDUvqhw" labelAlignment="LEFT"> |
@@ -5770,6 +6054,121 @@ | |||
5770 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | 6054 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> |
5771 | </ownedElements> | 6055 | </ownedElements> |
5772 | </ownedDiagramElements> | 6056 | </ownedDiagramElements> |
6057 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_nWhBIBOtEe-xzrPFjBSxRw" name="Expr" visible="false" tooltipText="" incomingEdges="_wudFAxRqEe-4k7CzzL6IsA" width="12" height="10"> | ||
6058 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Expr"/> | ||
6059 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Expr"/> | ||
6060 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_t6GuERRqEe-4k7CzzL6IsA"/> | ||
6061 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
6062 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
6063 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
6064 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_nWhBIROtEe-xzrPFjBSxRw" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> | ||
6065 | <labelFormat>italic</labelFormat> | ||
6066 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | ||
6067 | </ownedStyle> | ||
6068 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
6069 | </ownedDiagramElements> | ||
6070 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_e7zS0BRWEe-4k7CzzL6IsA" name="Relation" visible="false" tooltipText="" incomingEdges="_wucd8xRqEe-4k7CzzL6IsA" width="12" height="10"> | ||
6071 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Relation"/> | ||
6072 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Relation"/> | ||
6073 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_t6GuEBRqEe-4k7CzzL6IsA"/> | ||
6074 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
6075 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
6076 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
6077 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_e7zS0RRWEe-4k7CzzL6IsA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> | ||
6078 | <labelFormat>italic</labelFormat> | ||
6079 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | ||
6080 | </ownedStyle> | ||
6081 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
6082 | </ownedDiagramElements> | ||
6083 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_mJSNMBRWEe-4k7CzzL6IsA" name="AssertionArgument" visible="false" tooltipText="" incomingEdges="_wub25hRqEe-4k7CzzL6IsA" width="12" height="10"> | ||
6084 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionArgument"/> | ||
6085 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionArgument"/> | ||
6086 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_ug9SsBRqEe-4k7CzzL6IsA"/> | ||
6087 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
6088 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
6089 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
6090 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_mJSNMRRWEe-4k7CzzL6IsA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> | ||
6091 | <labelFormat>italic</labelFormat> | ||
6092 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | ||
6093 | </ownedStyle> | ||
6094 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
6095 | </ownedDiagramElements> | ||
6096 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_wuYMgBRqEe-4k7CzzL6IsA" name="AbstractAssertion" tooltipText="" outgoingEdges="_wub25hRqEe-4k7CzzL6IsA _wucd8xRqEe-4k7CzzL6IsA _wudFAxRqEe-4k7CzzL6IsA" incomingEdges="_xrullhRqEe-4k7CzzL6IsA" width="12" height="10"> | ||
6097 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AbstractAssertion"/> | ||
6098 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AbstractAssertion"/> | ||
6099 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
6100 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
6101 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
6102 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_wuYMgRRqEe-4k7CzzL6IsA" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228"> | ||
6103 | <labelFormat>italic</labelFormat> | ||
6104 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/> | ||
6105 | </ownedStyle> | ||
6106 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | ||
6107 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_wubP0BRqEe-4k7CzzL6IsA" name=" arguments : AssertionArgument" tooltipText=""> | ||
6108 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/arguments"/> | ||
6109 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/arguments"/> | ||
6110 | <ownedStyle xmi:type="diagram:BundledImage" uid="_wubP0RRqEe-4k7CzzL6IsA" labelAlignment="LEFT" color="114,159,207"> | ||
6111 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/> | ||
6112 | </ownedStyle> | ||
6113 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/> | ||
6114 | </ownedElements> | ||
6115 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_wubP0hRqEe-4k7CzzL6IsA" name=" relation : Relation" tooltipText=""> | ||
6116 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/relation"/> | ||
6117 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/relation"/> | ||
6118 | <ownedStyle xmi:type="diagram:BundledImage" uid="_wubP0xRqEe-4k7CzzL6IsA" labelAlignment="LEFT" color="114,159,207"> | ||
6119 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/> | ||
6120 | </ownedStyle> | ||
6121 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/> | ||
6122 | </ownedElements> | ||
6123 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_wubP1BRqEe-4k7CzzL6IsA" name=" value : Expr" tooltipText=""> | ||
6124 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/value"/> | ||
6125 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/value"/> | ||
6126 | <ownedStyle xmi:type="diagram:BundledImage" uid="_wubP1RRqEe-4k7CzzL6IsA" labelAlignment="LEFT" color="114,159,207"> | ||
6127 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/> | ||
6128 | </ownedStyle> | ||
6129 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/> | ||
6130 | </ownedElements> | ||
6131 | </ownedDiagramElements> | ||
6132 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_wub25hRqEe-4k7CzzL6IsA" name="[0..*] arguments" visible="false" sourceNode="_wuYMgBRqEe-4k7CzzL6IsA" targetNode="_mJSNMBRWEe-4k7CzzL6IsA"> | ||
6133 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/arguments"/> | ||
6134 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/arguments"/> | ||
6135 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_wub26hRqEe-4k7CzzL6IsA" description="_wub25xRqEe-4k7CzzL6IsA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | ||
6136 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_wub27BRqEe-4k7CzzL6IsA" showIcon="false"/> | ||
6137 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_wub26xRqEe-4k7CzzL6IsA" labelSize="6" showIcon="false" labelColor="39,76,114"/> | ||
6138 | </ownedStyle> | ||
6139 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
6140 | </ownedDiagramElements> | ||
6141 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_wucd8xRqEe-4k7CzzL6IsA" name="[0..1] relation" visible="false" sourceNode="_wuYMgBRqEe-4k7CzzL6IsA" targetNode="_e7zS0BRWEe-4k7CzzL6IsA"> | ||
6142 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/relation"/> | ||
6143 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/relation"/> | ||
6144 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_wucd9BRqEe-4k7CzzL6IsA" routingStyle="manhattan" strokeColor="0,0,0"> | ||
6145 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/> | ||
6146 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_wucd9hRqEe-4k7CzzL6IsA" showIcon="false"/> | ||
6147 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_wucd9RRqEe-4k7CzzL6IsA" labelSize="6" showIcon="false" labelColor="39,76,114"/> | ||
6148 | </ownedStyle> | ||
6149 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
6150 | </ownedDiagramElements> | ||
6151 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_wudFAxRqEe-4k7CzzL6IsA" name="[0..1] value" visible="false" sourceNode="_wuYMgBRqEe-4k7CzzL6IsA" targetNode="_nWhBIBOtEe-xzrPFjBSxRw"> | ||
6152 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/value"/> | ||
6153 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AbstractAssertion/value"/> | ||
6154 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_wudFBBRqEe-4k7CzzL6IsA" description="_wub25xRqEe-4k7CzzL6IsA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | ||
6155 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_wudFBhRqEe-4k7CzzL6IsA" showIcon="false"/> | ||
6156 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_wudFBRRqEe-4k7CzzL6IsA" labelSize="6" showIcon="false" labelColor="39,76,114"/> | ||
6157 | </ownedStyle> | ||
6158 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | ||
6159 | </ownedDiagramElements> | ||
6160 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_xrullhRqEe-4k7CzzL6IsA" sourceNode="_x-t_EF4fEe2rXNsIDUvqhw" targetNode="_wuYMgBRqEe-4k7CzzL6IsA"> | ||
6161 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> | ||
6162 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AssertionAction"/> | ||
6163 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_xrullxRqEe-4k7CzzL6IsA" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
6164 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | ||
6165 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_xrulmBRqEe-4k7CzzL6IsA" showIcon="false"> | ||
6166 | <labelFormat>italic</labelFormat> | ||
6167 | </beginLabelStyle> | ||
6168 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_xrulmRRqEe-4k7CzzL6IsA" showIcon="false"/> | ||
6169 | </ownedStyle> | ||
6170 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | ||
6171 | </ownedDiagramElements> | ||
5773 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 6172 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
5774 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_sCFBgV4fEe2rXNsIDUvqhw"/> | 6173 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_sCFBgV4fEe2rXNsIDUvqhw"/> |
5775 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | 6174 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> |
diff --git a/subprojects/language-model/src/main/resources/model/problem.ecore b/subprojects/language-model/src/main/resources/model/problem.ecore index 9a349490..e830c724 100644 --- a/subprojects/language-model/src/main/resources/model/problem.ecore +++ b/subprojects/language-model/src/main/resources/model/problem.ecore | |||
@@ -38,6 +38,9 @@ | |||
38 | </eClassifiers> | 38 | </eClassifiers> |
39 | <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//Variable"> | 39 | <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//Variable"> |
40 | <eStructuralFeatures xsi:type="ecore:EReference" name="parameterType" eType="#//Relation"/> | 40 | <eStructuralFeatures xsi:type="ecore:EReference" name="parameterType" eType="#//Relation"/> |
41 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="concreteness" eType="#//Concreteness"/> | ||
42 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="modality" eType="#//Modality"/> | ||
43 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="binding" eType="#//ParameterBinding"/> | ||
41 | </eClassifiers> | 44 | </eClassifiers> |
42 | <eClassifiers xsi:type="ecore:EClass" name="Variable" abstract="true" eSuperTypes="#//VariableOrNode"/> | 45 | <eClassifiers xsi:type="ecore:EClass" name="Variable" abstract="true" eSuperTypes="#//VariableOrNode"/> |
43 | <eClassifiers xsi:type="ecore:EClass" name="Atom" eSuperTypes="#//Expr"> | 46 | <eClassifiers xsi:type="ecore:EClass" name="Atom" eSuperTypes="#//Expr"> |
@@ -52,11 +55,9 @@ | |||
52 | <eStructuralFeatures xsi:type="ecore:EReference" name="implicitVariables" upperBound="-1" | 55 | <eStructuralFeatures xsi:type="ecore:EReference" name="implicitVariables" upperBound="-1" |
53 | eType="#//ImplicitVariable" transient="true" containment="true"/> | 56 | eType="#//ImplicitVariable" transient="true" containment="true"/> |
54 | </eClassifiers> | 57 | </eClassifiers> |
55 | <eClassifiers xsi:type="ecore:EClass" name="Assertion" eSuperTypes="#//Statement"> | 58 | <eClassifiers xsi:type="ecore:EClass" name="AbstractAssertion" abstract="true"> |
56 | <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1" | 59 | <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1" |
57 | eType="#//AssertionArgument" containment="true"/> | 60 | eType="#//AssertionArgument" containment="true"/> |
58 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="default" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
59 | defaultValueLiteral="false"/> | ||
60 | <eStructuralFeatures xsi:type="ecore:EReference" name="relation" eType="#//Relation"/> | 61 | <eStructuralFeatures xsi:type="ecore:EReference" name="relation" eType="#//Relation"/> |
61 | <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expr" | 62 | <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="#//Expr" |
62 | containment="true"/> | 63 | containment="true"/> |
@@ -109,7 +110,7 @@ | |||
109 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="stringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> | 110 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="stringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> |
110 | </eClassifiers> | 111 | </eClassifiers> |
111 | <eClassifiers xsi:type="ecore:EClass" name="NodeAssertionArgument" eSuperTypes="#//AssertionArgument"> | 112 | <eClassifiers xsi:type="ecore:EClass" name="NodeAssertionArgument" eSuperTypes="#//AssertionArgument"> |
112 | <eStructuralFeatures xsi:type="ecore:EReference" name="node" eType="#//Node"/> | 113 | <eStructuralFeatures xsi:type="ecore:EReference" name="node" eType="#//VariableOrNode"/> |
113 | </eClassifiers> | 114 | </eClassifiers> |
114 | <eClassifiers xsi:type="ecore:EClass" name="AssertionArgument" abstract="true"/> | 115 | <eClassifiers xsi:type="ecore:EClass" name="AssertionArgument" abstract="true"/> |
115 | <eClassifiers xsi:type="ecore:EClass" name="NodeDeclaration" eSuperTypes="#//Statement"> | 116 | <eClassifiers xsi:type="ecore:EClass" name="NodeDeclaration" eSuperTypes="#//Statement"> |
@@ -128,28 +129,14 @@ | |||
128 | eType="#//Consequent" containment="true"/> | 129 | eType="#//Consequent" containment="true"/> |
129 | <eStructuralFeatures xsi:type="ecore:EReference" name="preconditions" upperBound="-1" | 130 | <eStructuralFeatures xsi:type="ecore:EReference" name="preconditions" upperBound="-1" |
130 | eType="#//Conjunction" containment="true"/> | 131 | eType="#//Conjunction" containment="true"/> |
132 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//RuleKind"/> | ||
131 | </eClassifiers> | 133 | </eClassifiers> |
132 | <eClassifiers xsi:type="ecore:EClass" name="Consequent"> | 134 | <eClassifiers xsi:type="ecore:EClass" name="Consequent"> |
133 | <eStructuralFeatures xsi:type="ecore:EReference" name="actions" upperBound="-1" | 135 | <eStructuralFeatures xsi:type="ecore:EReference" name="actions" upperBound="-1" |
134 | eType="#//Action" containment="true"/> | 136 | eType="#//Action" containment="true"/> |
135 | </eClassifiers> | 137 | </eClassifiers> |
136 | <eClassifiers xsi:type="ecore:EClass" name="Action" abstract="true"/> | 138 | <eClassifiers xsi:type="ecore:EClass" name="Action" abstract="true" interface="true"/> |
137 | <eClassifiers xsi:type="ecore:EClass" name="AssertionAction" eSuperTypes="#//Action"> | 139 | <eClassifiers xsi:type="ecore:EClass" name="AssertionAction" eSuperTypes="#//Action #//AbstractAssertion"/> |
138 | <eStructuralFeatures xsi:type="ecore:EReference" name="atom" eType="#//Atom" containment="true"/> | ||
139 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//LogicValue" | ||
140 | defaultValueLiteral="TRUE"/> | ||
141 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="overwrite" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
142 | defaultValueLiteral="FALSE"/> | ||
143 | </eClassifiers> | ||
144 | <eClassifiers xsi:type="ecore:EClass" name="DeleteAction" eSuperTypes="#//Action"> | ||
145 | <eStructuralFeatures xsi:type="ecore:EReference" name="variableOrNode" eType="#//VariableOrNode"/> | ||
146 | </eClassifiers> | ||
147 | <eClassifiers xsi:type="ecore:EClass" name="NewAction" eSuperTypes="#//Action"> | ||
148 | <eStructuralFeatures xsi:type="ecore:EReference" name="variable" eType="#//NewVariable" | ||
149 | containment="true"/> | ||
150 | <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VariableOrNode"/> | ||
151 | </eClassifiers> | ||
152 | <eClassifiers xsi:type="ecore:EClass" name="NewVariable" eSuperTypes="#//Variable"/> | ||
153 | <eClassifiers xsi:type="ecore:EEnum" name="ComparisonOp"> | 140 | <eClassifiers xsi:type="ecore:EEnum" name="ComparisonOp"> |
154 | <eLiterals name="LESS"/> | 141 | <eLiterals name="LESS"/> |
155 | <eLiterals name="LESS_EQ" value="1"/> | 142 | <eLiterals name="LESS_EQ" value="1"/> |
@@ -166,6 +153,7 @@ | |||
166 | <eLiterals name="REFERENCE" value="2"/> | 153 | <eLiterals name="REFERENCE" value="2"/> |
167 | <eLiterals name="CONTAINMENT" value="3"/> | 154 | <eLiterals name="CONTAINMENT" value="3"/> |
168 | <eLiterals name="CONTAINER" value="3"/> | 155 | <eLiterals name="CONTAINER" value="3"/> |
156 | <eLiterals name="PARTIAL" value="4"/> | ||
169 | </eClassifiers> | 157 | </eClassifiers> |
170 | <eClassifiers xsi:type="ecore:EClass" name="Expr" abstract="true"/> | 158 | <eClassifiers xsi:type="ecore:EClass" name="Expr" abstract="true"/> |
171 | <eClassifiers xsi:type="ecore:EClass" name="VariableOrNodeExpr" eSuperTypes="#//Expr"> | 159 | <eClassifiers xsi:type="ecore:EClass" name="VariableOrNodeExpr" eSuperTypes="#//Expr"> |
@@ -264,4 +252,31 @@ | |||
264 | <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpr" eSuperTypes="#//BinaryExpr"/> | 252 | <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpr" eSuperTypes="#//BinaryExpr"/> |
265 | <eClassifiers xsi:type="ecore:EClass" name="InfiniteConstant" eSuperTypes="#//Constant"/> | 253 | <eClassifiers xsi:type="ecore:EClass" name="InfiniteConstant" eSuperTypes="#//Constant"/> |
266 | <eClassifiers xsi:type="ecore:EClass" name="AggregatorDeclaration" eSuperTypes="#//Statement #//NamedElement"/> | 254 | <eClassifiers xsi:type="ecore:EClass" name="AggregatorDeclaration" eSuperTypes="#//Statement #//NamedElement"/> |
255 | <eClassifiers xsi:type="ecore:EClass" name="ModalExpr" eSuperTypes="#//UnaryExpr"> | ||
256 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="concreteness" eType="#//Concreteness"/> | ||
257 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="modality" eType="#//Modality"/> | ||
258 | </eClassifiers> | ||
259 | <eClassifiers xsi:type="ecore:EEnum" name="Modality"> | ||
260 | <eLiterals name="NONE"/> | ||
261 | <eLiterals name="MUST" value="1"/> | ||
262 | <eLiterals name="MAY" value="2"/> | ||
263 | </eClassifiers> | ||
264 | <eClassifiers xsi:type="ecore:EEnum" name="Concreteness"> | ||
265 | <eLiterals name="PARTIAL"/> | ||
266 | <eLiterals name="CANDIDATE" value="1"/> | ||
267 | </eClassifiers> | ||
268 | <eClassifiers xsi:type="ecore:EEnum" name="RuleKind"> | ||
269 | <eLiterals name="REFINEMENT"/> | ||
270 | <eLiterals name="PROPAGATION" value="1"/> | ||
271 | <eLiterals name="DECISION" value="2"/> | ||
272 | </eClassifiers> | ||
273 | <eClassifiers xsi:type="ecore:EEnum" name="ParameterBinding"> | ||
274 | <eLiterals name="SINGLE"/> | ||
275 | <eLiterals name="FOCUS" value="1"/> | ||
276 | <eLiterals name="MULTI" value="2"/> | ||
277 | </eClassifiers> | ||
278 | <eClassifiers xsi:type="ecore:EClass" name="Assertion" eSuperTypes="#//Statement #//AbstractAssertion"> | ||
279 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="default" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" | ||
280 | defaultValueLiteral="false"/> | ||
281 | </eClassifiers> | ||
267 | </ecore:EPackage> | 282 | </ecore:EPackage> |
diff --git a/subprojects/language-model/src/main/resources/model/problem.genmodel b/subprojects/language-model/src/main/resources/model/problem.genmodel index 2a1d8522..2ceb74a6 100644 --- a/subprojects/language-model/src/main/resources/model/problem.genmodel +++ b/subprojects/language-model/src/main/resources/model/problem.genmodel | |||
@@ -32,6 +32,7 @@ | |||
32 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/REFERENCE"/> | 32 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/REFERENCE"/> |
33 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/CONTAINMENT"/> | 33 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/CONTAINMENT"/> |
34 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/CONTAINER"/> | 34 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/CONTAINER"/> |
35 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/PARTIAL"/> | ||
35 | </genEnums> | 36 | </genEnums> |
36 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//UnaryOp"> | 37 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//UnaryOp"> |
37 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//UnaryOp/PLUS"/> | 38 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//UnaryOp/PLUS"/> |
@@ -60,6 +61,25 @@ | |||
60 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LatticeBinaryOp/MEET"/> | 61 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LatticeBinaryOp/MEET"/> |
61 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LatticeBinaryOp/JOIN"/> | 62 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LatticeBinaryOp/JOIN"/> |
62 | </genEnums> | 63 | </genEnums> |
64 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//Modality"> | ||
65 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/NONE"/> | ||
66 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/MUST"/> | ||
67 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/MAY"/> | ||
68 | </genEnums> | ||
69 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//Concreteness"> | ||
70 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Concreteness/PARTIAL"/> | ||
71 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Concreteness/CANDIDATE"/> | ||
72 | </genEnums> | ||
73 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//RuleKind"> | ||
74 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//RuleKind/REFINEMENT"/> | ||
75 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//RuleKind/PROPAGATION"/> | ||
76 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//RuleKind/DECISION"/> | ||
77 | </genEnums> | ||
78 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ParameterBinding"> | ||
79 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ParameterBinding/SINGLE"/> | ||
80 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ParameterBinding/FOCUS"/> | ||
81 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ParameterBinding/MULTI"/> | ||
82 | </genEnums> | ||
63 | <genClasses ecoreClass="problem.ecore#//Problem"> | 83 | <genClasses ecoreClass="problem.ecore#//Problem"> |
64 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/nodes"/> | 84 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/nodes"/> |
65 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/statements"/> | 85 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/statements"/> |
@@ -88,6 +108,9 @@ | |||
88 | </genClasses> | 108 | </genClasses> |
89 | <genClasses ecoreClass="problem.ecore#//Parameter"> | 109 | <genClasses ecoreClass="problem.ecore#//Parameter"> |
90 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//Parameter/parameterType"/> | 110 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//Parameter/parameterType"/> |
111 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//Parameter/concreteness"/> | ||
112 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//Parameter/modality"/> | ||
113 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//Parameter/binding"/> | ||
91 | </genClasses> | 114 | </genClasses> |
92 | <genClasses ecoreClass="problem.ecore#//Variable"/> | 115 | <genClasses ecoreClass="problem.ecore#//Variable"/> |
93 | <genClasses ecoreClass="problem.ecore#//Atom"> | 116 | <genClasses ecoreClass="problem.ecore#//Atom"> |
@@ -99,11 +122,10 @@ | |||
99 | <genClasses ecoreClass="problem.ecore#//ExistentialQuantifier"> | 122 | <genClasses ecoreClass="problem.ecore#//ExistentialQuantifier"> |
100 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//ExistentialQuantifier/implicitVariables"/> | 123 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//ExistentialQuantifier/implicitVariables"/> |
101 | </genClasses> | 124 | </genClasses> |
102 | <genClasses ecoreClass="problem.ecore#//Assertion"> | 125 | <genClasses ecoreClass="problem.ecore#//AbstractAssertion"> |
103 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Assertion/arguments"/> | 126 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AbstractAssertion/arguments"/> |
104 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//Assertion/default"/> | 127 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//AbstractAssertion/relation"/> |
105 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//Assertion/relation"/> | 128 | <genFeatures children="true" createChild="true" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//AbstractAssertion/value"/> |
106 | <genFeatures children="true" createChild="true" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//Assertion/value"/> | ||
107 | </genClasses> | 129 | </genClasses> |
108 | <genClasses ecoreClass="problem.ecore#//Node"/> | 130 | <genClasses ecoreClass="problem.ecore#//Node"/> |
109 | <genClasses ecoreClass="problem.ecore#//ScopeDeclaration"> | 131 | <genClasses ecoreClass="problem.ecore#//ScopeDeclaration"> |
@@ -153,24 +175,13 @@ | |||
153 | <genClasses ecoreClass="problem.ecore#//RuleDefinition"> | 175 | <genClasses ecoreClass="problem.ecore#//RuleDefinition"> |
154 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//RuleDefinition/consequents"/> | 176 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//RuleDefinition/consequents"/> |
155 | <genFeatures children="true" createChild="true" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//RuleDefinition/preconditions"/> | 177 | <genFeatures children="true" createChild="true" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//RuleDefinition/preconditions"/> |
178 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//RuleDefinition/kind"/> | ||
156 | </genClasses> | 179 | </genClasses> |
157 | <genClasses ecoreClass="problem.ecore#//Consequent"> | 180 | <genClasses ecoreClass="problem.ecore#//Consequent"> |
158 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Consequent/actions"/> | 181 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Consequent/actions"/> |
159 | </genClasses> | 182 | </genClasses> |
160 | <genClasses ecoreClass="problem.ecore#//Action"/> | 183 | <genClasses ecoreClass="problem.ecore#//Action"/> |
161 | <genClasses ecoreClass="problem.ecore#//AssertionAction"> | 184 | <genClasses ecoreClass="problem.ecore#//AssertionAction"/> |
162 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AssertionAction/atom"/> | ||
163 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//AssertionAction/value"/> | ||
164 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//AssertionAction/overwrite"/> | ||
165 | </genClasses> | ||
166 | <genClasses ecoreClass="problem.ecore#//DeleteAction"> | ||
167 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//DeleteAction/variableOrNode"/> | ||
168 | </genClasses> | ||
169 | <genClasses ecoreClass="problem.ecore#//NewAction"> | ||
170 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//NewAction/variable"/> | ||
171 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//NewAction/parent"/> | ||
172 | </genClasses> | ||
173 | <genClasses ecoreClass="problem.ecore#//NewVariable"/> | ||
174 | <genClasses ecoreClass="problem.ecore#//Expr"/> | 185 | <genClasses ecoreClass="problem.ecore#//Expr"/> |
175 | <genClasses ecoreClass="problem.ecore#//VariableOrNodeExpr"> | 186 | <genClasses ecoreClass="problem.ecore#//VariableOrNodeExpr"> |
176 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//VariableOrNodeExpr/variableOrNode"/> | 187 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//VariableOrNodeExpr/variableOrNode"/> |
@@ -232,5 +243,12 @@ | |||
232 | <genClasses ecoreClass="problem.ecore#//AssignmentExpr"/> | 243 | <genClasses ecoreClass="problem.ecore#//AssignmentExpr"/> |
233 | <genClasses ecoreClass="problem.ecore#//InfiniteConstant"/> | 244 | <genClasses ecoreClass="problem.ecore#//InfiniteConstant"/> |
234 | <genClasses ecoreClass="problem.ecore#//AggregatorDeclaration"/> | 245 | <genClasses ecoreClass="problem.ecore#//AggregatorDeclaration"/> |
246 | <genClasses ecoreClass="problem.ecore#//ModalExpr"> | ||
247 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ModalExpr/concreteness"/> | ||
248 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ModalExpr/modality"/> | ||
249 | </genClasses> | ||
250 | <genClasses ecoreClass="problem.ecore#//Assertion"> | ||
251 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//Assertion/default"/> | ||
252 | </genClasses> | ||
235 | </genPackages> | 253 | </genPackages> |
236 | </genmodel:GenModel> | 254 | </genmodel:GenModel> |
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java index ccfb630f..486eb89b 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java | |||
@@ -6,6 +6,7 @@ | |||
6 | package tools.refinery.language.semantics; | 6 | package tools.refinery.language.semantics; |
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import org.jetbrains.annotations.Nullable; | ||
9 | import tools.refinery.language.library.BuiltinLibrary; | 10 | import tools.refinery.language.library.BuiltinLibrary; |
10 | import tools.refinery.language.model.problem.*; | 11 | import tools.refinery.language.model.problem.*; |
11 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; | 12 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; |
@@ -13,10 +14,9 @@ import tools.refinery.language.scoping.imports.ImportCollector; | |||
13 | import tools.refinery.language.semantics.internal.MutableSeed; | 14 | import tools.refinery.language.semantics.internal.MutableSeed; |
14 | import tools.refinery.language.utils.BuiltinSymbols; | 15 | import tools.refinery.language.utils.BuiltinSymbols; |
15 | import tools.refinery.language.utils.ProblemUtil; | 16 | import tools.refinery.language.utils.ProblemUtil; |
17 | import tools.refinery.language.validation.ActionTargetCollector; | ||
16 | import tools.refinery.logic.Constraint; | 18 | import tools.refinery.logic.Constraint; |
17 | import tools.refinery.logic.dnf.InvalidClauseException; | 19 | import tools.refinery.logic.dnf.*; |
18 | import tools.refinery.logic.dnf.Query; | ||
19 | import tools.refinery.logic.dnf.RelationalQuery; | ||
20 | import tools.refinery.logic.literal.*; | 20 | import tools.refinery.logic.literal.*; |
21 | import tools.refinery.logic.term.NodeVariable; | 21 | import tools.refinery.logic.term.NodeVariable; |
22 | import tools.refinery.logic.term.Variable; | 22 | import tools.refinery.logic.term.Variable; |
@@ -25,8 +25,18 @@ import tools.refinery.logic.term.cardinalityinterval.CardinalityIntervals; | |||
25 | import tools.refinery.logic.term.truthvalue.TruthValue; | 25 | import tools.refinery.logic.term.truthvalue.TruthValue; |
26 | import tools.refinery.logic.term.uppercardinality.UpperCardinalities; | 26 | import tools.refinery.logic.term.uppercardinality.UpperCardinalities; |
27 | import tools.refinery.store.dse.propagation.PropagationBuilder; | 27 | import tools.refinery.store.dse.propagation.PropagationBuilder; |
28 | import tools.refinery.store.dse.transition.DesignSpaceExplorationBuilder; | ||
29 | import tools.refinery.store.dse.transition.Rule; | ||
30 | import tools.refinery.store.dse.transition.RuleBuilder; | ||
31 | import tools.refinery.store.dse.transition.actions.ActionLiteral; | ||
32 | import tools.refinery.store.dse.transition.actions.ActionLiterals; | ||
28 | import tools.refinery.store.model.ModelStoreBuilder; | 33 | import tools.refinery.store.model.ModelStoreBuilder; |
29 | import tools.refinery.store.reasoning.ReasoningAdapter; | 34 | import tools.refinery.store.reasoning.ReasoningAdapter; |
35 | import tools.refinery.store.reasoning.actions.PartialActionLiterals; | ||
36 | import tools.refinery.store.reasoning.literal.Concreteness; | ||
37 | import tools.refinery.store.reasoning.literal.ModalConstraint; | ||
38 | import tools.refinery.store.reasoning.literal.Modality; | ||
39 | import tools.refinery.store.reasoning.literal.PartialLiterals; | ||
30 | import tools.refinery.store.reasoning.representation.PartialRelation; | 40 | import tools.refinery.store.reasoning.representation.PartialRelation; |
31 | import tools.refinery.store.reasoning.scope.ScopePropagator; | 41 | import tools.refinery.store.reasoning.scope.ScopePropagator; |
32 | import tools.refinery.store.reasoning.seed.ModelSeed; | 42 | import tools.refinery.store.reasoning.seed.ModelSeed; |
@@ -59,6 +69,9 @@ public class ModelInitializer { | |||
59 | @Inject | 69 | @Inject |
60 | private ImportAdapterProvider importAdapterProvider; | 70 | private ImportAdapterProvider importAdapterProvider; |
61 | 71 | ||
72 | @Inject | ||
73 | private ActionTargetCollector actionTargetCollector; | ||
74 | |||
62 | private Problem problem; | 75 | private Problem problem; |
63 | 76 | ||
64 | private final Set<Problem> importedProblems = new HashSet<>(); | 77 | private final Set<Problem> importedProblems = new HashSet<>(); |
@@ -87,6 +100,8 @@ public class ModelInitializer { | |||
87 | 100 | ||
88 | private ModelSeed modelSeed; | 101 | private ModelSeed modelSeed; |
89 | 102 | ||
103 | private int ruleCount; | ||
104 | |||
90 | public void readProblem(Problem problem) { | 105 | public void readProblem(Problem problem) { |
91 | if (this.problem != null) { | 106 | if (this.problem != null) { |
92 | throw new IllegalArgumentException("Problem was already set"); | 107 | throw new IllegalArgumentException("Problem was already set"); |
@@ -174,6 +189,7 @@ public class ModelInitializer { | |||
174 | storeBuilder.with(scopePropagator); | 189 | storeBuilder.with(scopePropagator); |
175 | } | 190 | } |
176 | collectPredicates(storeBuilder); | 191 | collectPredicates(storeBuilder); |
192 | collectRules(storeBuilder); | ||
177 | } catch (TranslationException e) { | 193 | } catch (TranslationException e) { |
178 | throw problemTrace.wrapException(e); | 194 | throw problemTrace.wrapException(e); |
179 | } | 195 | } |
@@ -336,6 +352,7 @@ public class ModelInitializer { | |||
336 | var target = getPartialRelation(referenceDeclaration.getReferenceType()); | 352 | var target = getPartialRelation(referenceDeclaration.getReferenceType()); |
337 | targetTypes.add(target); | 353 | targetTypes.add(target); |
338 | boolean containment = referenceDeclaration.getKind() == ReferenceKind.CONTAINMENT; | 354 | boolean containment = referenceDeclaration.getKind() == ReferenceKind.CONTAINMENT; |
355 | boolean partial = referenceDeclaration.getKind() == ReferenceKind.PARTIAL; | ||
339 | var opposite = referenceDeclaration.getOpposite(); | 356 | var opposite = referenceDeclaration.getOpposite(); |
340 | PartialRelation oppositeRelation = null; | 357 | PartialRelation oppositeRelation = null; |
341 | if (opposite != null) { | 358 | if (opposite != null) { |
@@ -356,6 +373,7 @@ public class ModelInitializer { | |||
356 | .target(target) | 373 | .target(target) |
357 | .opposite(oppositeRelation) | 374 | .opposite(oppositeRelation) |
358 | .defaultValue(defaultValue) | 375 | .defaultValue(defaultValue) |
376 | .partial(partial) | ||
359 | .build()); | 377 | .build()); |
360 | } catch (RuntimeException e) { | 378 | } catch (RuntimeException e) { |
361 | throw TracedException.addTrace(classDeclaration, e); | 379 | throw TracedException.addTrace(classDeclaration, e); |
@@ -379,14 +397,16 @@ public class ModelInitializer { | |||
379 | 397 | ||
380 | private static CardinalityInterval getCardinalityInterval( | 398 | private static CardinalityInterval getCardinalityInterval( |
381 | tools.refinery.language.model.problem.Multiplicity problemMultiplicity) { | 399 | tools.refinery.language.model.problem.Multiplicity problemMultiplicity) { |
382 | if (problemMultiplicity instanceof ExactMultiplicity exactMultiplicity) { | 400 | switch (problemMultiplicity) { |
401 | case ExactMultiplicity exactMultiplicity -> { | ||
383 | return CardinalityIntervals.exactly(exactMultiplicity.getExactValue()); | 402 | return CardinalityIntervals.exactly(exactMultiplicity.getExactValue()); |
384 | } else if (problemMultiplicity instanceof RangeMultiplicity rangeMultiplicity) { | 403 | } |
404 | case RangeMultiplicity rangeMultiplicity -> { | ||
385 | var upperBound = rangeMultiplicity.getUpperBound(); | 405 | var upperBound = rangeMultiplicity.getUpperBound(); |
386 | return CardinalityIntervals.between(rangeMultiplicity.getLowerBound(), | 406 | return CardinalityIntervals.between(rangeMultiplicity.getLowerBound(), |
387 | upperBound < 0 ? UpperCardinalities.UNBOUNDED : UpperCardinalities.atMost(upperBound)); | 407 | upperBound < 0 ? UpperCardinalities.UNBOUNDED : UpperCardinalities.atMost(upperBound)); |
388 | } else { | 408 | } |
389 | throw new TracedException(problemMultiplicity, "Unknown multiplicity"); | 409 | default -> throw new TracedException(problemMultiplicity, "Unknown multiplicity"); |
390 | } | 410 | } |
391 | } | 411 | } |
392 | 412 | ||
@@ -521,7 +541,12 @@ public class ModelInitializer { | |||
521 | for (int i = 0; i < arity; i++) { | 541 | for (int i = 0; i < arity; i++) { |
522 | var argument = arguments.get(i); | 542 | var argument = arguments.get(i); |
523 | if (argument instanceof NodeAssertionArgument nodeArgument) { | 543 | if (argument instanceof NodeAssertionArgument nodeArgument) { |
524 | nodes[i] = getNodeId(nodeArgument.getNode()); | 544 | var variableOrNode = nodeArgument.getNode(); |
545 | if (variableOrNode instanceof Node node) { | ||
546 | nodes[i] = getNodeId(node); | ||
547 | } else { | ||
548 | throw new TracedException(argument, "Invalid assertion argument: " + variableOrNode); | ||
549 | } | ||
525 | } else if (argument instanceof WildcardAssertionArgument) { | 550 | } else if (argument instanceof WildcardAssertionArgument) { |
526 | nodes[i] = -1; | 551 | nodes[i] = -1; |
527 | } else { | 552 | } else { |
@@ -573,7 +598,7 @@ public class ModelInitializer { | |||
573 | private void collectPredicateDefinition(PredicateDefinition predicateDefinition, ModelStoreBuilder storeBuilder) { | 598 | private void collectPredicateDefinition(PredicateDefinition predicateDefinition, ModelStoreBuilder storeBuilder) { |
574 | var partialRelation = getPartialRelation(predicateDefinition); | 599 | var partialRelation = getPartialRelation(predicateDefinition); |
575 | var query = toQuery(partialRelation.name(), predicateDefinition); | 600 | var query = toQuery(partialRelation.name(), predicateDefinition); |
576 | boolean mutable = targetTypes.contains(partialRelation); | 601 | boolean mutable = targetTypes.contains(partialRelation) || isActionTarget(predicateDefinition); |
577 | TruthValue defaultValue; | 602 | TruthValue defaultValue; |
578 | if (predicateDefinition.isError()) { | 603 | if (predicateDefinition.isError()) { |
579 | defaultValue = TruthValue.FALSE; | 604 | defaultValue = TruthValue.FALSE; |
@@ -588,6 +613,15 @@ public class ModelInitializer { | |||
588 | storeBuilder.with(translator); | 613 | storeBuilder.with(translator); |
589 | } | 614 | } |
590 | 615 | ||
616 | private boolean isActionTarget(PredicateDefinition predicateDefinition) { | ||
617 | for (var importedProblem : importedProblems) { | ||
618 | if (actionTargetCollector.isActionTarget(importedProblem, predicateDefinition)) { | ||
619 | return true; | ||
620 | } | ||
621 | } | ||
622 | return false; | ||
623 | } | ||
624 | |||
591 | private RelationalQuery toQuery(String name, PredicateDefinition predicateDefinition) { | 625 | private RelationalQuery toQuery(String name, PredicateDefinition predicateDefinition) { |
592 | var problemParameters = predicateDefinition.getParameters(); | 626 | var problemParameters = predicateDefinition.getParameters(); |
593 | int arity = problemParameters.size(); | 627 | int arity = problemParameters.size(); |
@@ -607,23 +641,29 @@ public class ModelInitializer { | |||
607 | } | 641 | } |
608 | var builder = Query.builder(name).parameters(parameters); | 642 | var builder = Query.builder(name).parameters(parameters); |
609 | for (var body : predicateDefinition.getBodies()) { | 643 | for (var body : predicateDefinition.getBodies()) { |
610 | try { | 644 | buildConjunction(body, parameterMap, commonLiterals, builder); |
611 | var localScope = extendScope(parameterMap, body.getImplicitVariables()); | ||
612 | var problemLiterals = body.getLiterals(); | ||
613 | var literals = new ArrayList<>(commonLiterals); | ||
614 | for (var problemLiteral : problemLiterals) { | ||
615 | toLiteralsTraced(problemLiteral, localScope, literals); | ||
616 | } | ||
617 | builder.clause(literals); | ||
618 | } catch (RuntimeException e) { | ||
619 | throw TracedException.addTrace(body, e); | ||
620 | } | ||
621 | } | 645 | } |
622 | return builder.build(); | 646 | return builder.build(); |
623 | } | 647 | } |
624 | 648 | ||
625 | private Map<tools.refinery.language.model.problem.Variable, Variable> extendScope( | 649 | private void buildConjunction( |
626 | Map<tools.refinery.language.model.problem.Variable, Variable> existing, | 650 | Conjunction body, HashMap<tools.refinery.language.model.problem.Variable, ? extends Variable> parameterMap, |
651 | List<Literal> commonLiterals, AbstractQueryBuilder<?> builder) { | ||
652 | try { | ||
653 | var localScope = extendScope(parameterMap, body.getImplicitVariables()); | ||
654 | var problemLiterals = body.getLiterals(); | ||
655 | var literals = new ArrayList<>(commonLiterals); | ||
656 | for (var problemLiteral : problemLiterals) { | ||
657 | toLiteralsTraced(problemLiteral, localScope, literals); | ||
658 | } | ||
659 | builder.clause(literals); | ||
660 | } catch (RuntimeException e) { | ||
661 | throw TracedException.addTrace(body, e); | ||
662 | } | ||
663 | } | ||
664 | |||
665 | private Map<tools.refinery.language.model.problem.Variable, ? extends Variable> extendScope( | ||
666 | Map<tools.refinery.language.model.problem.Variable, ? extends Variable> existing, | ||
627 | Collection<? extends tools.refinery.language.model.problem.Variable> newVariables) { | 667 | Collection<? extends tools.refinery.language.model.problem.Variable> newVariables) { |
628 | if (newVariables.isEmpty()) { | 668 | if (newVariables.isEmpty()) { |
629 | return existing; | 669 | return existing; |
@@ -637,8 +677,9 @@ public class ModelInitializer { | |||
637 | return localScope; | 677 | return localScope; |
638 | } | 678 | } |
639 | 679 | ||
640 | private void toLiteralsTraced(Expr expr, Map<tools.refinery.language.model.problem.Variable, Variable> localScope, | 680 | private void toLiteralsTraced( |
641 | List<Literal> literals) { | 681 | Expr expr, Map<tools.refinery.language.model.problem.Variable, ? extends Variable> localScope, |
682 | List<Literal> literals) { | ||
642 | try { | 683 | try { |
643 | toLiterals(expr, localScope, literals); | 684 | toLiterals(expr, localScope, literals); |
644 | } catch (RuntimeException e) { | 685 | } catch (RuntimeException e) { |
@@ -646,9 +687,12 @@ public class ModelInitializer { | |||
646 | } | 687 | } |
647 | } | 688 | } |
648 | 689 | ||
649 | private void toLiterals(Expr expr, Map<tools.refinery.language.model.problem.Variable, Variable> localScope, | 690 | private void toLiterals( |
650 | List<Literal> literals) { | 691 | Expr expr, Map<tools.refinery.language.model.problem.Variable, ? extends Variable> localScope, |
651 | switch (expr) { | 692 | List<Literal> literals) { |
693 | var extractedOuter = extractModalExpr(expr); | ||
694 | var outerModality = extractedOuter.modality(); | ||
695 | switch (extractedOuter.body()) { | ||
652 | case LogicConstant logicConstant -> { | 696 | case LogicConstant logicConstant -> { |
653 | switch (logicConstant.getLogicValue()) { | 697 | switch (logicConstant.getLogicValue()) { |
654 | case TRUE -> literals.add(BooleanLiteral.TRUE); | 698 | case TRUE -> literals.add(BooleanLiteral.TRUE); |
@@ -658,27 +702,22 @@ public class ModelInitializer { | |||
658 | } | 702 | } |
659 | case Atom atom -> { | 703 | case Atom atom -> { |
660 | var target = getPartialRelation(atom.getRelation()); | 704 | var target = getPartialRelation(atom.getRelation()); |
661 | var polarity = atom.isTransitiveClosure() ? CallPolarity.TRANSITIVE : CallPolarity.POSITIVE; | 705 | var constraint = atom.isTransitiveClosure() ? getTransitiveWrapper(target) : target; |
662 | var argumentList = toArgumentList(atom.getArguments(), localScope, literals); | 706 | var argumentList = toArgumentList(atom.getArguments(), localScope, literals); |
663 | literals.add(target.call(polarity, argumentList)); | 707 | literals.add(extractedOuter.modality.wrapConstraint(constraint).call(CallPolarity.POSITIVE, argumentList)); |
664 | } | 708 | } |
665 | case NegationExpr negationExpr -> { | 709 | case NegationExpr negationExpr -> { |
666 | var body = negationExpr.getBody(); | 710 | var body = negationExpr.getBody(); |
667 | if (!(body instanceof Atom atom)) { | 711 | var extractedInner = extractModalExpr(body); |
668 | throw new TracedException(body, "Cannot negate literal"); | 712 | if (!(extractedInner.body() instanceof Atom atom)) { |
713 | throw new TracedException(extractedInner.body(), "Cannot negate literal"); | ||
669 | } | 714 | } |
670 | var target = getPartialRelation(atom.getRelation()); | 715 | var target = getPartialRelation(atom.getRelation()); |
671 | Constraint constraint; | 716 | Constraint constraint = atom.isTransitiveClosure() ? getTransitiveWrapper(target) : target; |
672 | if (atom.isTransitiveClosure()) { | ||
673 | constraint = Query.of(target.name() + "#transitive", (builder, p1, p2) -> builder.clause( | ||
674 | target.callTransitive(p1, p2) | ||
675 | )).getDnf(); | ||
676 | } else { | ||
677 | constraint = target; | ||
678 | } | ||
679 | var negatedScope = extendScope(localScope, negationExpr.getImplicitVariables()); | 717 | var negatedScope = extendScope(localScope, negationExpr.getImplicitVariables()); |
680 | var argumentList = toArgumentList(atom.getArguments(), negatedScope, literals); | 718 | List<Variable> argumentList = toArgumentList(atom.getArguments(), negatedScope, literals); |
681 | literals.add(constraint.call(CallPolarity.NEGATIVE, argumentList)); | 719 | var innerModality = extractedInner.modality().merge(outerModality.negate()); |
720 | literals.add(createNegationLiteral(innerModality, constraint, argumentList, localScope)); | ||
682 | } | 721 | } |
683 | case ComparisonExpr comparisonExpr -> { | 722 | case ComparisonExpr comparisonExpr -> { |
684 | var argumentList = toArgumentList(List.of(comparisonExpr.getLeft(), comparisonExpr.getRight()), | 723 | var argumentList = toArgumentList(List.of(comparisonExpr.getLeft(), comparisonExpr.getRight()), |
@@ -689,14 +728,117 @@ public class ModelInitializer { | |||
689 | default -> throw new TracedException( | 728 | default -> throw new TracedException( |
690 | comparisonExpr, "Unsupported operator"); | 729 | comparisonExpr, "Unsupported operator"); |
691 | }; | 730 | }; |
692 | literals.add(new EquivalenceLiteral(positive, argumentList.get(0), argumentList.get(1))); | 731 | literals.add(createEquivalenceLiteral(outerModality, positive, argumentList.get(0), argumentList.get(1), |
732 | localScope)); | ||
733 | } | ||
734 | default -> throw new TracedException(extractedOuter.body(), "Unsupported literal"); | ||
735 | } | ||
736 | } | ||
737 | |||
738 | private Constraint getTransitiveWrapper(Constraint target) { | ||
739 | return Query.of(target.name() + "#transitive", (builder, p1, p2) -> builder.clause( | ||
740 | target.callTransitive(p1, p2) | ||
741 | )).getDnf(); | ||
742 | } | ||
743 | |||
744 | private static Literal createNegationLiteral( | ||
745 | ConcreteModality innerModality, Constraint constraint, List<Variable> argumentList, | ||
746 | Map<tools.refinery.language.model.problem.Variable, ? extends Variable> localScope) { | ||
747 | if (innerModality.isSet()) { | ||
748 | boolean needsQuantification = false; | ||
749 | var filteredArguments = new LinkedHashSet<Variable>(); | ||
750 | for (var argument : argumentList) { | ||
751 | if (localScope.containsValue(argument)) { | ||
752 | filteredArguments.add(argument); | ||
753 | } else { | ||
754 | needsQuantification = true; | ||
755 | } | ||
756 | } | ||
757 | // If there are any quantified arguments, set a helper pattern to be lifted so that the appropriate | ||
758 | // {@code EXISTS} call are added by the {@code DnfLifter}. | ||
759 | if (needsQuantification) { | ||
760 | var filteredArgumentList = List.copyOf(filteredArguments); | ||
761 | var quantifiedConstraint = Dnf.builder(constraint.name() + "#quantified") | ||
762 | .parameters(filteredArgumentList) | ||
763 | .clause( | ||
764 | constraint.call(CallPolarity.POSITIVE, argumentList) | ||
765 | ) | ||
766 | .build(); | ||
767 | return innerModality.wrapConstraint(quantifiedConstraint) | ||
768 | .call(CallPolarity.NEGATIVE, filteredArgumentList); | ||
769 | } | ||
693 | } | 770 | } |
694 | default -> throw new TracedException(expr, "Unsupported literal"); | 771 | return innerModality.wrapConstraint(constraint).call(CallPolarity.NEGATIVE, argumentList); |
772 | } | ||
773 | |||
774 | private Literal createEquivalenceLiteral( | ||
775 | ConcreteModality outerModality, boolean positive, Variable left, Variable right, | ||
776 | Map<tools.refinery.language.model.problem.Variable, ? extends Variable> localScope) { | ||
777 | if (!outerModality.isSet()) { | ||
778 | return new EquivalenceLiteral(positive, left, right); | ||
695 | } | 779 | } |
780 | if (positive) { | ||
781 | return outerModality.wrapConstraint(ReasoningAdapter.EQUALS_SYMBOL).call(left, right); | ||
782 | } | ||
783 | // Interpret {@code x != y} as {@code !equals(x, y)} at all times, even in modal operators. | ||
784 | return createNegationLiteral(outerModality.negate(), ReasoningAdapter.EQUALS_SYMBOL, List.of(left, right), | ||
785 | localScope); | ||
786 | } | ||
787 | |||
788 | private record ConcreteModality(@Nullable Concreteness concreteness, @Nullable Modality modality) { | ||
789 | public static final ConcreteModality NULL = new ConcreteModality((Concreteness) null, null); | ||
790 | |||
791 | public ConcreteModality(tools.refinery.language.model.problem.Concreteness concreteness, | ||
792 | tools.refinery.language.model.problem.Modality modality) { | ||
793 | this( | ||
794 | switch (concreteness) { | ||
795 | case PARTIAL -> Concreteness.PARTIAL; | ||
796 | case CANDIDATE -> Concreteness.CANDIDATE; | ||
797 | }, | ||
798 | switch (modality) { | ||
799 | case MUST -> Modality.MUST; | ||
800 | case MAY -> Modality.MAY; | ||
801 | case NONE -> throw new IllegalArgumentException("Invalid modality"); | ||
802 | } | ||
803 | ); | ||
804 | } | ||
805 | |||
806 | public ConcreteModality negate() { | ||
807 | var negatedModality = modality == null ? null : modality.negate(); | ||
808 | return new ConcreteModality(concreteness, negatedModality); | ||
809 | } | ||
810 | |||
811 | public ConcreteModality merge(ConcreteModality outer) { | ||
812 | var mergedConcreteness = concreteness == null ? outer.concreteness() : concreteness; | ||
813 | var mergedModality = modality == null ? outer.modality() : modality; | ||
814 | return new ConcreteModality(mergedConcreteness, mergedModality); | ||
815 | } | ||
816 | |||
817 | public Constraint wrapConstraint(Constraint inner) { | ||
818 | if (isSet()) { | ||
819 | return new ModalConstraint(modality, concreteness, inner); | ||
820 | } | ||
821 | return inner; | ||
822 | } | ||
823 | |||
824 | public boolean isSet() { | ||
825 | return concreteness != null || modality != null; | ||
826 | } | ||
827 | } | ||
828 | |||
829 | private record ExtractedModalExpr(ConcreteModality modality, Expr body) { | ||
830 | } | ||
831 | |||
832 | private ExtractedModalExpr extractModalExpr(Expr expr) { | ||
833 | if (expr instanceof ModalExpr modalExpr) { | ||
834 | return new ExtractedModalExpr(new ConcreteModality(modalExpr.getConcreteness(), modalExpr.getModality()), | ||
835 | modalExpr.getBody()); | ||
836 | } | ||
837 | return new ExtractedModalExpr(ConcreteModality.NULL, expr); | ||
696 | } | 838 | } |
697 | 839 | ||
698 | private List<Variable> toArgumentList( | 840 | private List<Variable> toArgumentList( |
699 | List<Expr> expressions, Map<tools.refinery.language.model.problem.Variable, Variable> localScope, | 841 | List<Expr> expressions, Map<tools.refinery.language.model.problem.Variable, ? extends Variable> localScope, |
700 | List<Literal> literals) { | 842 | List<Literal> literals) { |
701 | var argumentList = new ArrayList<Variable>(expressions.size()); | 843 | var argumentList = new ArrayList<Variable>(expressions.size()); |
702 | for (var expr : expressions) { | 844 | for (var expr : expressions) { |
@@ -704,12 +846,14 @@ public class ModelInitializer { | |||
704 | throw new TracedException(expr, "Unsupported argument"); | 846 | throw new TracedException(expr, "Unsupported argument"); |
705 | } | 847 | } |
706 | var variableOrNode = variableOrNodeExpr.getVariableOrNode(); | 848 | var variableOrNode = variableOrNodeExpr.getVariableOrNode(); |
707 | if (variableOrNode instanceof Node node) { | 849 | switch (variableOrNode) { |
850 | case Node node -> { | ||
708 | int nodeId = getNodeId(node); | 851 | int nodeId = getNodeId(node); |
709 | var tempVariable = Variable.of(semanticsUtils.getNameWithoutRootPrefix(node).orElse("_" + nodeId)); | 852 | var tempVariable = Variable.of(semanticsUtils.getNameWithoutRootPrefix(node).orElse("_" + nodeId)); |
710 | literals.add(new ConstantLiteral(tempVariable, nodeId)); | 853 | literals.add(new ConstantLiteral(tempVariable, nodeId)); |
711 | argumentList.add(tempVariable); | 854 | argumentList.add(tempVariable); |
712 | } else if (variableOrNode instanceof tools.refinery.language.model.problem.Variable problemVariable) { | 855 | } |
856 | case tools.refinery.language.model.problem.Variable problemVariable -> { | ||
713 | if (variableOrNodeExpr.getSingletonVariable() == problemVariable) { | 857 | if (variableOrNodeExpr.getSingletonVariable() == problemVariable) { |
714 | argumentList.add(Variable.of(problemVariable.getName())); | 858 | argumentList.add(Variable.of(problemVariable.getName())); |
715 | } else { | 859 | } else { |
@@ -719,8 +863,8 @@ public class ModelInitializer { | |||
719 | } | 863 | } |
720 | argumentList.add(variable); | 864 | argumentList.add(variable); |
721 | } | 865 | } |
722 | } else { | 866 | } |
723 | throw new TracedException(variableOrNode, "Unknown argument"); | 867 | default -> throw new TracedException(variableOrNode, "Unknown argument"); |
724 | } | 868 | } |
725 | } | 869 | } |
726 | return argumentList; | 870 | return argumentList; |
@@ -796,4 +940,157 @@ public class ModelInitializer { | |||
796 | return defaultAssertions; | 940 | return defaultAssertions; |
797 | } | 941 | } |
798 | } | 942 | } |
943 | |||
944 | private void collectRules(ModelStoreBuilder storeBuilder) { | ||
945 | for (var importedProblem : importedProblems) { | ||
946 | for (var statement : importedProblem.getStatements()) { | ||
947 | if (statement instanceof RuleDefinition ruleDefinition) { | ||
948 | collectRule(ruleDefinition, storeBuilder); | ||
949 | } | ||
950 | } | ||
951 | } | ||
952 | } | ||
953 | |||
954 | private void collectRule(RuleDefinition ruleDefinition, ModelStoreBuilder storeBuilder) { | ||
955 | try { | ||
956 | var name = semanticsUtils.getNameWithoutRootPrefix(ruleDefinition) | ||
957 | .orElseGet(() -> "::rule" + ruleCount); | ||
958 | ruleCount++; | ||
959 | var rule = toRule(name, ruleDefinition); | ||
960 | switch (ruleDefinition.getKind()) { | ||
961 | case DECISION -> storeBuilder.tryGetAdapter(DesignSpaceExplorationBuilder.class) | ||
962 | .ifPresent(dseBuilder -> dseBuilder.transformation(rule)); | ||
963 | case PROPAGATION -> storeBuilder.tryGetAdapter(PropagationBuilder.class) | ||
964 | .ifPresent(propagationBuilder -> propagationBuilder.rule(rule)); | ||
965 | case REFINEMENT -> { | ||
966 | // Rules not marked for decision or propagation are not invoked automatically. | ||
967 | } | ||
968 | } | ||
969 | } catch (InvalidClauseException e) { | ||
970 | int clauseIndex = e.getClauseIndex(); | ||
971 | var bodies = ruleDefinition.getPreconditions(); | ||
972 | if (clauseIndex < bodies.size()) { | ||
973 | throw new TracedException(bodies.get(clauseIndex), e); | ||
974 | } else { | ||
975 | throw new TracedException(ruleDefinition, e); | ||
976 | } | ||
977 | } catch (RuntimeException e) { | ||
978 | throw TracedException.addTrace(ruleDefinition, e); | ||
979 | } | ||
980 | } | ||
981 | |||
982 | private Rule toRule(String name, RuleDefinition ruleDefinition) { | ||
983 | var problemParameters = ruleDefinition.getParameters(); | ||
984 | int arity = problemParameters.size(); | ||
985 | var parameters = new NodeVariable[arity]; | ||
986 | var parameterMap = HashMap.<tools.refinery.language.model.problem.Variable, NodeVariable>newHashMap(arity); | ||
987 | var commonLiterals = new ArrayList<Literal>(); | ||
988 | var parametersToFocus = new ArrayList<tools.refinery.language.model.problem.Variable>(); | ||
989 | for (int i = 0; i < arity; i++) { | ||
990 | var problemParameter = problemParameters.get(i); | ||
991 | var parameter = Variable.of(problemParameter.getName()); | ||
992 | parameters[i] = parameter; | ||
993 | parameterMap.put(problemParameter, parameter); | ||
994 | var parameterType = problemParameter.getParameterType(); | ||
995 | if (parameterType != null) { | ||
996 | var partialType = getPartialRelation(parameterType); | ||
997 | var modality = new ConcreteModality(problemParameter.getConcreteness(), | ||
998 | problemParameter.getModality()); | ||
999 | commonLiterals.add(modality.wrapConstraint(partialType).call(parameter)); | ||
1000 | } | ||
1001 | if (ruleDefinition.getKind() == RuleKind.DECISION && | ||
1002 | problemParameter.getBinding() == ParameterBinding.SINGLE) { | ||
1003 | commonLiterals.add(MultiObjectTranslator.MULTI_VIEW.call(CallPolarity.NEGATIVE, parameter)); | ||
1004 | } | ||
1005 | if (problemParameter.getBinding() == ParameterBinding.FOCUS) { | ||
1006 | parametersToFocus.add(problemParameter); | ||
1007 | } | ||
1008 | } | ||
1009 | toMonomorphicMatchingLiterals(parametersToFocus, parameterMap, commonLiterals); | ||
1010 | var builder = Rule.builder(name).parameters(parameters); | ||
1011 | var preconditions = ruleDefinition.getPreconditions(); | ||
1012 | if (preconditions.isEmpty()) { | ||
1013 | builder.clause(commonLiterals); | ||
1014 | } else { | ||
1015 | for (var precondition : preconditions) { | ||
1016 | buildConjunction(precondition, parameterMap, commonLiterals, builder); | ||
1017 | } | ||
1018 | } | ||
1019 | for (var consequent : ruleDefinition.getConsequents()) { | ||
1020 | buildConsequent(consequent, parameterMap, parametersToFocus, builder); | ||
1021 | } | ||
1022 | return builder.build(); | ||
1023 | } | ||
1024 | |||
1025 | private static void toMonomorphicMatchingLiterals( | ||
1026 | ArrayList<tools.refinery.language.model.problem.Variable> parametersToFocus, | ||
1027 | HashMap<tools.refinery.language.model.problem.Variable, NodeVariable> parameterMap, | ||
1028 | ArrayList<Literal> commonLiterals) { | ||
1029 | int focusCount = parametersToFocus.size(); | ||
1030 | for (int i = 0; i < focusCount; i++) { | ||
1031 | var leftFocus = parameterMap.get(parametersToFocus.get(i)); | ||
1032 | for (int j = i + 1; j < focusCount; j++) { | ||
1033 | var rightFocus = parameterMap.get(parametersToFocus.get(j)); | ||
1034 | commonLiterals.add(Literals.not(PartialLiterals.must( | ||
1035 | ReasoningAdapter.EQUALS_SYMBOL.call(leftFocus, rightFocus)))); | ||
1036 | } | ||
1037 | } | ||
1038 | } | ||
1039 | |||
1040 | private void buildConsequent( | ||
1041 | Consequent body, HashMap<tools.refinery.language.model.problem.Variable, NodeVariable> parameterMap, | ||
1042 | Collection<tools.refinery.language.model.problem.Variable> parametersToFocus, RuleBuilder builder) { | ||
1043 | try { | ||
1044 | var actionLiterals = new ArrayList<ActionLiteral>(); | ||
1045 | HashMap<tools.refinery.language.model.problem.Variable, NodeVariable> localScope; | ||
1046 | if (parametersToFocus.isEmpty()) { | ||
1047 | localScope = parameterMap; | ||
1048 | } else { | ||
1049 | localScope = new LinkedHashMap<>(parameterMap); | ||
1050 | for (var parameterToFocus : parametersToFocus) { | ||
1051 | var originalParameter = parameterMap.get(parameterToFocus); | ||
1052 | var focusedParameter = Variable.of(originalParameter.getName() + "#focused"); | ||
1053 | localScope.put(parameterToFocus, focusedParameter); | ||
1054 | actionLiterals.add(PartialActionLiterals.focus(originalParameter, focusedParameter)); | ||
1055 | } | ||
1056 | } | ||
1057 | for (var action : body.getActions()) { | ||
1058 | toActionLiterals(action, localScope, actionLiterals); | ||
1059 | } | ||
1060 | builder.action(actionLiterals); | ||
1061 | } catch (RuntimeException e) { | ||
1062 | throw TracedException.addTrace(body, e); | ||
1063 | } | ||
1064 | } | ||
1065 | |||
1066 | private void toActionLiterals( | ||
1067 | Action action, HashMap<tools.refinery.language.model.problem.Variable, NodeVariable> localScope, | ||
1068 | List<ActionLiteral> actionLiterals) { | ||
1069 | if (!(action instanceof AssertionAction assertionAction)) { | ||
1070 | throw new TracedException(action, "Unknown action"); | ||
1071 | } | ||
1072 | var partialRelation = getPartialRelation(assertionAction.getRelation()); | ||
1073 | var truthValue = getTruthValue(assertionAction.getValue()); | ||
1074 | var problemArguments = assertionAction.getArguments(); | ||
1075 | var arguments = new NodeVariable[problemArguments.size()]; | ||
1076 | for (int i = 0; i < arguments.length; i++) { | ||
1077 | var problemArgument = problemArguments.get(i); | ||
1078 | if (!(problemArgument instanceof NodeAssertionArgument nodeAssertionArgument)) { | ||
1079 | throw new TracedException(problemArgument, "Invalid argument"); | ||
1080 | } | ||
1081 | var variableOrNode = nodeAssertionArgument.getNode(); | ||
1082 | switch (variableOrNode) { | ||
1083 | case tools.refinery.language.model.problem.Variable problemVariable -> | ||
1084 | arguments[i] = localScope.get(problemVariable); | ||
1085 | case Node node -> { | ||
1086 | int nodeId = getNodeId(node); | ||
1087 | var tempVariable = Variable.of(semanticsUtils.getNameWithoutRootPrefix(node).orElse("_" + nodeId)); | ||
1088 | actionLiterals.add(ActionLiterals.constant(tempVariable, nodeId)); | ||
1089 | arguments[i] = tempVariable; | ||
1090 | } | ||
1091 | default -> throw new TracedException(problemArgument, "Invalid argument"); | ||
1092 | } | ||
1093 | } | ||
1094 | actionLiterals.add(PartialActionLiterals.merge(partialRelation, truthValue, arguments)); | ||
1095 | } | ||
799 | } | 1096 | } |
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java index aef0fd89..3a979bf0 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java | |||
@@ -152,7 +152,7 @@ class ProblemTraceImpl implements ProblemTrace { | |||
152 | 152 | ||
153 | @Override | 153 | @Override |
154 | public PartialRelation getPartialRelation(QualifiedName qualifiedName) { | 154 | public PartialRelation getPartialRelation(QualifiedName qualifiedName) { |
155 | var relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__RELATION); | 155 | var relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION); |
156 | return getPartialRelation(getElement(relationScope, qualifiedName, Relation.class)); | 156 | return getPartialRelation(getElement(relationScope, qualifiedName, Relation.class)); |
157 | } | 157 | } |
158 | 158 | ||
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java index f097143f..ed4841c4 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java | |||
@@ -310,7 +310,7 @@ public class SolutionSerializer { | |||
310 | var relation = findPartialRelation(partialRelation); | 310 | var relation = findPartialRelation(partialRelation); |
311 | var cursor = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, partialRelation).getAll(); | 311 | var cursor = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, partialRelation).getAll(); |
312 | // Make sure to output assertions in a deterministic order. | 312 | // Make sure to output assertions in a deterministic order. |
313 | var sortedTuples = new TreeSet<Tuple>(); | 313 | var sortedTuples = new TreeMap<Tuple, LogicValue>(); |
314 | while (cursor.move()) { | 314 | while (cursor.move()) { |
315 | var tuple = cursor.getKey(); | 315 | var tuple = cursor.getKey(); |
316 | var from = nodes.get(tuple.get(0)); | 316 | var from = nodes.get(tuple.get(0)); |
@@ -320,17 +320,20 @@ public class SolutionSerializer { | |||
320 | continue; | 320 | continue; |
321 | } | 321 | } |
322 | var value = cursor.getValue(); | 322 | var value = cursor.getValue(); |
323 | if (!value.isConcrete()) { | 323 | var logicValue = switch (value) { |
324 | throw new IllegalStateException("Invalid %s %s for tuple %s".formatted(partialRelation, value, tuple)); | 324 | case TRUE -> LogicValue.TRUE; |
325 | } | 325 | case FALSE -> throw new IllegalStateException("Invalid %s %s for tuple %s" |
326 | if (value.may()) { | 326 | .formatted(partialRelation, value, tuple)); |
327 | sortedTuples.add(tuple); | 327 | case UNKNOWN -> LogicValue.UNKNOWN; |
328 | } | 328 | case ERROR -> LogicValue.ERROR; |
329 | }; | ||
330 | sortedTuples.put(tuple, logicValue); | ||
329 | } | 331 | } |
330 | for (var tuple : sortedTuples) { | 332 | for (var entry : sortedTuples.entrySet()) { |
333 | var tuple = entry.getKey(); | ||
331 | var from = nodes.get(tuple.get(0)); | 334 | var from = nodes.get(tuple.get(0)); |
332 | var to = nodes.get(tuple.get(1)); | 335 | var to = nodes.get(tuple.get(1)); |
333 | addAssertion(relation, LogicValue.TRUE, from, to); | 336 | addAssertion(relation, entry.getValue(), from, to); |
334 | } | 337 | } |
335 | } | 338 | } |
336 | 339 | ||
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java index 91008919..29f8ab8b 100644 --- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java +++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java | |||
@@ -51,7 +51,7 @@ public class MetadataCreator { | |||
51 | this.problemTrace = problemTrace; | 51 | this.problemTrace = problemTrace; |
52 | var problem = problemTrace.getProblem(); | 52 | var problem = problemTrace.getProblem(); |
53 | nodeScope = scopeProvider.getScope(problem, ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE); | 53 | nodeScope = scopeProvider.getScope(problem, ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE); |
54 | relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__RELATION); | 54 | relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION); |
55 | } | 55 | } |
56 | 56 | ||
57 | public List<NodeMetadata> getNodesMetadata(Model model, Concreteness concreteness) { | 57 | public List<NodeMetadata> getNodesMetadata(Model model, Concreteness concreteness) { |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext index 08f7a585..10e994a0 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext +++ b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext | |||
@@ -18,7 +18,7 @@ enum ModuleKind: | |||
18 | Statement: | 18 | Statement: |
19 | ImportStatement | Assertion | ClassDeclaration | EnumDeclaration | | 19 | ImportStatement | Assertion | ClassDeclaration | EnumDeclaration | |
20 | DatatypeDeclaration | AggregatorDeclaration | PredicateDefinition | | 20 | DatatypeDeclaration | AggregatorDeclaration | PredicateDefinition | |
21 | /* FunctionDefinition | RuleDefinition | */ | 21 | /* FunctionDefinition | */ RuleDefinition | |
22 | ScopeDeclaration | NodeDeclaration; | 22 | ScopeDeclaration | NodeDeclaration; |
23 | 23 | ||
24 | ImportStatement: | 24 | ImportStatement: |
@@ -45,7 +45,7 @@ AggregatorDeclaration: | |||
45 | "extern" "aggregator" name=Identifier "."; | 45 | "extern" "aggregator" name=Identifier "."; |
46 | 46 | ||
47 | enum ReferenceKind: | 47 | enum ReferenceKind: |
48 | REFERENCE="refers" | CONTAINMENT="contains" | CONTAINER="container"; | 48 | REFERENCE="refers" | CONTAINMENT="contains" | CONTAINER="container" | PARTIAL="partial"; |
49 | 49 | ||
50 | ReferenceDeclaration: | 50 | ReferenceDeclaration: |
51 | (referenceType=[Relation|NonContainmentQualifiedName] | | 51 | (referenceType=[Relation|NonContainmentQualifiedName] | |
@@ -75,35 +75,40 @@ Conjunction: | |||
75 | // | 75 | // |
76 | //Case: | 76 | //Case: |
77 | // Conjunction ({Match.condition=current} "->" value=Expr)?; | 77 | // Conjunction ({Match.condition=current} "->" value=Expr)?; |
78 | //RuleDefinition: | 78 | |
79 | // "rule" | 79 | enum RuleKind: |
80 | // name=Identifier | 80 | DECISION="decision" | PROPAGATION="propagation"; |
81 | // "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")" | 81 | |
82 | // (":" preconditions+=Conjunction (";" preconditions+=Conjunction)*)? | 82 | RuleDefinition: |
83 | // "==>" consequents+=Consequent (";" consequents+=Consequent)*)? | 83 | kind=RuleKind? "rule" |
84 | // "."; | 84 | name=Identifier |
85 | "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")" | ||
86 | ("<->" preconditions+=Conjunction (";" preconditions+=Conjunction)*)? | ||
87 | ("==>" consequents+=Consequent (";" consequents+=Consequent)*)? | ||
88 | "."; | ||
89 | |||
90 | enum ParameterBinding: | ||
91 | FOCUS="&" | MULTI="*"; | ||
85 | 92 | ||
86 | Parameter: | 93 | Parameter: |
87 | parameterType=[Relation|QualifiedName]? name=Identifier; | 94 | ( |
95 | (concreteness=Concreteness? modality=Modality)? | ||
96 | parameterType=[Relation|QualifiedName] | ||
97 | )? binding=ParameterBinding? name=Identifier; | ||
88 | 98 | ||
89 | //Consequent: | 99 | Consequent: |
90 | // actions+=Action ("," actions+=Action)*; | 100 | actions+=Action ("," actions+=Action)*; |
91 | // | 101 | |
92 | //Action: | 102 | Action: |
93 | // AssertionAction | DeleteAction | NewAction; | 103 | AssertionAction; |
94 | // | 104 | |
95 | //AssertionAction: | 105 | AssertionAction: |
96 | // value=ShortLogicValue? atom=Atom | | 106 | relation=[Relation|QualifiedName] |
97 | // atom=Atom (overwrite?=":=" | "<:") value=LogicValue; | 107 | "(" (arguments+=AssertionArgument ("," arguments+=AssertionArgument)*)? ")" |
98 | // | 108 | ":" value=Expr | |
99 | //DeleteAction: | 109 | value=ShortLogicConstant |
100 | // "delete" variableOrNode=[VariableOrNode|QualifiedName]; | 110 | relation=[Relation|QualifiedName] |
101 | // | 111 | "(" (arguments+=AssertionArgument ("," arguments+=AssertionArgument)*)? ")"; |
102 | //NewAction: | ||
103 | // "new" variable=NewVariable ("<:" parent=[VariableOrNode|QualifiedName])?; | ||
104 | // | ||
105 | //NewVariable: | ||
106 | // name=Identifier; | ||
107 | 112 | ||
108 | Expr: | 113 | Expr: |
109 | AssignmentExpr; | 114 | AssignmentExpr; |
@@ -159,7 +164,7 @@ RangeExpr returns Expr: | |||
159 | 164 | ||
160 | UnaryExpr returns Expr: | 165 | UnaryExpr returns Expr: |
161 | ArithmeticUnaryExpr | NegationExpr | | 166 | ArithmeticUnaryExpr | NegationExpr | |
162 | CountExpr | AggregationExpr | CastExpr; | 167 | CountExpr | AggregationExpr | ModalExpr | CastExpr; |
163 | 168 | ||
164 | enum UnaryOp: | 169 | enum UnaryOp: |
165 | PLUS="+" | MINUS="-"; | 170 | PLUS="+" | MINUS="-"; |
@@ -177,6 +182,15 @@ AggregationExpr: | |||
177 | aggregator=[AggregatorDeclaration|QualifiedName] | 182 | aggregator=[AggregatorDeclaration|QualifiedName] |
178 | "{" value=Expr "|" condition=ComparisonExpr "}"; | 183 | "{" value=Expr "|" condition=ComparisonExpr "}"; |
179 | 184 | ||
185 | enum Concreteness: | ||
186 | CANDIDATE="candidate"; | ||
187 | |||
188 | enum Modality: | ||
189 | MUST="must" | MAY="may"; | ||
190 | |||
191 | ModalExpr: | ||
192 | concreteness=Concreteness? modality=Modality body=UnaryExpr; | ||
193 | |||
180 | CastExpr returns Expr: | 194 | CastExpr returns Expr: |
181 | CastExprBody ({CastExpr.body=current} "as" targetType=[Relation|QualifiedName])?; | 195 | CastExprBody ({CastExpr.body=current} "as" targetType=[Relation|QualifiedName])?; |
182 | 196 | ||
@@ -281,7 +295,7 @@ Identifier: | |||
281 | 295 | ||
282 | NonContainmentIdentifier: | 296 | NonContainmentIdentifier: |
283 | ID | "atom" | "multi" | "contained" | "problem" | "module" | | 297 | ID | "atom" | "multi" | "contained" | "problem" | "module" | |
284 | "datatype" | "aggregator"; | 298 | "datatype" | "aggregator" | "decision" | "propagation"; |
285 | 299 | ||
286 | Real returns ecore::EDouble: | 300 | Real returns ecore::EDouble: |
287 | EXPONENTIAL | INT "." (INT | EXPONENTIAL); | 301 | EXPONENTIAL | INT "." (INT | EXPONENTIAL); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java index d6ece1ea..c6fca89a 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java +++ b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java | |||
@@ -35,7 +35,7 @@ public class ProblemFormatter extends AbstractJavaFormatter { | |||
35 | surroundNewLines(doc, assertion, this::singleNewLine); | 35 | surroundNewLines(doc, assertion, this::singleNewLine); |
36 | var region = regionFor(assertion); | 36 | var region = regionFor(assertion); |
37 | doc.append(region.feature(ProblemPackage.Literals.ASSERTION__DEFAULT), this::oneSpace); | 37 | doc.append(region.feature(ProblemPackage.Literals.ASSERTION__DEFAULT), this::oneSpace); |
38 | doc.append(region.feature(ProblemPackage.Literals.ASSERTION__RELATION), this::noSpace); | 38 | doc.append(region.feature(ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION), this::noSpace); |
39 | formatParenthesizedList(region, doc); | 39 | formatParenthesizedList(region, doc); |
40 | for (var argument : assertion.getArguments()) { | 40 | for (var argument : assertion.getArguments()) { |
41 | doc.format(argument); | 41 | doc.format(argument); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java index 8fd60364..505c7787 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java +++ b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java | |||
@@ -154,6 +154,9 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti | |||
154 | if (ProblemUtil.isTypeLike(relation)) { | 154 | if (ProblemUtil.isTypeLike(relation)) { |
155 | builder.put(TYPE_LIKE, TYPE_LIKE_TRUE); | 155 | builder.put(TYPE_LIKE, TYPE_LIKE_TRUE); |
156 | } | 156 | } |
157 | } else if (eObject instanceof RuleDefinition) { | ||
158 | // Rule definitions and predicates live in the same namespace. | ||
159 | builder.put(SHADOWING_KEY, SHADOWING_KEY_RELATION); | ||
157 | } else if (eObject instanceof AggregatorDeclaration) { | 160 | } else if (eObject instanceof AggregatorDeclaration) { |
158 | builder.put(SHADOWING_KEY, SHADOWING_KEY_AGGREGATOR); | 161 | builder.put(SHADOWING_KEY, SHADOWING_KEY_AGGREGATOR); |
159 | } | 162 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java b/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java index d94c9a13..21f64236 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java +++ b/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java | |||
@@ -31,11 +31,11 @@ public class ProblemScopeProvider extends AbstractProblemScopeProvider { | |||
31 | public IScope getScope(EObject context, EReference reference) { | 31 | public IScope getScope(EObject context, EReference reference) { |
32 | var scope = super.getScope(context, reference); | 32 | var scope = super.getScope(context, reference); |
33 | if (reference == ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE) { | 33 | if (reference == ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE) { |
34 | return getNodesScope(context, scope); | 34 | // On the right side of a rule, assertion arguments may refer to variables. |
35 | var rule = EcoreUtil2.getContainerOfType(context, RuleDefinition.class); | ||
36 | return rule == null ? getNodesScope(context, scope) : getVariableScope(context, scope); | ||
35 | } | 37 | } |
36 | if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE | 38 | if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE) { |
37 | || reference == ProblemPackage.Literals.NEW_ACTION__PARENT | ||
38 | || reference == ProblemPackage.Literals.DELETE_ACTION__VARIABLE_OR_NODE) { | ||
39 | return getVariableScope(context, scope); | 39 | return getVariableScope(context, scope); |
40 | } | 40 | } |
41 | if (reference == ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) { | 41 | if (reference == ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) { |
@@ -81,13 +81,6 @@ public class ProblemScopeProvider extends AbstractProblemScopeProvider { | |||
81 | switch (currentContext) { | 81 | switch (currentContext) { |
82 | case ExistentialQuantifier quantifier -> variables.addAll(quantifier.getImplicitVariables()); | 82 | case ExistentialQuantifier quantifier -> variables.addAll(quantifier.getImplicitVariables()); |
83 | case Match match -> variables.addAll(match.getCondition().getImplicitVariables()); | 83 | case Match match -> variables.addAll(match.getCondition().getImplicitVariables()); |
84 | case Consequent consequent -> { | ||
85 | for (var literal : consequent.getActions()) { | ||
86 | if (literal instanceof NewAction newAction && newAction.getVariable() != null) { | ||
87 | variables.add(newAction.getVariable()); | ||
88 | } | ||
89 | } | ||
90 | } | ||
91 | default -> { | 84 | default -> { |
92 | // Nothing to add. | 85 | // Nothing to add. |
93 | } | 86 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java index 3432b2d8..225bf49d 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java +++ b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java | |||
@@ -12,9 +12,11 @@ import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransi | |||
12 | import tools.refinery.language.model.problem.Assertion; | 12 | import tools.refinery.language.model.problem.Assertion; |
13 | import tools.refinery.language.model.problem.LogicConstant; | 13 | import tools.refinery.language.model.problem.LogicConstant; |
14 | import tools.refinery.language.model.problem.LogicValue; | 14 | import tools.refinery.language.model.problem.LogicValue; |
15 | import tools.refinery.language.model.problem.ProblemPackage; | ||
16 | import tools.refinery.language.services.ProblemGrammarAccess; | 15 | import tools.refinery.language.services.ProblemGrammarAccess; |
17 | 16 | ||
17 | import static tools.refinery.language.model.problem.ProblemPackage.Literals.ABSTRACT_ASSERTION__ARGUMENTS; | ||
18 | import static tools.refinery.language.model.problem.ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION; | ||
19 | |||
18 | public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemanticSequencer { | 20 | public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemanticSequencer { |
19 | @Inject | 21 | @Inject |
20 | private ProblemGrammarAccess grammarAccess; | 22 | private ProblemGrammarAccess grammarAccess; |
@@ -27,13 +29,13 @@ public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemant | |||
27 | return; | 29 | return; |
28 | } | 30 | } |
29 | if (errorAcceptor != null) { | 31 | if (errorAcceptor != null) { |
30 | if (transientValues.isValueTransient(semanticObject, ProblemPackage.Literals.ASSERTION__RELATION) == ValueTransient.YES) { | 32 | if (transientValues.isValueTransient(semanticObject, ABSTRACT_ASSERTION__RELATION) == ValueTransient.YES) { |
31 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, | 33 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, |
32 | ProblemPackage.Literals.ASSERTION__RELATION)); | 34 | ABSTRACT_ASSERTION__RELATION)); |
33 | } | 35 | } |
34 | if (transientValues.isListTransient(semanticObject, ProblemPackage.Literals.ASSERTION__ARGUMENTS) == ListTransient.YES) { | 36 | if (transientValues.isListTransient(semanticObject, ABSTRACT_ASSERTION__ARGUMENTS) == ListTransient.YES) { |
35 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, | 37 | errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, |
36 | ProblemPackage.Literals.ASSERTION__ARGUMENTS)); | 38 | ABSTRACT_ASSERTION__ARGUMENTS)); |
37 | } | 39 | } |
38 | } | 40 | } |
39 | var feeder = createSequencerFeeder(context, semanticObject); | 41 | var feeder = createSequencerFeeder(context, semanticObject); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/ExprType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ExprType.java index 9e44063d..65721924 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/typesystem/ExprType.java +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ExprType.java | |||
@@ -8,6 +8,7 @@ package tools.refinery.language.typesystem; | |||
8 | public sealed interface ExprType permits FixedType, MutableType { | 8 | public sealed interface ExprType permits FixedType, MutableType { |
9 | NodeType NODE = new NodeType(); | 9 | NodeType NODE = new NodeType(); |
10 | LiteralType LITERAL = new LiteralType(); | 10 | LiteralType LITERAL = new LiteralType(); |
11 | ModalLiteralType MODAL_LITERAL = new ModalLiteralType(); | ||
11 | InvalidType INVALID = new InvalidType(); | 12 | InvalidType INVALID = new InvalidType(); |
12 | 13 | ||
13 | FixedType getActualType(); | 14 | FixedType getActualType(); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/FixedType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/FixedType.java index 1b2ded48..f9e75f26 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/typesystem/FixedType.java +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/FixedType.java | |||
@@ -5,7 +5,8 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.language.typesystem; | 6 | package tools.refinery.language.typesystem; |
7 | 7 | ||
8 | public sealed interface FixedType extends ExprType permits NodeType, LiteralType, InvalidType, DataExprType { | 8 | public sealed interface FixedType extends ExprType permits NodeType, LiteralType, ModalLiteralType, InvalidType, |
9 | DataExprType { | ||
9 | @Override | 10 | @Override |
10 | default FixedType getActualType() { | 11 | default FixedType getActualType() { |
11 | return this; | 12 | return this; |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/ModalLiteralType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ModalLiteralType.java new file mode 100644 index 00000000..6b44977a --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ModalLiteralType.java | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | public final class ModalLiteralType implements FixedType { | ||
9 | ModalLiteralType() { | ||
10 | } | ||
11 | |||
12 | @Override | ||
13 | public String toString() { | ||
14 | return "modal constraint"; | ||
15 | } | ||
16 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java index 6691f0ae..63815506 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java | |||
@@ -63,6 +63,7 @@ public class TypedModule { | |||
63 | for (var statement : problem.getStatements()) { | 63 | for (var statement : problem.getStatements()) { |
64 | switch (statement) { | 64 | switch (statement) { |
65 | case PredicateDefinition predicateDefinition -> checkTypes(predicateDefinition); | 65 | case PredicateDefinition predicateDefinition -> checkTypes(predicateDefinition); |
66 | case RuleDefinition ruleDefinition -> checkTypes(ruleDefinition); | ||
66 | case Assertion assertion -> checkTypes(assertion); | 67 | case Assertion assertion -> checkTypes(assertion); |
67 | default -> { | 68 | default -> { |
68 | // Nothing to type check. | 69 | // Nothing to type check. |
@@ -79,13 +80,33 @@ public class TypedModule { | |||
79 | } | 80 | } |
80 | } | 81 | } |
81 | 82 | ||
83 | private void checkTypes(RuleDefinition ruleDefinition) { | ||
84 | for (var conjunction : ruleDefinition.getPreconditions()) { | ||
85 | for (var literal : conjunction.getLiterals()) { | ||
86 | expectType(literal, ExprType.MODAL_LITERAL); | ||
87 | } | ||
88 | } | ||
89 | for (var consequent : ruleDefinition.getConsequents()) { | ||
90 | for (var action : consequent.getActions()) { | ||
91 | if (action instanceof AssertionAction assertionAction) { | ||
92 | checkTypes(assertionAction); | ||
93 | } | ||
94 | } | ||
95 | } | ||
96 | } | ||
97 | |||
82 | private void checkTypes(Assertion assertion) { | 98 | private void checkTypes(Assertion assertion) { |
99 | checkAssertionValueType(assertion); | ||
100 | checkNodeAssertionArgumentTypes(assertion, false); | ||
101 | } | ||
102 | |||
103 | private void checkAssertionValueType(AbstractAssertion assertion) { | ||
83 | var relation = assertion.getRelation(); | 104 | var relation = assertion.getRelation(); |
84 | var value = assertion.getValue(); | ||
85 | if (relation == null) { | 105 | if (relation == null) { |
86 | return; | 106 | return; |
87 | } | 107 | } |
88 | var type = signatureProvider.getSignature(relation).resultType(); | 108 | var type = signatureProvider.getSignature(relation).resultType(); |
109 | var value = assertion.getValue(); | ||
89 | if (type == ExprType.LITERAL) { | 110 | if (type == ExprType.LITERAL) { |
90 | if (value == null) { | 111 | if (value == null) { |
91 | return; | 112 | return; |
@@ -95,11 +116,43 @@ public class TypedModule { | |||
95 | } | 116 | } |
96 | if (value == null) { | 117 | if (value == null) { |
97 | var message = "Assertion value of type %s is required.".formatted(type); | 118 | var message = "Assertion value of type %s is required.".formatted(type); |
98 | error(message, assertion, ProblemPackage.Literals.ASSERTION__RELATION, 0, ProblemValidator.TYPE_ERROR); | 119 | error(message, assertion, ProblemPackage.Literals.ABSTRACT_ASSERTION__VALUE, 0, |
120 | ProblemValidator.TYPE_ERROR); | ||
99 | } | 121 | } |
100 | expectType(value, type); | 122 | expectType(value, type); |
101 | } | 123 | } |
102 | 124 | ||
125 | private void checkNodeAssertionArgumentTypes(AbstractAssertion assertion, boolean allowVariables) { | ||
126 | for (var argument : assertion.getArguments()) { | ||
127 | if (argument instanceof NodeAssertionArgument nodeAssertionArgument) { | ||
128 | checkNodeAssertionArgumentType(nodeAssertionArgument, allowVariables); | ||
129 | } | ||
130 | } | ||
131 | } | ||
132 | |||
133 | private void checkNodeAssertionArgumentType(NodeAssertionArgument nodeAssertionArgument, boolean allowVariables) { | ||
134 | var variableOrNode = nodeAssertionArgument.getNode(); | ||
135 | if (variableOrNode == null || variableOrNode.eIsProxy()) { | ||
136 | return; | ||
137 | } | ||
138 | if (allowVariables && variableOrNode instanceof Variable variable) { | ||
139 | var variableType = getVariableType(variable); | ||
140 | if (variableType == ExprType.INVALID || variableType == ExprType.NODE) { | ||
141 | return; | ||
142 | } | ||
143 | } | ||
144 | if (variableOrNode instanceof Node) { | ||
145 | return; | ||
146 | } | ||
147 | error("Assertion argument must be a node.", nodeAssertionArgument, | ||
148 | ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE, 0, ProblemValidator.TYPE_ERROR); | ||
149 | } | ||
150 | |||
151 | private void checkTypes(AssertionAction assertionAction) { | ||
152 | checkAssertionValueType(assertionAction); | ||
153 | checkNodeAssertionArgumentTypes(assertionAction, true); | ||
154 | } | ||
155 | |||
103 | public List<FeatureBasedDiagnostic> getDiagnostics() { | 156 | public List<FeatureBasedDiagnostic> getDiagnostics() { |
104 | return diagnostics; | 157 | return diagnostics; |
105 | } | 158 | } |
@@ -202,6 +255,7 @@ public class TypedModule { | |||
202 | case RangeExpr rangeExpr -> computeExpressionType(rangeExpr); | 255 | case RangeExpr rangeExpr -> computeExpressionType(rangeExpr); |
203 | case ArithmeticBinaryExpr arithmeticBinaryExpr -> computeExpressionType(arithmeticBinaryExpr); | 256 | case ArithmeticBinaryExpr arithmeticBinaryExpr -> computeExpressionType(arithmeticBinaryExpr); |
204 | case CastExpr castExpr -> computeExpressionType(castExpr); | 257 | case CastExpr castExpr -> computeExpressionType(castExpr); |
258 | case ModalExpr modalExpr -> computeExpressionType(modalExpr); | ||
205 | default -> { | 259 | default -> { |
206 | error("Unknown expression: " + expr.getClass().getSimpleName(), expr, null, 0, | 260 | error("Unknown expression: " + expr.getClass().getSimpleName(), expr, null, 0, |
207 | ProblemValidator.UNKNOWN_EXPRESSION_ISSUE); | 261 | ProblemValidator.UNKNOWN_EXPRESSION_ISSUE); |
@@ -290,6 +344,9 @@ public class TypedModule { | |||
290 | // Negation of literals yields another (non-enumerable) literal. | 344 | // Negation of literals yields another (non-enumerable) literal. |
291 | return ExprType.LITERAL; | 345 | return ExprType.LITERAL; |
292 | } | 346 | } |
347 | if (actualType == ExprType.MODAL_LITERAL) { | ||
348 | return ExprType.MODAL_LITERAL; | ||
349 | } | ||
293 | if (actualType == ExprType.INVALID) { | 350 | if (actualType == ExprType.INVALID) { |
294 | return ExprType.INVALID; | 351 | return ExprType.INVALID; |
295 | } | 352 | } |
@@ -507,6 +564,28 @@ public class TypedModule { | |||
507 | return ExprType.INVALID; | 564 | return ExprType.INVALID; |
508 | } | 565 | } |
509 | 566 | ||
567 | @NotNull | ||
568 | private ExprType computeExpressionType(ModalExpr expr) { | ||
569 | var body = expr.getBody(); | ||
570 | if (body == null) { | ||
571 | return ExprType.INVALID; | ||
572 | } | ||
573 | var actualType = getExpressionType(body); | ||
574 | if (actualType == ExprType.LITERAL || BuiltinTermInterpreter.BOOLEAN_TYPE.equals(actualType)) { | ||
575 | return ExprType.MODAL_LITERAL; | ||
576 | } | ||
577 | if (actualType == ExprType.INVALID) { | ||
578 | return ExprType.INVALID; | ||
579 | } | ||
580 | if (actualType instanceof MutableType) { | ||
581 | error(OPERAND_TYPE_ERROR_MESSAGE, body, null, 0, ProblemValidator.TYPE_ERROR); | ||
582 | return ExprType.INVALID; | ||
583 | } | ||
584 | var message = "Data type %s does not support modal operators.".formatted(actualType); | ||
585 | error(message, expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
586 | return ExprType.INVALID; | ||
587 | } | ||
588 | |||
510 | private FixedType getCommonDataType(BinaryExpr expr) { | 589 | private FixedType getCommonDataType(BinaryExpr expr) { |
511 | var commonType = getCommonType(expr); | 590 | var commonType = getCommonType(expr); |
512 | if (!(commonType instanceof DataExprType) && commonType != ExprType.INVALID) { | 591 | if (!(commonType instanceof DataExprType) && commonType != ExprType.INVALID) { |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java b/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java index 9daa8f61..e1820261 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java +++ b/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java | |||
@@ -42,13 +42,11 @@ public final class ProblemUtil { | |||
42 | } | 42 | } |
43 | 43 | ||
44 | public static boolean isImplicit(EObject eObject) { | 44 | public static boolean isImplicit(EObject eObject) { |
45 | if (eObject instanceof Node node) { | 45 | return switch (eObject) { |
46 | return isImplicitNode(node); | 46 | case Node node -> isImplicitNode(node); |
47 | } else if (eObject instanceof Variable variable) { | 47 | case Variable variable -> isImplicitVariable(variable); |
48 | return isImplicitVariable(variable); | 48 | default -> false; |
49 | } else { | 49 | }; |
50 | return false; | ||
51 | } | ||
52 | } | 50 | } |
53 | 51 | ||
54 | public static boolean isError(EObject eObject) { | 52 | public static boolean isError(EObject eObject) { |
@@ -119,7 +117,7 @@ public final class ProblemUtil { | |||
119 | return false; | 117 | return false; |
120 | } | 118 | } |
121 | return switch (kind) { | 119 | return switch (kind) { |
122 | case CONTAINMENT -> false; | 120 | case CONTAINMENT, PARTIAL -> false; |
123 | case CONTAINER -> true; | 121 | case CONTAINER -> true; |
124 | case DEFAULT, REFERENCE -> { | 122 | case DEFAULT, REFERENCE -> { |
125 | var opposite = referenceDeclaration.getOpposite(); | 123 | var opposite = referenceDeclaration.getOpposite(); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/validation/ActionTargetCollector.java b/subprojects/language/src/main/java/tools/refinery/language/validation/ActionTargetCollector.java new file mode 100644 index 00000000..67cd5777 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/validation/ActionTargetCollector.java | |||
@@ -0,0 +1,73 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.validation; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import com.google.inject.Singleton; | ||
10 | import org.eclipse.xtext.EcoreUtil2; | ||
11 | import org.eclipse.xtext.util.IResourceScopeCache; | ||
12 | import org.eclipse.xtext.util.Tuples; | ||
13 | import tools.refinery.language.model.problem.*; | ||
14 | |||
15 | import java.util.HashSet; | ||
16 | import java.util.Set; | ||
17 | |||
18 | @Singleton | ||
19 | public class ActionTargetCollector { | ||
20 | private static final String ACTION_TARGETS = | ||
21 | "tools.refinery.language.validation.ActionTargetCollector.ACTION_TARGETS"; | ||
22 | |||
23 | @Inject | ||
24 | private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; | ||
25 | |||
26 | public boolean isActionTarget(Relation relation) { | ||
27 | var problem = EcoreUtil2.getContainerOfType(relation, Problem.class); | ||
28 | return problem != null && isActionTarget(problem, relation); | ||
29 | } | ||
30 | |||
31 | public boolean isActionTarget(Problem problem, Relation relation) { | ||
32 | var targets = getActionTargets(problem); | ||
33 | if (targets.contains(relation)) { | ||
34 | return true; | ||
35 | } | ||
36 | if (relation instanceof ReferenceDeclaration referenceDeclaration) { | ||
37 | var opposite = referenceDeclaration.getOpposite(); | ||
38 | return opposite != null && targets.contains(opposite); | ||
39 | } | ||
40 | return false; | ||
41 | } | ||
42 | |||
43 | protected Set<Relation> getActionTargets(Problem problem) { | ||
44 | var resource = problem.eResource(); | ||
45 | if (resource == null) { | ||
46 | return doGetActionTargets(problem); | ||
47 | } | ||
48 | return cache.get(Tuples.create(problem, ACTION_TARGETS), resource, () -> doGetActionTargets(problem)); | ||
49 | } | ||
50 | |||
51 | protected Set<Relation> doGetActionTargets(Problem problem) { | ||
52 | var targets = new HashSet<Relation>(); | ||
53 | for (var statement : problem.getStatements()) { | ||
54 | if (statement instanceof RuleDefinition ruleDefinition) { | ||
55 | collectTargets(ruleDefinition, targets); | ||
56 | } | ||
57 | } | ||
58 | return targets; | ||
59 | } | ||
60 | |||
61 | private static void collectTargets(RuleDefinition ruleDefinition, HashSet<Relation> targets) { | ||
62 | for (var consequent : ruleDefinition.getConsequents()) { | ||
63 | for (var action : consequent.getActions()) { | ||
64 | if (action instanceof AssertionAction assertionAction) { | ||
65 | var target = assertionAction.getRelation(); | ||
66 | if (target != null) { | ||
67 | targets.add(target); | ||
68 | } | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | } | ||
73 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/validation/ExistsVariableCollector.java b/subprojects/language/src/main/java/tools/refinery/language/validation/ExistsVariableCollector.java new file mode 100644 index 00000000..5812bdc4 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/validation/ExistsVariableCollector.java | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.validation; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import com.google.inject.Singleton; | ||
10 | import org.eclipse.xtext.EcoreUtil2; | ||
11 | import org.eclipse.xtext.util.IResourceScopeCache; | ||
12 | import org.eclipse.xtext.util.Tuples; | ||
13 | import tools.refinery.language.model.problem.*; | ||
14 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; | ||
15 | import tools.refinery.language.utils.ProblemUtil; | ||
16 | |||
17 | import java.util.HashSet; | ||
18 | import java.util.Set; | ||
19 | |||
20 | @Singleton | ||
21 | public class ExistsVariableCollector { | ||
22 | private static final String EXISTS_VARIABLES = | ||
23 | "tools.refinery.language.validation.ExistsVariableCollector.EXISTS_VARIABLES"; | ||
24 | |||
25 | @Inject | ||
26 | private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; | ||
27 | |||
28 | @Inject | ||
29 | private ImportAdapterProvider importAdapterProvider; | ||
30 | |||
31 | public boolean missingExistsConstraint(Variable variable) { | ||
32 | if (variable instanceof Parameter) { | ||
33 | return false; | ||
34 | } | ||
35 | if (ProblemUtil.isImplicitVariable(variable)) { | ||
36 | var negation = EcoreUtil2.getContainerOfType(variable, NegationExpr.class); | ||
37 | if (negation != null) { | ||
38 | // Negations are implicitly quantified. | ||
39 | return false; | ||
40 | } | ||
41 | } | ||
42 | var conjunction = EcoreUtil2.getContainerOfType(variable, Conjunction.class); | ||
43 | if (conjunction == null) { | ||
44 | return true; | ||
45 | } | ||
46 | var variables = getExistsVariables(conjunction); | ||
47 | return !variables.contains(variable); | ||
48 | } | ||
49 | |||
50 | protected Set<Variable> getExistsVariables(Conjunction conjunction) { | ||
51 | var resource = conjunction.eResource(); | ||
52 | if (resource == null) { | ||
53 | return doGetExistsVariables(conjunction); | ||
54 | } | ||
55 | return cache.get(Tuples.create(conjunction, EXISTS_VARIABLES), resource, | ||
56 | () -> doGetExistsVariables(conjunction)); | ||
57 | } | ||
58 | |||
59 | protected Set<Variable> doGetExistsVariables(Conjunction conjunction) { | ||
60 | var builtinSymbols = importAdapterProvider.getBuiltinSymbols(conjunction); | ||
61 | var existsRelation = builtinSymbols.exists(); | ||
62 | var set = new HashSet<Variable>(); | ||
63 | for (var atom : EcoreUtil2.getAllContentsOfType(conjunction, Atom.class)) { | ||
64 | if (existsRelation.equals(atom.getRelation())) { | ||
65 | for (var argument : atom.getArguments()) { | ||
66 | if (argument instanceof VariableOrNodeExpr variableOrNodeExpr && | ||
67 | variableOrNodeExpr.getVariableOrNode() instanceof Variable variable) { | ||
68 | set.add(variable); | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | } | ||
73 | return set; | ||
74 | } | ||
75 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java index 745e2d2b..84218f17 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java +++ b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java | |||
@@ -24,10 +24,7 @@ import tools.refinery.language.typesystem.ProblemTypeAnalyzer; | |||
24 | import tools.refinery.language.typesystem.SignatureProvider; | 24 | import tools.refinery.language.typesystem.SignatureProvider; |
25 | import tools.refinery.language.utils.ProblemUtil; | 25 | import tools.refinery.language.utils.ProblemUtil; |
26 | 26 | ||
27 | import java.util.ArrayList; | 27 | import java.util.*; |
28 | import java.util.LinkedHashMap; | ||
29 | import java.util.LinkedHashSet; | ||
30 | import java.util.Set; | ||
31 | 28 | ||
32 | /** | 29 | /** |
33 | * This class contains custom validation rules. | 30 | * This class contains custom validation rules. |
@@ -49,17 +46,26 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
49 | public static final String INVALID_SUPERTYPE_ISSUE = ISSUE_PREFIX + "INVALID_SUPERTYPE"; | 46 | public static final String INVALID_SUPERTYPE_ISSUE = ISSUE_PREFIX + "INVALID_SUPERTYPE"; |
50 | public static final String INVALID_REFERENCE_TYPE_ISSUE = ISSUE_PREFIX + "INVALID_REFERENCE_TYPE"; | 47 | public static final String INVALID_REFERENCE_TYPE_ISSUE = ISSUE_PREFIX + "INVALID_REFERENCE_TYPE"; |
51 | public static final String INVALID_ARITY_ISSUE = ISSUE_PREFIX + "INVALID_ARITY"; | 48 | public static final String INVALID_ARITY_ISSUE = ISSUE_PREFIX + "INVALID_ARITY"; |
49 | public static final String INVALID_MODALITY_ISSUE = ISSUE_PREFIX + "INVALID_MODALITY"; | ||
50 | public static final String INVALID_RULE_ISSUE = ISSUE_PREFIX + "INVALID_RULE"; | ||
52 | public static final String INVALID_TRANSITIVE_CLOSURE_ISSUE = ISSUE_PREFIX + "INVALID_TRANSITIVE_CLOSURE"; | 51 | public static final String INVALID_TRANSITIVE_CLOSURE_ISSUE = ISSUE_PREFIX + "INVALID_TRANSITIVE_CLOSURE"; |
53 | public static final String INVALID_VALUE_ISSUE = ISSUE_PREFIX + "INVALID_VALUE"; | ||
54 | public static final String UNSUPPORTED_ASSERTION_ISSUE = ISSUE_PREFIX + "UNSUPPORTED_ASSERTION"; | 52 | public static final String UNSUPPORTED_ASSERTION_ISSUE = ISSUE_PREFIX + "UNSUPPORTED_ASSERTION"; |
55 | public static final String UNKNOWN_EXPRESSION_ISSUE = ISSUE_PREFIX + "UNKNOWN_EXPRESSION"; | 53 | public static final String UNKNOWN_EXPRESSION_ISSUE = ISSUE_PREFIX + "UNKNOWN_EXPRESSION"; |
56 | public static final String INVALID_ASSIGNMENT_ISSUE = ISSUE_PREFIX + "INVALID_ASSIGNMENT"; | 54 | public static final String INVALID_ASSIGNMENT_ISSUE = ISSUE_PREFIX + "INVALID_ASSIGNMENT"; |
57 | public static final String TYPE_ERROR = ISSUE_PREFIX + "TYPE_ERROR"; | 55 | public static final String TYPE_ERROR = ISSUE_PREFIX + "TYPE_ERROR"; |
56 | public static final String VARIABLE_WITHOUT_EXISTS = ISSUE_PREFIX + "VARIABLE_WITHOUT_EXISTS"; | ||
57 | public static final String UNUSED_PARTIAL_RELATION = ISSUE_PREFIX + "UNUSED_PARTIAL_RELATION"; | ||
58 | 58 | ||
59 | @Inject | 59 | @Inject |
60 | private ReferenceCounter referenceCounter; | 60 | private ReferenceCounter referenceCounter; |
61 | 61 | ||
62 | @Inject | 62 | @Inject |
63 | private ExistsVariableCollector existsVariableCollector; | ||
64 | |||
65 | @Inject | ||
66 | private ActionTargetCollector actionTargetCollector; | ||
67 | |||
68 | @Inject | ||
63 | private IQualifiedNameConverter qualifiedNameConverter; | 69 | private IQualifiedNameConverter qualifiedNameConverter; |
64 | 70 | ||
65 | @Inject | 71 | @Inject |
@@ -128,6 +134,14 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
128 | var variableOrNode = expr.getVariableOrNode(); | 134 | var variableOrNode = expr.getVariableOrNode(); |
129 | if (variableOrNode instanceof Variable variable && ProblemUtil.isImplicitVariable(variable) | 135 | if (variableOrNode instanceof Variable variable && ProblemUtil.isImplicitVariable(variable) |
130 | && !ProblemUtil.isSingletonVariable(variable)) { | 136 | && !ProblemUtil.isSingletonVariable(variable)) { |
137 | if (EcoreUtil2.getContainerOfType(variable, ParametricDefinition.class) instanceof RuleDefinition && | ||
138 | EcoreUtil2.getContainerOfType(variable, NegationExpr.class) == null && | ||
139 | // If there is an exists constraint, it is the only constraint. | ||
140 | existsVariableCollector.missingExistsConstraint(variable)) { | ||
141 | // Existentially quantified variables in rules should not be singletons, | ||
142 | // because we have to add an {@code exists} constraint as well. | ||
143 | return; | ||
144 | } | ||
131 | var problem = EcoreUtil2.getContainerOfType(variable, Problem.class); | 145 | var problem = EcoreUtil2.getContainerOfType(variable, Problem.class); |
132 | if (problem != null && referenceCounter.countReferences(problem, variable) <= 1) { | 146 | if (problem != null && referenceCounter.countReferences(problem, variable) <= 1) { |
133 | var name = variable.getName(); | 147 | var name = variable.getName(); |
@@ -152,13 +166,32 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
152 | } | 166 | } |
153 | 167 | ||
154 | @Check | 168 | @Check |
169 | public void checkNodeAssertionArgumentConstants(NodeAssertionArgument argument) { | ||
170 | var rule = EcoreUtil2.getContainerOfType(argument, RuleDefinition.class); | ||
171 | if (rule == null) { | ||
172 | return; | ||
173 | } | ||
174 | var variableOrNode = argument.getNode(); | ||
175 | if (variableOrNode instanceof Node node && !ProblemUtil.isAtomNode(node)) { | ||
176 | var name = node.getName(); | ||
177 | var message = ("Only atoms can be referenced in rule actions. " + | ||
178 | "Mark '%s' as an atom with the declaration 'atom %s.'").formatted(name, name); | ||
179 | error(message, argument, ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE, | ||
180 | INSIGNIFICANT_INDEX, NODE_CONSTANT_ISSUE); | ||
181 | } | ||
182 | } | ||
183 | |||
184 | @Check | ||
155 | public void checkUniqueDeclarations(Problem problem) { | 185 | public void checkUniqueDeclarations(Problem problem) { |
156 | var relations = new ArrayList<Relation>(); | 186 | var relations = new ArrayList<NamedElement>(); |
157 | var nodes = new ArrayList<Node>(); | 187 | var nodes = new ArrayList<Node>(); |
158 | var aggregators = new ArrayList<AggregatorDeclaration>(); | 188 | var aggregators = new ArrayList<AggregatorDeclaration>(); |
159 | for (var statement : problem.getStatements()) { | 189 | for (var statement : problem.getStatements()) { |
160 | if (statement instanceof Relation relation) { | 190 | if (statement instanceof Relation relation) { |
161 | relations.add(relation); | 191 | relations.add(relation); |
192 | } else if (statement instanceof RuleDefinition ruleDefinition) { | ||
193 | // Rule definitions and predicates live in the same namespace. | ||
194 | relations.add(ruleDefinition); | ||
162 | } else if (statement instanceof NodeDeclaration nodeDeclaration) { | 195 | } else if (statement instanceof NodeDeclaration nodeDeclaration) { |
163 | nodes.addAll(nodeDeclaration.getNodes()); | 196 | nodes.addAll(nodeDeclaration.getNodes()); |
164 | } else if (statement instanceof AggregatorDeclaration aggregatorDeclaration) { | 197 | } else if (statement instanceof AggregatorDeclaration aggregatorDeclaration) { |
@@ -298,6 +331,22 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
298 | referenceDeclaration, ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE, 0, | 331 | referenceDeclaration, ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE, 0, |
299 | INVALID_OPPOSITE_ISSUE); | 332 | INVALID_OPPOSITE_ISSUE); |
300 | } | 333 | } |
334 | } else if (kind == ReferenceKind.PARTIAL && opposite != null && opposite.getKind() != ReferenceKind.PARTIAL) { | ||
335 | acceptError("Opposite '%s' of partial reference '%s' is not a partial reference." | ||
336 | .formatted(opposite.getName(), referenceDeclaration.getName()), | ||
337 | referenceDeclaration, ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE, 0, | ||
338 | INVALID_OPPOSITE_ISSUE); | ||
339 | } | ||
340 | } | ||
341 | |||
342 | @Check | ||
343 | public void checkPartialReference(ReferenceDeclaration referenceDeclaration) { | ||
344 | if (referenceDeclaration.getKind() == ReferenceKind.PARTIAL && | ||
345 | !actionTargetCollector.isActionTarget(referenceDeclaration)) { | ||
346 | var message = "Add decision or propagation rules to refine partial relation '%s'." | ||
347 | .formatted(referenceDeclaration.getName()); | ||
348 | acceptWarning(message, referenceDeclaration, ProblemPackage.Literals.REFERENCE_DECLARATION__KIND, 0, | ||
349 | UNUSED_PARTIAL_RELATION); | ||
301 | } | 350 | } |
302 | } | 351 | } |
303 | 352 | ||
@@ -336,8 +385,33 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
336 | } | 385 | } |
337 | 386 | ||
338 | @Check | 387 | @Check |
339 | public void checkParameterType(Parameter parameter) { | 388 | public void checkParameter(Parameter parameter) { |
340 | checkArity(parameter, ProblemPackage.Literals.PARAMETER__PARAMETER_TYPE, 1); | 389 | checkArity(parameter, ProblemPackage.Literals.PARAMETER__PARAMETER_TYPE, 1); |
390 | var parametricDefinition = EcoreUtil2.getContainerOfType(parameter, ParametricDefinition.class); | ||
391 | if (parametricDefinition instanceof RuleDefinition rule) { | ||
392 | if (parameter.getParameterType() != null && parameter.getModality() == Modality.NONE) { | ||
393 | acceptError("Parameter type modality must be specified.", parameter, | ||
394 | ProblemPackage.Literals.PARAMETER__PARAMETER_TYPE, 0, INVALID_MODALITY_ISSUE); | ||
395 | } | ||
396 | var kind = rule.getKind(); | ||
397 | var binding = parameter.getBinding(); | ||
398 | if (kind == RuleKind.PROPAGATION && binding != ParameterBinding.SINGLE) { | ||
399 | acceptError("Parameter binding annotations are not supported in propagation rules.", parameter, | ||
400 | ProblemPackage.Literals.PARAMETER__BINDING, 0, INVALID_MODALITY_ISSUE); | ||
401 | } else if (kind != RuleKind.DECISION && binding == ParameterBinding.MULTI) { | ||
402 | acceptError("Explicit multi-object bindings are only supported in decision rules.", parameter, | ||
403 | ProblemPackage.Literals.PARAMETER__BINDING, 0, INVALID_MODALITY_ISSUE); | ||
404 | } | ||
405 | } else { | ||
406 | if (parameter.getConcreteness() != Concreteness.PARTIAL || parameter.getModality() != Modality.NONE) { | ||
407 | acceptError("Modal parameter types are only supported in rule definitions.", parameter, null, 0, | ||
408 | INVALID_MODALITY_ISSUE); | ||
409 | } | ||
410 | if (parameter.getBinding() != ParameterBinding.SINGLE) { | ||
411 | acceptError("Parameter binding annotations are only supported in decision rules.", parameter, | ||
412 | ProblemPackage.PARAMETER__BINDING, 0, INVALID_MODALITY_ISSUE); | ||
413 | } | ||
414 | } | ||
341 | } | 415 | } |
342 | 416 | ||
343 | @Check | 417 | @Check |
@@ -353,16 +427,46 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
353 | } | 427 | } |
354 | 428 | ||
355 | @Check | 429 | @Check |
356 | public void checkAssertion(Assertion assertion) { | 430 | public void checkRuleDefinition(RuleDefinition ruleDefinition) { |
431 | if (ruleDefinition.getConsequents().size() != 1) { | ||
432 | acceptError("Rules must have exactly one consequent.", ruleDefinition, | ||
433 | ProblemPackage.Literals.NAMED_ELEMENT__NAME, 0, INVALID_RULE_ISSUE); | ||
434 | } | ||
435 | var unquantifiedVariables = new HashSet<Variable>(); | ||
436 | for (var variable : EcoreUtil2.getAllContentsOfType(ruleDefinition, Variable.class)) { | ||
437 | if (existsVariableCollector.missingExistsConstraint(variable)) { | ||
438 | unquantifiedVariables.add(variable); | ||
439 | } | ||
440 | } | ||
441 | for (var expr : EcoreUtil2.getAllContentsOfType(ruleDefinition, VariableOrNodeExpr.class)) { | ||
442 | if (expr.getVariableOrNode() instanceof Variable variable && unquantifiedVariables.contains(variable)) { | ||
443 | unquantifiedVariables.remove(variable); | ||
444 | var name = variable.getName(); | ||
445 | String message; | ||
446 | if (ProblemUtil.isSingletonVariable(variable)) { | ||
447 | message = ("Remove the singleton variable marker '_' and clarify the quantification of variable " + | ||
448 | "'%s'.").formatted(name); | ||
449 | } else { | ||
450 | message = ("Add a 'must exists(%s)', 'may exists(%s)', or 'may !exists(%s)' constraint to " + | ||
451 | "clarify the quantification of variable '%s'.").formatted(name, name, name, name); | ||
452 | } | ||
453 | acceptWarning(message, expr, ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE, 0, | ||
454 | VARIABLE_WITHOUT_EXISTS); | ||
455 | } | ||
456 | } | ||
457 | } | ||
458 | |||
459 | @Check | ||
460 | public void checkAssertion(AbstractAssertion assertion) { | ||
357 | var relation = assertion.getRelation(); | 461 | var relation = assertion.getRelation(); |
358 | if (relation instanceof DatatypeDeclaration) { | 462 | if (relation instanceof DatatypeDeclaration) { |
359 | var message = "Assertions for data types are not supported."; | 463 | var message = "Assertions for data types are not supported."; |
360 | acceptError(message, assertion, ProblemPackage.Literals.ASSERTION__RELATION, 0, | 464 | acceptError(message, assertion, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION, 0, |
361 | UNSUPPORTED_ASSERTION_ISSUE); | 465 | UNSUPPORTED_ASSERTION_ISSUE); |
362 | return; | 466 | return; |
363 | } | 467 | } |
364 | int argumentCount = assertion.getArguments().size(); | 468 | int argumentCount = assertion.getArguments().size(); |
365 | checkArity(assertion, ProblemPackage.Literals.ASSERTION__RELATION, argumentCount); | 469 | checkArity(assertion, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION, argumentCount); |
366 | } | 470 | } |
367 | 471 | ||
368 | @Check | 472 | @Check |
@@ -466,15 +570,17 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
466 | 570 | ||
467 | @Nullable | 571 | @Nullable |
468 | private Node getNodeArgumentForMultiObjectAssertion(AssertionArgument argument) { | 572 | private Node getNodeArgumentForMultiObjectAssertion(AssertionArgument argument) { |
469 | if (argument instanceof WildcardAssertionArgument) { | 573 | return switch (argument) { |
470 | acceptError("Wildcard arguments for 'exists' are not supported.", argument, null, 0, | 574 | case null -> null; |
471 | UNSUPPORTED_ASSERTION_ISSUE); | 575 | case WildcardAssertionArgument ignoredWildcardAssertionArgument -> { |
472 | return null; | 576 | acceptError("Wildcard arguments for 'exists' are not supported.", argument, null, 0, |
473 | } | 577 | UNSUPPORTED_ASSERTION_ISSUE); |
474 | if (argument instanceof NodeAssertionArgument nodeAssertionArgument) { | 578 | yield null; |
475 | return nodeAssertionArgument.getNode(); | 579 | } |
476 | } | 580 | case NodeAssertionArgument nodeAssertionArgument -> |
477 | throw new IllegalArgumentException("Unknown assertion argument: " + argument); | 581 | nodeAssertionArgument.getNode() instanceof Node node ? node : null; |
582 | default -> throw new IllegalArgumentException("Unknown assertion argument: " + argument); | ||
583 | }; | ||
478 | } | 584 | } |
479 | 585 | ||
480 | @Check | 586 | @Check |
@@ -484,8 +590,10 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
484 | } | 590 | } |
485 | for (var argument : assertion.getArguments()) { | 591 | for (var argument : assertion.getArguments()) { |
486 | if (argument instanceof NodeAssertionArgument nodeAssertionArgument) { | 592 | if (argument instanceof NodeAssertionArgument nodeAssertionArgument) { |
487 | var node = nodeAssertionArgument.getNode(); | 593 | var variableOrNode = nodeAssertionArgument.getNode(); |
488 | if (node != null && !node.eIsProxy() && ProblemUtil.isImplicitNode(node)) { | 594 | if (variableOrNode instanceof Node node && |
595 | !variableOrNode.eIsProxy() && | ||
596 | ProblemUtil.isImplicitNode(node)) { | ||
489 | var name = node.getName(); | 597 | var name = node.getName(); |
490 | var message = ("Implicit nodes are not allowed in modules. Explicitly declare '%s' as a node " + | 598 | var message = ("Implicit nodes are not allowed in modules. Explicitly declare '%s' as a node " + |
491 | "with the declaration 'declare %s.'").formatted(name, name); | 599 | "with the declaration 'declare %s.'").formatted(name, name); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/validation/ReferenceCounter.java b/subprojects/language/src/main/java/tools/refinery/language/validation/ReferenceCounter.java index 55cbd71d..40781168 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/validation/ReferenceCounter.java +++ b/subprojects/language/src/main/java/tools/refinery/language/validation/ReferenceCounter.java | |||
@@ -5,20 +5,21 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.language.validation; | 6 | package tools.refinery.language.validation; |
7 | 7 | ||
8 | import java.util.HashMap; | 8 | import com.google.inject.Inject; |
9 | import java.util.Map; | 9 | import com.google.inject.Singleton; |
10 | |||
11 | import org.eclipse.emf.ecore.EObject; | 10 | import org.eclipse.emf.ecore.EObject; |
12 | import org.eclipse.xtext.util.IResourceScopeCache; | 11 | import org.eclipse.xtext.util.IResourceScopeCache; |
13 | import org.eclipse.xtext.util.Tuples; | 12 | import org.eclipse.xtext.util.Tuples; |
14 | |||
15 | import com.google.inject.Inject; | ||
16 | import com.google.inject.Singleton; | ||
17 | |||
18 | import tools.refinery.language.model.problem.Problem; | 13 | import tools.refinery.language.model.problem.Problem; |
19 | 14 | ||
15 | import java.util.HashMap; | ||
16 | import java.util.Map; | ||
17 | |||
20 | @Singleton | 18 | @Singleton |
21 | public class ReferenceCounter { | 19 | public class ReferenceCounter { |
20 | private static final String REFERENCE_COUNTS = | ||
21 | "tools.refinery.language.validation.ReferenceCounter.REFERENCE_COUNTS"; | ||
22 | |||
22 | @Inject | 23 | @Inject |
23 | private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; | 24 | private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; |
24 | 25 | ||
@@ -35,7 +36,7 @@ public class ReferenceCounter { | |||
35 | if (resource == null) { | 36 | if (resource == null) { |
36 | return doGetReferenceCounts(problem); | 37 | return doGetReferenceCounts(problem); |
37 | } | 38 | } |
38 | return cache.get(Tuples.create(problem, "referenceCounts"), resource, () -> doGetReferenceCounts(problem)); | 39 | return cache.get(Tuples.create(problem, REFERENCE_COUNTS), resource, () -> doGetReferenceCounts(problem)); |
39 | } | 40 | } |
40 | 41 | ||
41 | protected Map<EObject, Integer> doGetReferenceCounts(Problem problem) { | 42 | protected Map<EObject, Integer> doGetReferenceCounts(Problem problem) { |
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/rules/RuleParsingTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/rules/RuleParsingTest.java index 56e65550..15636483 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/rules/RuleParsingTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/rules/RuleParsingTest.java | |||
@@ -9,7 +9,6 @@ import com.google.inject.Inject; | |||
9 | import org.eclipse.xtext.testing.InjectWith; | 9 | import org.eclipse.xtext.testing.InjectWith; |
10 | import org.eclipse.xtext.testing.extensions.InjectionExtension; | 10 | import org.eclipse.xtext.testing.extensions.InjectionExtension; |
11 | import org.junit.jupiter.api.Disabled; | 11 | import org.junit.jupiter.api.Disabled; |
12 | import org.junit.jupiter.api.Test; | ||
13 | import org.junit.jupiter.api.extension.ExtendWith; | 12 | import org.junit.jupiter.api.extension.ExtendWith; |
14 | import org.junit.jupiter.params.ParameterizedTest; | 13 | import org.junit.jupiter.params.ParameterizedTest; |
15 | import org.junit.jupiter.params.provider.ValueSource; | 14 | import org.junit.jupiter.params.provider.ValueSource; |
@@ -17,7 +16,7 @@ import tools.refinery.language.model.tests.utils.ProblemParseHelper; | |||
17 | import tools.refinery.language.tests.ProblemInjectorProvider; | 16 | import tools.refinery.language.tests.ProblemInjectorProvider; |
18 | 17 | ||
19 | import static org.hamcrest.MatcherAssert.assertThat; | 18 | import static org.hamcrest.MatcherAssert.assertThat; |
20 | import static org.hamcrest.Matchers.*; | 19 | import static org.hamcrest.Matchers.empty; |
21 | 20 | ||
22 | @Disabled("TODO: Rework transformation rules") | 21 | @Disabled("TODO: Rework transformation rules") |
23 | @ExtendWith(InjectionExtension.class) | 22 | @ExtendWith(InjectionExtension.class) |
@@ -29,62 +28,13 @@ class RuleParsingTest { | |||
29 | @ParameterizedTest | 28 | @ParameterizedTest |
30 | @ValueSource(strings = { """ | 29 | @ValueSource(strings = { """ |
31 | pred Person(p). | 30 | pred Person(p). |
32 | rule r(p1): must Person(p1) ==> Person(p1) := false. | 31 | rule r(p1): must Person(p1) ==> Person(p1): false. |
33 | """, """ | ||
34 | pred Person(p). | ||
35 | rule r(p1): must Person(p1) ==> Person(p1) <: false. | ||
36 | """, """ | 32 | """, """ |
37 | pred Person(p). | 33 | pred Person(p). |
38 | rule r(p1): must Person(p1) ==> !Person(p1). | 34 | rule r(p1): must Person(p1) ==> !Person(p1). |
39 | """, """ | ||
40 | pred Person(p). | ||
41 | rule r(p1): must Person(p1) ==> delete p1. | ||
42 | """ }) | 35 | """ }) |
43 | void simpleTest(String text) { | 36 | void simpleTest(String text) { |
44 | var problem = parseHelper.parse(text); | 37 | var problem = parseHelper.parse(text); |
45 | assertThat(problem.getResourceErrors(), empty()); | 38 | assertThat(problem.getResourceErrors(), empty()); |
46 | } | 39 | } |
47 | |||
48 | @Test | ||
49 | void newNodeTest() { | ||
50 | var problem = parseHelper.parse(""" | ||
51 | pred Person(p). | ||
52 | rule r(p1): must Person(p1) ==> new p2, Person(p2) := unknown. | ||
53 | """); | ||
54 | assertThat(problem.getResourceErrors(), empty()); | ||
55 | assertThat(problem.rule("r").param(0), equalTo(problem.rule("r").conj(0).lit(0).arg(0).variable())); | ||
56 | assertThat(problem.rule("r").consequent(0).action(0).newVar(), | ||
57 | equalTo(problem.rule("r").consequent(0).action(1).assertedAtom().arg(0).variable())); | ||
58 | } | ||
59 | |||
60 | @Test | ||
61 | void differentScopeTest() { | ||
62 | var problem = parseHelper.parse(""" | ||
63 | pred Friend(a, b). | ||
64 | rule r(p1): !may Friend(p1, p2) ==> new p2, Friend(p1, p2) := true. | ||
65 | """); | ||
66 | assertThat(problem.getResourceErrors(), empty()); | ||
67 | assertThat(problem.rule("r").conj(0).lit(0).negated().arg(1).variable(), | ||
68 | not(equalTo(problem.rule("r").consequent(0).action(1).assertedAtom().arg(1).variable()))); | ||
69 | } | ||
70 | |||
71 | @Test | ||
72 | void parameterShadowingTest() { | ||
73 | var problem = parseHelper.parse(""" | ||
74 | pred Friend(a, b). | ||
75 | rule r(p1, p2): !may Friend(p1, p2) ==> new p2, Friend(p1, p2) := true. | ||
76 | """); | ||
77 | assertThat(problem.getResourceErrors(), empty()); | ||
78 | assertThat(problem.rule("r").param(1), | ||
79 | not(equalTo(problem.rule("r").consequent(0).action(1).assertedAtom().arg(1).variable()))); | ||
80 | } | ||
81 | |||
82 | @Test | ||
83 | void deleteDifferentScopeNodeTest() { | ||
84 | var problem = parseHelper.parse(""" | ||
85 | pred Person(p). | ||
86 | rule r(p1): must Friend(p1, p2) ==> delete p2. | ||
87 | """); | ||
88 | assertThat(problem.getResourceErrors(), not(empty())); | ||
89 | } | ||
90 | } | 40 | } |
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/validation/OppositeValidationTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/validation/OppositeValidationTest.java index 57602377..d73ef8e7 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/validation/OppositeValidationTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/validation/OppositeValidationTest.java | |||
@@ -57,6 +57,18 @@ class OppositeValidationTest { | |||
57 | class Foo { | 57 | class Foo { |
58 | Foo foo[] opposite foo | 58 | Foo foo[] opposite foo |
59 | } | 59 | } |
60 | """, """ | ||
61 | class Foo { | ||
62 | partial Bar bar opposite foo | ||
63 | } | ||
64 | |||
65 | class Bar { | ||
66 | partial Foo foo opposite bar | ||
67 | } | ||
68 | """, """ | ||
69 | class Foo { | ||
70 | partial Foo foo[] opposite foo | ||
71 | } | ||
60 | """}) | 72 | """}) |
61 | void validOppositeTest(String text) { | 73 | void validOppositeTest(String text) { |
62 | var problem = parseHelper.parse(text); | 74 | var problem = parseHelper.parse(text); |
@@ -188,7 +200,7 @@ class OppositeValidationTest { | |||
188 | } | 200 | } |
189 | 201 | ||
190 | @ParameterizedTest | 202 | @ParameterizedTest |
191 | @ValueSource(strings = {"Foo foo", "container Foo foo"}) | 203 | @ValueSource(strings = {"Foo foo", "container Foo foo", "partial Foo foo"}) |
192 | void containerInvalidOppositeTest(String reference) { | 204 | void containerInvalidOppositeTest(String reference) { |
193 | var problem = parseHelper.parse(""" | 205 | var problem = parseHelper.parse(""" |
194 | class Foo { | 206 | class Foo { |
@@ -203,7 +215,27 @@ class OppositeValidationTest { | |||
203 | assertThat(issues, hasItem(allOf( | 215 | assertThat(issues, hasItem(allOf( |
204 | hasProperty("severity", is(Diagnostic.ERROR)), | 216 | hasProperty("severity", is(Diagnostic.ERROR)), |
205 | hasProperty("issueCode", is(ProblemValidator.INVALID_OPPOSITE_ISSUE)), | 217 | hasProperty("issueCode", is(ProblemValidator.INVALID_OPPOSITE_ISSUE)), |
206 | hasProperty("message", stringContainsInOrder("foo", "bar")) | 218 | hasProperty("message", stringContainsInOrder("foo", "container", "bar")) |
219 | ))); | ||
220 | } | ||
221 | |||
222 | @ParameterizedTest | ||
223 | @ValueSource(strings = {"Foo foo", "contains Foo foo", "container Foo foo"}) | ||
224 | void partialWithConcreteOppositeTest(String reference) { | ||
225 | var problem = parseHelper.parse(""" | ||
226 | class Foo { | ||
227 | partial Bar bar opposite foo | ||
228 | } | ||
229 | |||
230 | class Bar { | ||
231 | %s opposite bar | ||
232 | } | ||
233 | """.formatted(reference)); | ||
234 | var issues = problem.validate(); | ||
235 | assertThat(issues, hasItem(allOf( | ||
236 | hasProperty("severity", is(Diagnostic.ERROR)), | ||
237 | hasProperty("issueCode", is(ProblemValidator.INVALID_OPPOSITE_ISSUE)), | ||
238 | hasProperty("message", stringContainsInOrder("foo", "partial", "bar")) | ||
207 | ))); | 239 | ))); |
208 | } | 240 | } |
209 | } | 241 | } |
diff --git a/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAction.java b/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAction.java index 3a49a0b9..4987cb89 100644 --- a/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAction.java +++ b/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAction.java | |||
@@ -6,25 +6,9 @@ | |||
6 | package tools.refinery.language.model.tests.utils; | 6 | package tools.refinery.language.model.tests.utils; |
7 | 7 | ||
8 | import tools.refinery.language.model.problem.Action; | 8 | import tools.refinery.language.model.problem.Action; |
9 | import tools.refinery.language.model.problem.AssertionAction; | ||
10 | import tools.refinery.language.model.problem.DeleteAction; | ||
11 | import tools.refinery.language.model.problem.NewAction; | ||
12 | import tools.refinery.language.model.problem.VariableOrNode; | ||
13 | 9 | ||
14 | public record WrappedAction(Action action) { | 10 | public record WrappedAction(Action action) { |
15 | public Action get() { | 11 | public Action get() { |
16 | return action; | 12 | return action; |
17 | } | 13 | } |
18 | |||
19 | public VariableOrNode newVar() { | ||
20 | return ((NewAction) action).getVariable(); | ||
21 | } | ||
22 | |||
23 | public VariableOrNode deleteVar() { | ||
24 | return ((DeleteAction) action).getVariableOrNode(); | ||
25 | } | ||
26 | |||
27 | public WrappedAtom assertedAtom() { | ||
28 | return new WrappedAtom(((AssertionAction) action).getAtom()); | ||
29 | } | ||
30 | } | 14 | } |
diff --git a/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAssertionArgument.java b/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAssertionArgument.java index b36f2506..50cb958d 100644 --- a/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAssertionArgument.java +++ b/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedAssertionArgument.java | |||
@@ -15,6 +15,6 @@ public record WrappedAssertionArgument(AssertionArgument assertionArgument) { | |||
15 | } | 15 | } |
16 | 16 | ||
17 | public Node node() { | 17 | public Node node() { |
18 | return ((NodeAssertionArgument) assertionArgument).getNode(); | 18 | return (Node) ((NodeAssertionArgument) assertionArgument).getNode(); |
19 | } | 19 | } |
20 | } | 20 | } |
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/literal/ConstantLiteral.java b/subprojects/logic/src/main/java/tools/refinery/logic/literal/ConstantLiteral.java index 688ddfa0..36cf4226 100644 --- a/subprojects/logic/src/main/java/tools/refinery/logic/literal/ConstantLiteral.java +++ b/subprojects/logic/src/main/java/tools/refinery/logic/literal/ConstantLiteral.java | |||
@@ -14,6 +14,8 @@ import tools.refinery.logic.term.Variable; | |||
14 | import java.util.Objects; | 14 | import java.util.Objects; |
15 | import java.util.Set; | 15 | import java.util.Set; |
16 | 16 | ||
17 | // {@link Object#equals(Object)} is implemented by {@link AbstractLiteral}. | ||
18 | @SuppressWarnings("squid:S2160") | ||
17 | public class ConstantLiteral extends AbstractLiteral { | 19 | public class ConstantLiteral extends AbstractLiteral { |
18 | private final NodeVariable variable; | 20 | private final NodeVariable variable; |
19 | private final int nodeId; | 21 | private final int nodeId; |
@@ -31,7 +33,6 @@ public class ConstantLiteral extends AbstractLiteral { | |||
31 | return nodeId; | 33 | return nodeId; |
32 | } | 34 | } |
33 | 35 | ||
34 | |||
35 | @Override | 36 | @Override |
36 | public Set<Variable> getOutputVariables() { | 37 | public Set<Variable> getOutputVariables() { |
37 | return Set.of(variable); | 38 | return Set.of(variable); |
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java index a70292ad..5f69b7a2 100644 --- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java +++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/propagation/impl/rule/BoundPropagationRule.java | |||
@@ -9,31 +9,54 @@ import tools.refinery.store.dse.propagation.PropagationResult; | |||
9 | import tools.refinery.store.dse.transition.Rule; | 9 | import tools.refinery.store.dse.transition.Rule; |
10 | import tools.refinery.store.dse.transition.actions.BoundAction; | 10 | import tools.refinery.store.dse.transition.actions.BoundAction; |
11 | import tools.refinery.store.model.Model; | 11 | import tools.refinery.store.model.Model; |
12 | import tools.refinery.store.model.ModelListener; | ||
12 | import tools.refinery.store.query.ModelQueryAdapter; | 13 | import tools.refinery.store.query.ModelQueryAdapter; |
13 | import tools.refinery.store.query.resultset.ResultSet; | 14 | import tools.refinery.store.query.resultset.ResultSet; |
15 | import tools.refinery.store.tuple.Tuple; | ||
16 | |||
17 | import java.util.HashSet; | ||
14 | 18 | ||
15 | class BoundPropagationRule { | 19 | class BoundPropagationRule { |
16 | private final Model model; | 20 | private final Model model; |
21 | private final Rule rule; | ||
17 | private final ResultSet<Boolean> resultSet; | 22 | private final ResultSet<Boolean> resultSet; |
18 | private final BoundAction action; | 23 | private final BoundAction action; |
24 | private final HashSet<Tuple> firedActivations = new HashSet<>(); | ||
19 | 25 | ||
20 | public BoundPropagationRule(Model model, Rule rule) { | 26 | public BoundPropagationRule(Model model, Rule rule) { |
21 | this.model = model; | 27 | this.model = model; |
28 | this.rule = rule; | ||
22 | resultSet = model.getAdapter(ModelQueryAdapter.class).getResultSet(rule.getPrecondition()); | 29 | resultSet = model.getAdapter(ModelQueryAdapter.class).getResultSet(rule.getPrecondition()); |
23 | action = rule.createAction(model); | 30 | action = rule.createAction(model); |
31 | model.addListener(new ModelListener() { | ||
32 | @Override | ||
33 | public void afterRestore() { | ||
34 | firedActivations.clear(); | ||
35 | } | ||
36 | }); | ||
37 | resultSet.addListener((key, fromValue, toValue) -> { | ||
38 | if (Boolean.FALSE.equals(toValue)) { | ||
39 | firedActivations.remove(key); | ||
40 | } | ||
41 | }); | ||
24 | } | 42 | } |
25 | 43 | ||
26 | public PropagationResult fireAll() { | 44 | public PropagationResult fireAll() { |
45 | if (!firedActivations.isEmpty()) { | ||
46 | throw new IllegalStateException("Stuck propagation rule '%s'.".formatted(rule.getName())); | ||
47 | } | ||
27 | if (resultSet.size() == 0) { | 48 | if (resultSet.size() == 0) { |
28 | return PropagationResult.UNCHANGED; | 49 | return PropagationResult.UNCHANGED; |
29 | } | 50 | } |
30 | var cursor = resultSet.getAll(); | 51 | var cursor = resultSet.getAll(); |
31 | while (cursor.move()) { | 52 | while (cursor.move()) { |
32 | model.checkCancelled(); | 53 | model.checkCancelled(); |
33 | var result = action.fire(cursor.getKey()); | 54 | var tuple = cursor.getKey(); |
55 | var result = action.fire(tuple); | ||
34 | if (!result) { | 56 | if (!result) { |
35 | return PropagationResult.REJECTED; | 57 | return PropagationResult.REJECTED; |
36 | } | 58 | } |
59 | firedActivations.add(tuple); | ||
37 | } | 60 | } |
38 | return PropagationResult.PROPAGATED; | 61 | return PropagationResult.PROPAGATED; |
39 | } | 62 | } |
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/Action.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/Action.java index 0ce0c3a4..edcf9526 100644 --- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/Action.java +++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/Action.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -67,7 +67,7 @@ public class Action { | |||
67 | var outputVariables = actionLiteral.getOutputVariables(); | 67 | var outputVariables = actionLiteral.getOutputVariables(); |
68 | int size = outputVariables.size(); | 68 | int size = outputVariables.size(); |
69 | if (size == 0) { | 69 | if (size == 0) { |
70 | // Identity mappings use a {@code null} allocation to avoid iterating over the output tuple. | 70 | // Empty mappings use a {@code null} allocation to avoid iterating over the output tuple. |
71 | return; | 71 | return; |
72 | } | 72 | } |
73 | if (size >= 2 && new HashSet<>(outputVariables).size() != size) { | 73 | if (size >= 2 && new HashSet<>(outputVariables).size() != size) { |
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/ActionLiterals.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/ActionLiterals.java index d06e2479..6bd5075b 100644 --- a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/ActionLiterals.java +++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/ActionLiterals.java | |||
@@ -16,6 +16,10 @@ public final class ActionLiterals { | |||
16 | throw new IllegalArgumentException("This is a static utility class and should not be instantiated directly"); | 16 | throw new IllegalArgumentException("This is a static utility class and should not be instantiated directly"); |
17 | } | 17 | } |
18 | 18 | ||
19 | public static ConstantActionLiteral constant(NodeVariable variable, int nodeId) { | ||
20 | return new ConstantActionLiteral(variable, nodeId); | ||
21 | } | ||
22 | |||
19 | public static <T> PutActionLiteral<T> put(Symbol<T> symbol, T value, NodeVariable... parameters) { | 23 | public static <T> PutActionLiteral<T> put(Symbol<T> symbol, T value, NodeVariable... parameters) { |
20 | return new PutActionLiteral<>(symbol, value, List.of(parameters)); | 24 | return new PutActionLiteral<>(symbol, value, List.of(parameters)); |
21 | } | 25 | } |
diff --git a/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/ConstantActionLiteral.java b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/ConstantActionLiteral.java new file mode 100644 index 00000000..fecb2960 --- /dev/null +++ b/subprojects/store-dse/src/main/java/tools/refinery/store/dse/transition/actions/ConstantActionLiteral.java | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.dse.transition.actions; | ||
7 | |||
8 | import tools.refinery.logic.term.NodeVariable; | ||
9 | import tools.refinery.store.model.Model; | ||
10 | import tools.refinery.store.tuple.Tuple; | ||
11 | |||
12 | import java.util.List; | ||
13 | |||
14 | public class ConstantActionLiteral extends AbstractActionLiteral { | ||
15 | private final NodeVariable variable; | ||
16 | private final int nodeId; | ||
17 | |||
18 | public ConstantActionLiteral(NodeVariable variable, int nodeId) { | ||
19 | this.variable = variable; | ||
20 | this.nodeId = nodeId; | ||
21 | } | ||
22 | |||
23 | public NodeVariable getVariable() { | ||
24 | return variable; | ||
25 | } | ||
26 | |||
27 | public int getNodeId() { | ||
28 | return nodeId; | ||
29 | } | ||
30 | |||
31 | @Override | ||
32 | public List<NodeVariable> getInputVariables() { | ||
33 | return List.of(); | ||
34 | } | ||
35 | |||
36 | @Override | ||
37 | public List<NodeVariable> getOutputVariables() { | ||
38 | return List.of(variable); | ||
39 | } | ||
40 | |||
41 | @Override | ||
42 | public BoundActionLiteral bindToModel(Model model) { | ||
43 | return ignoredTuple -> Tuple.of(nodeId); | ||
44 | } | ||
45 | } | ||
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/PartialClauseRewriter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/PartialClauseRewriter.java index dc508a7b..f7e86c44 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/PartialClauseRewriter.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/PartialClauseRewriter.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -53,38 +53,30 @@ class PartialClauseRewriter { | |||
53 | markAsDone(literal); | 53 | markAsDone(literal); |
54 | return; | 54 | return; |
55 | } | 55 | } |
56 | if (callLiteral instanceof CountLowerBoundLiteral countLowerBoundLiteral) { | 56 | switch (callLiteral) { |
57 | rewriteCountLowerBound(countLowerBoundLiteral); | 57 | case CountLowerBoundLiteral countLowerBoundLiteral -> rewriteCountLowerBound(countLowerBoundLiteral); |
58 | return; | 58 | case CountUpperBoundLiteral countUpperBoundLiteral -> rewriteCountUpperBound(countUpperBoundLiteral); |
59 | } | 59 | case CountCandidateLowerBoundLiteral countCandidateLowerBoundLiteral -> |
60 | if (callLiteral instanceof CountUpperBoundLiteral countUpperBoundLiteral) { | 60 | rewriteCountCandidateLowerBound(countCandidateLowerBoundLiteral); |
61 | rewriteCountUpperBound(countUpperBoundLiteral); | 61 | case CountCandidateUpperBoundLiteral countCandidateUpperBoundLiteral -> |
62 | return; | 62 | rewriteCountCandidateUpperBound(countCandidateUpperBoundLiteral); |
63 | } | 63 | default -> { |
64 | if (callLiteral instanceof CountCandidateLowerBoundLiteral countCandidateLowerBoundLiteral) { | 64 | var target = callLiteral.getTarget(); |
65 | rewriteCountCandidateLowerBound(countCandidateLowerBoundLiteral); | 65 | switch (target) { |
66 | return; | 66 | case Dnf dnf -> rewriteRecursively(callLiteral, dnf); |
67 | } | 67 | case ModalConstraint modalConstraint -> { |
68 | if (callLiteral instanceof CountCandidateUpperBoundLiteral countCandidateUpperBoundLiteral) { | 68 | var modality = modalConstraint.modality(); |
69 | rewriteCountCandidateUpperBound(countCandidateUpperBoundLiteral); | 69 | var concreteness = modalConstraint.concreteness(); |
70 | return; | 70 | var constraint = modalConstraint.constraint(); |
71 | } | 71 | switch (constraint) { |
72 | var target = callLiteral.getTarget(); | 72 | case Dnf dnf -> rewriteRecursively(callLiteral, modality, concreteness, dnf); |
73 | if (target instanceof Dnf dnf) { | 73 | case PartialRelation partialRelation -> rewrite(callLiteral, modality, concreteness, partialRelation); |
74 | rewriteRecursively(callLiteral, dnf); | 74 | default -> throw new IllegalArgumentException("Cannot interpret modal constraint: " + modalConstraint); |
75 | } else if (target instanceof ModalConstraint modalConstraint) { | 75 | } |
76 | var modality = modalConstraint.modality(); | ||
77 | var concreteness = modalConstraint.concreteness(); | ||
78 | var constraint = modalConstraint.constraint(); | ||
79 | if (constraint instanceof Dnf dnf) { | ||
80 | rewriteRecursively(callLiteral, modality, concreteness, dnf); | ||
81 | } else if (constraint instanceof PartialRelation partialRelation) { | ||
82 | rewrite(callLiteral, modality, concreteness, partialRelation); | ||
83 | } else { | ||
84 | throw new IllegalArgumentException("Cannot interpret modal constraint: " + modalConstraint); | ||
85 | } | 76 | } |
86 | } else { | 77 | default -> markAsDone(literal); |
87 | markAsDone(literal); | 78 | } |
79 | } | ||
88 | } | 80 | } |
89 | } | 81 | } |
90 | 82 | ||
@@ -111,11 +103,11 @@ class PartialClauseRewriter { | |||
111 | .call(CallPolarity.POSITIVE, countResult.rewrittenArguments())); | 103 | .call(CallPolarity.POSITIVE, countResult.rewrittenArguments())); |
112 | switch (variablesToCount.size()) { | 104 | switch (variablesToCount.size()) { |
113 | case 0 -> literals.add(outputVariable.assign(new ConstantTerm<>(type, one))); | 105 | case 0 -> literals.add(outputVariable.assign(new ConstantTerm<>(type, one))); |
114 | case 1 -> literals.add(view.call(variablesToCount.get(0), | 106 | case 1 -> literals.add(view.call(variablesToCount.getFirst(), |
115 | outputVariable)); | 107 | outputVariable)); |
116 | default -> { | 108 | default -> { |
117 | var firstCount = Variable.of(type); | 109 | var firstCount = Variable.of(type); |
118 | literals.add(view.call(variablesToCount.get(0), firstCount)); | 110 | literals.add(view.call(variablesToCount.getFirst(), firstCount)); |
119 | int length = variablesToCount.size(); | 111 | int length = variablesToCount.size(); |
120 | Term<T> accumulator = firstCount; | 112 | Term<T> accumulator = firstCount; |
121 | for (int i = 1; i < length; i++) { | 113 | for (int i = 1; i < length; i++) { |
@@ -137,11 +129,11 @@ class PartialClauseRewriter { | |||
137 | } | 129 | } |
138 | 130 | ||
139 | private void rewriteCountCandidateLowerBound(CountCandidateLowerBoundLiteral literal) { | 131 | private void rewriteCountCandidateLowerBound(CountCandidateLowerBoundLiteral literal) { |
140 | rewriteCandidateCount(literal, "lower", Modality.MAY); | 132 | rewriteCandidateCount(literal, "lower", Modality.MUST); |
141 | } | 133 | } |
142 | 134 | ||
143 | private void rewriteCountCandidateUpperBound(CountCandidateUpperBoundLiteral literal) { | 135 | private void rewriteCountCandidateUpperBound(CountCandidateUpperBoundLiteral literal) { |
144 | rewriteCandidateCount(literal, "upper", Modality.MUST); | 136 | rewriteCandidateCount(literal, "upper", Modality.MAY); |
145 | } | 137 | } |
146 | 138 | ||
147 | private void rewriteCandidateCount(AbstractCountLiteral<Integer> literal, String name, Modality modality) { | 139 | private void rewriteCandidateCount(AbstractCountLiteral<Integer> literal, String name, Modality modality) { |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialNeighbourhoodCalculator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialNeighbourhoodCalculator.java new file mode 100644 index 00000000..859cf7c1 --- /dev/null +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialNeighbourhoodCalculator.java | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.reasoning.interpretation; | ||
7 | |||
8 | import org.eclipse.collections.api.set.primitive.IntSet; | ||
9 | import tools.refinery.store.map.Cursor; | ||
10 | import tools.refinery.store.model.Model; | ||
11 | import tools.refinery.store.query.ModelQueryAdapter; | ||
12 | import tools.refinery.store.reasoning.ReasoningAdapter; | ||
13 | import tools.refinery.store.reasoning.literal.Concreteness; | ||
14 | import tools.refinery.store.reasoning.representation.PartialSymbol; | ||
15 | import tools.refinery.store.statecoding.StateCodeCalculatorFactory; | ||
16 | import tools.refinery.store.statecoding.StateCoderResult; | ||
17 | import tools.refinery.store.statecoding.neighbourhood.AbstractNeighbourhoodCalculator; | ||
18 | import tools.refinery.store.tuple.Tuple; | ||
19 | |||
20 | import java.util.List; | ||
21 | |||
22 | public class PartialNeighbourhoodCalculator extends AbstractNeighbourhoodCalculator<PartialInterpretation<?, ?>> { | ||
23 | private final ModelQueryAdapter queryAdapter; | ||
24 | |||
25 | public static final StateCodeCalculatorFactory FACTORY = | ||
26 | (model, ignoredInterpretations, individuals) -> new PartialNeighbourhoodCalculator(model, individuals); | ||
27 | |||
28 | protected PartialNeighbourhoodCalculator(Model model, IntSet individuals) { | ||
29 | super(model, individuals); | ||
30 | queryAdapter = model.getAdapter(ModelQueryAdapter.class); | ||
31 | } | ||
32 | |||
33 | @Override | ||
34 | public StateCoderResult calculateCodes() { | ||
35 | queryAdapter.flushChanges(); | ||
36 | return super.calculateCodes(); | ||
37 | } | ||
38 | |||
39 | @Override | ||
40 | protected List<PartialInterpretation<?, ?>> getInterpretations() { | ||
41 | var adapter = getModel().getAdapter(ReasoningAdapter.class); | ||
42 | var partialSymbols = adapter.getStoreAdapter().getPartialSymbols(); | ||
43 | return partialSymbols.stream() | ||
44 | .<PartialInterpretation<?, ?>>map(partialSymbol -> | ||
45 | adapter.getPartialInterpretation(Concreteness.PARTIAL, (PartialSymbol<?, ?>) partialSymbol)) | ||
46 | .toList(); | ||
47 | } | ||
48 | |||
49 | @Override | ||
50 | protected int getArity(PartialInterpretation<?, ?> interpretation) { | ||
51 | return interpretation.getPartialSymbol().arity(); | ||
52 | } | ||
53 | |||
54 | @Override | ||
55 | protected Object getNullValue(PartialInterpretation<?, ?> interpretation) { | ||
56 | return interpretation.get(Tuple.of()); | ||
57 | } | ||
58 | |||
59 | @Override | ||
60 | protected Cursor<Tuple, ?> getCursor(PartialInterpretation<?, ?> interpretation) { | ||
61 | return interpretation.getAll(); | ||
62 | } | ||
63 | } | ||
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java index 75fb3397..a9031f4c 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -52,6 +52,8 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru | |||
52 | private RelationalQuery must; | 52 | private RelationalQuery must; |
53 | private RelationalQuery candidateMay; | 53 | private RelationalQuery candidateMay; |
54 | private RelationalQuery candidateMust; | 54 | private RelationalQuery candidateMust; |
55 | private RelationalQuery candidateMayMerged; | ||
56 | private RelationalQuery candidateMustMerged; | ||
55 | private RoundingMode roundingMode; | 57 | private RoundingMode roundingMode; |
56 | 58 | ||
57 | private PartialRelationTranslator(PartialRelation partialRelation) { | 59 | private PartialRelationTranslator(PartialRelation partialRelation) { |
@@ -202,6 +204,7 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru | |||
202 | liftQueries(storeBuilder); | 204 | liftQueries(storeBuilder); |
203 | createFallbackQueriesFromSymbol(); | 205 | createFallbackQueriesFromSymbol(); |
204 | setFallbackCandidateQueries(); | 206 | setFallbackCandidateQueries(); |
207 | mergeCandidateQueries(); | ||
205 | createFallbackRewriter(); | 208 | createFallbackRewriter(); |
206 | createFallbackInterpretation(); | 209 | createFallbackInterpretation(); |
207 | createFallbackRefiner(); | 210 | createFallbackRefiner(); |
@@ -272,9 +275,11 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru | |||
272 | } | 275 | } |
273 | if (candidateMay == null) { | 276 | if (candidateMay == null) { |
274 | candidateMay = queryBasedRelationRewriter.getCandidateMay(); | 277 | candidateMay = queryBasedRelationRewriter.getCandidateMay(); |
278 | candidateMayMerged = candidateMay; | ||
275 | } | 279 | } |
276 | if (candidateMust == null) { | 280 | if (candidateMust == null) { |
277 | candidateMust = queryBasedRelationRewriter.getCandidateMust(); | 281 | candidateMust = queryBasedRelationRewriter.getCandidateMust(); |
282 | candidateMustMerged = candidateMust; | ||
278 | } | 283 | } |
279 | } | 284 | } |
280 | 285 | ||
@@ -290,7 +295,7 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru | |||
290 | candidateMay = reasoningBuilder.lift(Modality.MAY, Concreteness.CANDIDATE, query); | 295 | candidateMay = reasoningBuilder.lift(Modality.MAY, Concreteness.CANDIDATE, query); |
291 | } | 296 | } |
292 | if (candidateMust == null) { | 297 | if (candidateMust == null) { |
293 | candidateMust = reasoningBuilder.lift(Modality.MAY, Concreteness.CANDIDATE, query); | 298 | candidateMust = reasoningBuilder.lift(Modality.MUST, Concreteness.CANDIDATE, query); |
294 | } | 299 | } |
295 | } | 300 | } |
296 | 301 | ||
@@ -309,15 +314,31 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru | |||
309 | } | 314 | } |
310 | } | 315 | } |
311 | 316 | ||
317 | private void mergeCandidateQueries() { | ||
318 | if (candidateMayMerged == null) { | ||
319 | candidateMayMerged = createQuery("candidateMayMerged", (builder, arguments) -> builder | ||
320 | .clause( | ||
321 | candidateMay.call(arguments), | ||
322 | may.call(arguments) | ||
323 | )); | ||
324 | } | ||
325 | if (candidateMustMerged == null) { | ||
326 | candidateMustMerged = createQuery("candidateMustMerged", (builder, arguments) -> builder | ||
327 | .clause(candidateMust.call(arguments)) | ||
328 | .clause(must.call(arguments))); | ||
329 | } | ||
330 | } | ||
331 | |||
312 | private void createFallbackRewriter() { | 332 | private void createFallbackRewriter() { |
313 | if (rewriter == null) { | 333 | if (rewriter == null) { |
314 | rewriter = new QueryBasedRelationRewriter(may, must, candidateMay, candidateMust); | 334 | rewriter = new QueryBasedRelationRewriter(may, must, candidateMayMerged, candidateMustMerged); |
315 | } | 335 | } |
316 | } | 336 | } |
317 | 337 | ||
318 | private void createFallbackInterpretation() { | 338 | private void createFallbackInterpretation() { |
319 | if (interpretationFactory == null) { | 339 | if (interpretationFactory == null) { |
320 | interpretationFactory = new QueryBasedRelationInterpretationFactory(may, must, candidateMay, candidateMust); | 340 | interpretationFactory = new QueryBasedRelationInterpretationFactory(may, must, candidateMayMerged, |
341 | candidateMustMerged); | ||
321 | } | 342 | } |
322 | } | 343 | } |
323 | 344 | ||
@@ -354,14 +375,6 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru | |||
354 | .clause( | 375 | .clause( |
355 | PartialLiterals.candidateMust(partialRelation.call(parameters)), | 376 | PartialLiterals.candidateMust(partialRelation.call(parameters)), |
356 | not(PartialLiterals.candidateMay(partialRelation.call(parameters))) | 377 | not(PartialLiterals.candidateMay(partialRelation.call(parameters))) |
357 | ) | ||
358 | .clause( | ||
359 | PartialLiterals.candidateMust(partialRelation.call(parameters)), | ||
360 | not(PartialLiterals.may(partialRelation.call(parameters))) | ||
361 | ) | ||
362 | .clause( | ||
363 | PartialLiterals.must(partialRelation.call(parameters)), | ||
364 | not(PartialLiterals.candidateMay(partialRelation.call(parameters))) | ||
365 | )); | 378 | )); |
366 | var reject = createQuery("reject", (builder, parameters) -> { | 379 | var reject = createQuery("reject", (builder, parameters) -> { |
367 | var literals = new ArrayList<Literal>(parameters.length + 1); | 380 | var literals = new ArrayList<Literal>(parameters.length + 1); |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/CrossReferenceUtils.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/CrossReferenceUtils.java index 26449df5..56c9d682 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/CrossReferenceUtils.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/CrossReferenceUtils.java | |||
@@ -1,16 +1,18 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
6 | package tools.refinery.store.reasoning.translator.crossreference; | 6 | package tools.refinery.store.reasoning.translator.crossreference; |
7 | 7 | ||
8 | import tools.refinery.logic.dnf.Query; | 8 | import tools.refinery.logic.dnf.Query; |
9 | import tools.refinery.logic.dnf.QueryBuilder; | ||
9 | import tools.refinery.logic.dnf.RelationalQuery; | 10 | import tools.refinery.logic.dnf.RelationalQuery; |
10 | import tools.refinery.logic.literal.Literal; | 11 | import tools.refinery.logic.literal.Literal; |
11 | import tools.refinery.logic.term.NodeVariable; | 12 | import tools.refinery.logic.term.NodeVariable; |
12 | import tools.refinery.logic.term.Variable; | 13 | import tools.refinery.logic.term.Variable; |
13 | import tools.refinery.logic.term.uppercardinality.FiniteUpperCardinality; | 14 | import tools.refinery.logic.term.uppercardinality.FiniteUpperCardinality; |
15 | import tools.refinery.store.reasoning.literal.CountCandidateLowerBoundLiteral; | ||
14 | import tools.refinery.store.reasoning.literal.CountLowerBoundLiteral; | 16 | import tools.refinery.store.reasoning.literal.CountLowerBoundLiteral; |
15 | import tools.refinery.store.reasoning.representation.PartialRelation; | 17 | import tools.refinery.store.reasoning.representation.PartialRelation; |
16 | import tools.refinery.store.reasoning.translator.multiplicity.Multiplicity; | 18 | import tools.refinery.store.reasoning.translator.multiplicity.Multiplicity; |
@@ -21,6 +23,7 @@ import java.util.List; | |||
21 | import static tools.refinery.logic.literal.Literals.check; | 23 | import static tools.refinery.logic.literal.Literals.check; |
22 | import static tools.refinery.logic.term.int_.IntTerms.constant; | 24 | import static tools.refinery.logic.term.int_.IntTerms.constant; |
23 | import static tools.refinery.logic.term.int_.IntTerms.less; | 25 | import static tools.refinery.logic.term.int_.IntTerms.less; |
26 | import static tools.refinery.store.reasoning.literal.PartialLiterals.candidateMay; | ||
24 | import static tools.refinery.store.reasoning.literal.PartialLiterals.may; | 27 | import static tools.refinery.store.reasoning.literal.PartialLiterals.may; |
25 | 28 | ||
26 | class CrossReferenceUtils { | 29 | class CrossReferenceUtils { |
@@ -30,6 +33,34 @@ class CrossReferenceUtils { | |||
30 | 33 | ||
31 | public static RelationalQuery createMayHelper(PartialRelation linkType, PartialRelation type, | 34 | public static RelationalQuery createMayHelper(PartialRelation linkType, PartialRelation type, |
32 | Multiplicity multiplicity, boolean inverse) { | 35 | Multiplicity multiplicity, boolean inverse) { |
36 | var preparedBuilder = prepareBuilder(linkType, inverse); | ||
37 | var literals = new ArrayList<Literal>(); | ||
38 | literals.add(may(type.call(preparedBuilder.variable()))); | ||
39 | if (multiplicity.multiplicity().upperBound() instanceof FiniteUpperCardinality(var finiteUpperBound)) { | ||
40 | var existingLinks = Variable.of("existingLinks", Integer.class); | ||
41 | literals.add(new CountLowerBoundLiteral(existingLinks, linkType, preparedBuilder.arguments())); | ||
42 | literals.add(check(less(existingLinks, constant(finiteUpperBound)))); | ||
43 | } | ||
44 | return preparedBuilder.builder().clause(literals).build(); | ||
45 | } | ||
46 | |||
47 | public static RelationalQuery createCandidateMayHelper(PartialRelation linkType, PartialRelation type, | ||
48 | Multiplicity multiplicity, boolean inverse) { | ||
49 | var preparedBuilder = prepareBuilder(linkType, inverse); | ||
50 | var literals = new ArrayList<Literal>(); | ||
51 | literals.add(candidateMay(type.call(preparedBuilder.variable()))); | ||
52 | if (multiplicity.multiplicity().upperBound() instanceof FiniteUpperCardinality(var finiteUpperBound)) { | ||
53 | var existingLinks = Variable.of("existingLinks", Integer.class); | ||
54 | literals.add(new CountCandidateLowerBoundLiteral(existingLinks, linkType, preparedBuilder.arguments())); | ||
55 | literals.add(check(less(existingLinks, constant(finiteUpperBound)))); | ||
56 | } | ||
57 | return preparedBuilder.builder().clause(literals).build(); | ||
58 | } | ||
59 | |||
60 | private record PreparedBuilder(QueryBuilder builder, NodeVariable variable, List<Variable> arguments) { | ||
61 | } | ||
62 | |||
63 | private static PreparedBuilder prepareBuilder(PartialRelation linkType, boolean inverse) { | ||
33 | String name; | 64 | String name; |
34 | NodeVariable variable; | 65 | NodeVariable variable; |
35 | List<Variable> arguments; | 66 | List<Variable> arguments; |
@@ -44,14 +75,6 @@ class CrossReferenceUtils { | |||
44 | } | 75 | } |
45 | var builder = Query.builder(linkType.name() + "#mayNew" + name); | 76 | var builder = Query.builder(linkType.name() + "#mayNew" + name); |
46 | builder.parameter(variable); | 77 | builder.parameter(variable); |
47 | var literals = new ArrayList<Literal>(); | 78 | return new PreparedBuilder(builder, variable, arguments); |
48 | literals.add(may(type.call(variable))); | ||
49 | if (multiplicity.multiplicity().upperBound() instanceof FiniteUpperCardinality finiteUpperCardinality) { | ||
50 | var existingLinks = Variable.of("existingLinks", Integer.class); | ||
51 | literals.add(new CountLowerBoundLiteral(existingLinks, linkType, arguments)); | ||
52 | literals.add(check(less(existingLinks, constant(finiteUpperCardinality.finiteUpperBound())))); | ||
53 | } | ||
54 | builder.clause(literals); | ||
55 | return builder.build(); | ||
56 | } | 79 | } |
57 | } | 80 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceInfo.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceInfo.java index 982f835f..ef5bcebb 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceInfo.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceInfo.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -11,7 +11,7 @@ import tools.refinery.logic.term.truthvalue.TruthValue; | |||
11 | 11 | ||
12 | public record DirectedCrossReferenceInfo(PartialRelation sourceType, Multiplicity sourceMultiplicity, | 12 | public record DirectedCrossReferenceInfo(PartialRelation sourceType, Multiplicity sourceMultiplicity, |
13 | PartialRelation targetType, Multiplicity targetMultiplicity, | 13 | PartialRelation targetType, Multiplicity targetMultiplicity, |
14 | TruthValue defaultValue) { | 14 | TruthValue defaultValue, boolean partial) { |
15 | public boolean isConstrained() { | 15 | public boolean isConstrained() { |
16 | return sourceMultiplicity.isConstrained() || targetMultiplicity.isConstrained(); | 16 | return sourceMultiplicity.isConstrained() || targetMultiplicity.isConstrained(); |
17 | } | 17 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceTranslator.java index 5bf1f5ab..1985a43f 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceTranslator.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/DirectedCrossReferenceTranslator.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -18,6 +18,7 @@ import tools.refinery.store.reasoning.literal.Concreteness; | |||
18 | import tools.refinery.store.reasoning.literal.Modality; | 18 | import tools.refinery.store.reasoning.literal.Modality; |
19 | import tools.refinery.store.reasoning.representation.PartialRelation; | 19 | import tools.refinery.store.reasoning.representation.PartialRelation; |
20 | import tools.refinery.store.reasoning.translator.PartialRelationTranslator; | 20 | import tools.refinery.store.reasoning.translator.PartialRelationTranslator; |
21 | import tools.refinery.store.reasoning.translator.RoundingMode; | ||
21 | import tools.refinery.store.reasoning.translator.TranslationException; | 22 | import tools.refinery.store.reasoning.translator.TranslationException; |
22 | import tools.refinery.store.reasoning.translator.multiplicity.InvalidMultiplicityErrorTranslator; | 23 | import tools.refinery.store.reasoning.translator.multiplicity.InvalidMultiplicityErrorTranslator; |
23 | import tools.refinery.store.reasoning.translator.multiplicity.Multiplicity; | 24 | import tools.refinery.store.reasoning.translator.multiplicity.Multiplicity; |
@@ -42,27 +43,77 @@ public class DirectedCrossReferenceTranslator implements ModelStoreConfiguration | |||
42 | 43 | ||
43 | @Override | 44 | @Override |
44 | public void apply(ModelStoreBuilder storeBuilder) { | 45 | public void apply(ModelStoreBuilder storeBuilder) { |
45 | var name = linkType.name(); | ||
46 | var sourceType = info.sourceType(); | 46 | var sourceType = info.sourceType(); |
47 | var targetType = info.targetType(); | 47 | var targetType = info.targetType(); |
48 | var mayNewSource = createMayHelper(sourceType, info.sourceMultiplicity(), false); | ||
49 | var mayNewTarget = createMayHelper(targetType, info.targetMultiplicity(), true); | ||
50 | var mayName = DnfLifter.decorateName(name, Modality.MAY, Concreteness.PARTIAL); | ||
51 | |||
52 | var defaultValue = info.defaultValue(); | 48 | var defaultValue = info.defaultValue(); |
53 | if (defaultValue.must()) { | 49 | if (defaultValue.must()) { |
54 | throw new TranslationException(linkType, "Unsupported default value %s for directed cross references %s" | 50 | throw new TranslationException(linkType, "Unsupported default value %s for directed cross references %s" |
55 | .formatted(defaultValue, linkType)); | 51 | .formatted(defaultValue, linkType)); |
56 | } | 52 | } |
57 | |||
58 | var translator = PartialRelationTranslator.of(linkType); | 53 | var translator = PartialRelationTranslator.of(linkType); |
59 | translator.symbol(symbol); | 54 | translator.symbol(symbol); |
60 | if (defaultValue.may()) { | 55 | if (defaultValue.may()) { |
61 | var forbiddenView = new ForbiddenView(symbol); | 56 | configureWithDefaultUnknown(translator); |
62 | translator.may(Query.of(mayName, (builder, source, target) -> { | 57 | } else { |
58 | configureWithDefaultFalse(storeBuilder); | ||
59 | } | ||
60 | translator.refiner(DirectedCrossReferenceRefiner.of(symbol, sourceType, targetType)); | ||
61 | translator.initializer(new DirectedCrossReferenceInitializer(linkType, sourceType, targetType, symbol)); | ||
62 | if (info.partial()) { | ||
63 | translator.roundingMode(RoundingMode.NONE); | ||
64 | } else { | ||
65 | translator.decision(Rule.of(linkType.name(), (builder, source, target) -> builder | ||
66 | .clause( | ||
67 | may(linkType.call(source, target)), | ||
68 | not(candidateMust(linkType.call(source, target))), | ||
69 | not(MULTI_VIEW.call(source)), | ||
70 | not(MULTI_VIEW.call(target)) | ||
71 | ) | ||
72 | .action( | ||
73 | add(linkType, source, target) | ||
74 | ))); | ||
75 | } | ||
76 | storeBuilder.with(translator); | ||
77 | storeBuilder.with(new InvalidMultiplicityErrorTranslator(sourceType, linkType, false, | ||
78 | info.sourceMultiplicity())); | ||
79 | storeBuilder.with(new InvalidMultiplicityErrorTranslator(targetType, linkType, true, | ||
80 | info.targetMultiplicity())); | ||
81 | } | ||
82 | |||
83 | private void configureWithDefaultUnknown(PartialRelationTranslator translator) { | ||
84 | var name = linkType.name(); | ||
85 | var sourceType = info.sourceType(); | ||
86 | var targetType = info.targetType(); | ||
87 | var mayNewSource = createMayHelper(sourceType, info.sourceMultiplicity(), false); | ||
88 | var mayNewTarget = createMayHelper(targetType, info.targetMultiplicity(), true); | ||
89 | var mayName = DnfLifter.decorateName(name, Modality.MAY, Concreteness.PARTIAL); | ||
90 | var forbiddenView = new ForbiddenView(symbol); | ||
91 | translator.may(Query.of(mayName, (builder, source, target) -> { | ||
92 | builder.clause( | ||
93 | mayNewSource.call(source), | ||
94 | mayNewTarget.call(target), | ||
95 | not(forbiddenView.call(source, target)) | ||
96 | ); | ||
97 | if (info.isConstrained()) { | ||
98 | // Violation of monotonicity: | ||
99 | // Edges violating upper multiplicity will not be marked as {@code ERROR}, but the | ||
100 | // corresponding error pattern will already mark the node as invalid. | ||
101 | builder.clause( | ||
102 | must(linkType.call(source, target)), | ||
103 | not(forbiddenView.call(source, target)), | ||
104 | may(sourceType.call(source)), | ||
105 | may(targetType.call(target)) | ||
106 | ); | ||
107 | } | ||
108 | })); | ||
109 | if (info.partial()) { | ||
110 | var candidateMayNewSource = createCandidateMayHelper(sourceType, info.sourceMultiplicity(), false); | ||
111 | var candidateMayNewTarget = createCandidateMayHelper(targetType, info.targetMultiplicity(), true); | ||
112 | var candidateMayName = DnfLifter.decorateName(name, Modality.MAY, Concreteness.CANDIDATE); | ||
113 | translator.candidateMay(Query.of(candidateMayName, (builder, source, target) -> { | ||
63 | builder.clause( | 114 | builder.clause( |
64 | mayNewSource.call(source), | 115 | candidateMayNewSource.call(source), |
65 | mayNewTarget.call(target), | 116 | candidateMayNewTarget.call(target), |
66 | not(forbiddenView.call(source, target)) | 117 | not(forbiddenView.call(source, target)) |
67 | ); | 118 | ); |
68 | if (info.isConstrained()) { | 119 | if (info.isConstrained()) { |
@@ -70,63 +121,56 @@ public class DirectedCrossReferenceTranslator implements ModelStoreConfiguration | |||
70 | // Edges violating upper multiplicity will not be marked as {@code ERROR}, but the | 121 | // Edges violating upper multiplicity will not be marked as {@code ERROR}, but the |
71 | // corresponding error pattern will already mark the node as invalid. | 122 | // corresponding error pattern will already mark the node as invalid. |
72 | builder.clause( | 123 | builder.clause( |
73 | must(linkType.call(source, target)), | 124 | candidateMust(linkType.call(source, target)), |
74 | not(forbiddenView.call(source, target)), | 125 | not(forbiddenView.call(source, target)), |
75 | may(sourceType.call(source)), | 126 | candidateMay(sourceType.call(source)), |
76 | may(targetType.call(target)) | 127 | candidateMay(targetType.call(target)) |
77 | ); | 128 | ); |
78 | } | 129 | } |
79 | })); | 130 | })); |
80 | } else { | 131 | } |
81 | var propagationBuilder = storeBuilder.getAdapter(PropagationBuilder.class); | 132 | } |
82 | propagationBuilder.rule(Rule.of(name + "#invalidLink", (builder, p1, p2) -> { | 133 | |
134 | private RelationalQuery createMayHelper(PartialRelation type, Multiplicity multiplicity, boolean inverse) { | ||
135 | return CrossReferenceUtils.createMayHelper(linkType, type, multiplicity, inverse); | ||
136 | } | ||
137 | |||
138 | private RelationalQuery createCandidateMayHelper(PartialRelation type, Multiplicity multiplicity, boolean inverse) { | ||
139 | return CrossReferenceUtils.createCandidateMayHelper(linkType, type, multiplicity, inverse); | ||
140 | } | ||
141 | |||
142 | private void configureWithDefaultFalse(ModelStoreBuilder storeBuilder) { | ||
143 | var name = linkType.name(); | ||
144 | var sourceType = info.sourceType(); | ||
145 | var targetType = info.targetType(); | ||
146 | var mayNewSource = createMayHelper(sourceType, info.sourceMultiplicity(), false); | ||
147 | var mayNewTarget = createMayHelper(targetType, info.targetMultiplicity(), true); | ||
148 | var propagationBuilder = storeBuilder.getAdapter(PropagationBuilder.class); | ||
149 | propagationBuilder.rule(Rule.of(name + "#invalidLink", (builder, p1, p2) -> { | ||
150 | builder.clause( | ||
151 | may(linkType.call(p1, p2)), | ||
152 | not(may(sourceType.call(p1))) | ||
153 | ); | ||
154 | builder.clause( | ||
155 | may(linkType.call(p1, p2)), | ||
156 | not(may(targetType.call(p2))) | ||
157 | ); | ||
158 | if (info.isConstrained()) { | ||
83 | builder.clause( | 159 | builder.clause( |
84 | may(linkType.call(p1, p2)), | 160 | may(linkType.call(p1, p2)), |
85 | not(may(sourceType.call(p1))) | 161 | not(must(linkType.call(p1, p2))), |
162 | not(mayNewSource.call(p1)) | ||
86 | ); | 163 | ); |
87 | builder.clause( | 164 | builder.clause( |
88 | may(linkType.call(p1, p2)), | 165 | may(linkType.call(p1, p2)), |
89 | not(may(targetType.call(p2))) | 166 | not(must(linkType.call(p1, p2))), |
167 | not(mayNewTarget.call(p2)) | ||
90 | ); | 168 | ); |
91 | if (info.isConstrained()) { | 169 | } |
92 | builder.clause( | 170 | builder.action( |
93 | may(linkType.call(p1, p2)), | 171 | merge(linkType, TruthValue.FALSE, p1, p2) |
94 | not(must(linkType.call(p1, p2))), | 172 | ); |
95 | not(mayNewSource.call(p1)) | 173 | })); |
96 | ); | ||
97 | builder.clause( | ||
98 | may(linkType.call(p1, p2)), | ||
99 | not(must(linkType.call(p1, p2))), | ||
100 | not(mayNewTarget.call(p2)) | ||
101 | ); | ||
102 | } | ||
103 | builder.action( | ||
104 | merge(linkType, TruthValue.FALSE, p1, p2) | ||
105 | ); | ||
106 | })); | ||
107 | } | ||
108 | translator.refiner(DirectedCrossReferenceRefiner.of(symbol, sourceType, targetType)); | ||
109 | translator.initializer(new DirectedCrossReferenceInitializer(linkType, sourceType, targetType, symbol)); | ||
110 | translator.decision(Rule.of(linkType.name(), (builder, source, target) -> builder | ||
111 | .clause( | ||
112 | may(linkType.call(source, target)), | ||
113 | not(candidateMust(linkType.call(source, target))), | ||
114 | not(MULTI_VIEW.call(source)), | ||
115 | not(MULTI_VIEW.call(target)) | ||
116 | ) | ||
117 | .action( | ||
118 | add(linkType, source, target) | ||
119 | ))); | ||
120 | storeBuilder.with(translator); | ||
121 | |||
122 | storeBuilder.with(new InvalidMultiplicityErrorTranslator(sourceType, linkType, false, | ||
123 | info.sourceMultiplicity())); | ||
124 | |||
125 | storeBuilder.with(new InvalidMultiplicityErrorTranslator(targetType, linkType, true, | ||
126 | info.targetMultiplicity())); | ||
127 | } | 174 | } |
128 | 175 | ||
129 | private RelationalQuery createMayHelper(PartialRelation type, Multiplicity multiplicity, boolean inverse) { | ||
130 | return CrossReferenceUtils.createMayHelper(linkType, type, multiplicity, inverse); | ||
131 | } | ||
132 | } | 176 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInfo.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInfo.java index 560eb04a..78b9cd86 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInfo.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInfo.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -9,7 +9,8 @@ import tools.refinery.store.reasoning.representation.PartialRelation; | |||
9 | import tools.refinery.store.reasoning.translator.multiplicity.Multiplicity; | 9 | import tools.refinery.store.reasoning.translator.multiplicity.Multiplicity; |
10 | import tools.refinery.logic.term.truthvalue.TruthValue; | 10 | import tools.refinery.logic.term.truthvalue.TruthValue; |
11 | 11 | ||
12 | public record UndirectedCrossReferenceInfo(PartialRelation type, Multiplicity multiplicity, TruthValue defaultValue) { | 12 | public record UndirectedCrossReferenceInfo(PartialRelation type, Multiplicity multiplicity, TruthValue defaultValue, |
13 | boolean partial) { | ||
13 | public boolean isConstrained() { | 14 | public boolean isConstrained() { |
14 | return multiplicity.isConstrained(); | 15 | return multiplicity.isConstrained(); |
15 | } | 16 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceTranslator.java index 97c0b800..af0ddd2e 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceTranslator.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceTranslator.java | |||
@@ -1,25 +1,26 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
6 | package tools.refinery.store.reasoning.translator.crossreference; | 6 | package tools.refinery.store.reasoning.translator.crossreference; |
7 | 7 | ||
8 | import tools.refinery.logic.dnf.Query; | ||
9 | import tools.refinery.logic.term.truthvalue.TruthValue; | ||
8 | import tools.refinery.store.dse.propagation.PropagationBuilder; | 10 | import tools.refinery.store.dse.propagation.PropagationBuilder; |
9 | import tools.refinery.store.dse.transition.Rule; | 11 | import tools.refinery.store.dse.transition.Rule; |
10 | import tools.refinery.store.model.ModelStoreBuilder; | 12 | import tools.refinery.store.model.ModelStoreBuilder; |
11 | import tools.refinery.store.model.ModelStoreConfiguration; | 13 | import tools.refinery.store.model.ModelStoreConfiguration; |
12 | import tools.refinery.logic.dnf.Query; | ||
13 | import tools.refinery.store.query.view.ForbiddenView; | 14 | import tools.refinery.store.query.view.ForbiddenView; |
14 | import tools.refinery.store.reasoning.lifting.DnfLifter; | 15 | import tools.refinery.store.reasoning.lifting.DnfLifter; |
15 | import tools.refinery.store.reasoning.literal.Concreteness; | 16 | import tools.refinery.store.reasoning.literal.Concreteness; |
16 | import tools.refinery.store.reasoning.literal.Modality; | 17 | import tools.refinery.store.reasoning.literal.Modality; |
17 | import tools.refinery.store.reasoning.representation.PartialRelation; | 18 | import tools.refinery.store.reasoning.representation.PartialRelation; |
18 | import tools.refinery.store.reasoning.translator.PartialRelationTranslator; | 19 | import tools.refinery.store.reasoning.translator.PartialRelationTranslator; |
20 | import tools.refinery.store.reasoning.translator.RoundingMode; | ||
19 | import tools.refinery.store.reasoning.translator.TranslationException; | 21 | import tools.refinery.store.reasoning.translator.TranslationException; |
20 | import tools.refinery.store.reasoning.translator.multiplicity.InvalidMultiplicityErrorTranslator; | 22 | import tools.refinery.store.reasoning.translator.multiplicity.InvalidMultiplicityErrorTranslator; |
21 | import tools.refinery.store.representation.Symbol; | 23 | import tools.refinery.store.representation.Symbol; |
22 | import tools.refinery.logic.term.truthvalue.TruthValue; | ||
23 | 24 | ||
24 | import static tools.refinery.logic.literal.Literals.not; | 25 | import static tools.refinery.logic.literal.Literals.not; |
25 | import static tools.refinery.store.reasoning.actions.PartialActionLiterals.add; | 26 | import static tools.refinery.store.reasoning.actions.PartialActionLiterals.add; |
@@ -40,73 +41,106 @@ public class UndirectedCrossReferenceTranslator implements ModelStoreConfigurati | |||
40 | 41 | ||
41 | @Override | 42 | @Override |
42 | public void apply(ModelStoreBuilder storeBuilder) { | 43 | public void apply(ModelStoreBuilder storeBuilder) { |
43 | var name = linkType.name(); | ||
44 | var type = info.type(); | 44 | var type = info.type(); |
45 | var mayName = DnfLifter.decorateName(name, Modality.MAY, Concreteness.PARTIAL); | ||
46 | |||
47 | var defaultValue = info.defaultValue(); | 45 | var defaultValue = info.defaultValue(); |
48 | if (defaultValue.must()) { | 46 | if (defaultValue.must()) { |
49 | throw new TranslationException(linkType, "Unsupported default value %s for directed cross references %s" | 47 | throw new TranslationException(linkType, "Unsupported default value %s for directed cross references %s" |
50 | .formatted(defaultValue, linkType)); | 48 | .formatted(defaultValue, linkType)); |
51 | } | 49 | } |
52 | |||
53 | var mayNewSource = CrossReferenceUtils.createMayHelper(linkType, type, info.multiplicity(), false); | ||
54 | |||
55 | var translator = PartialRelationTranslator.of(linkType); | 50 | var translator = PartialRelationTranslator.of(linkType); |
56 | translator.symbol(symbol); | 51 | translator.symbol(symbol); |
57 | if (defaultValue.may()) { | 52 | if (defaultValue.may()) { |
58 | var forbiddenView = new ForbiddenView(symbol); | 53 | configureWithDefaultUnknown(translator); |
59 | translator.may(Query.of(mayName, (builder, source, target) -> { | 54 | } else { |
55 | configureWithDefaultFalse(storeBuilder); | ||
56 | } | ||
57 | translator.refiner(UndirectedCrossReferenceRefiner.of(symbol, type)); | ||
58 | translator.initializer(new UndirectedCrossReferenceInitializer(linkType, type, symbol)); | ||
59 | if (info.partial()) { | ||
60 | translator.roundingMode(RoundingMode.NONE); | ||
61 | } else { | ||
62 | translator.decision(Rule.of(linkType.name(), (builder, source, target) -> builder | ||
63 | .clause( | ||
64 | may(linkType.call(source, target)), | ||
65 | not(candidateMust(linkType.call(source, target))), | ||
66 | not(MULTI_VIEW.call(source)), | ||
67 | not(MULTI_VIEW.call(target)) | ||
68 | ) | ||
69 | .action( | ||
70 | add(linkType, source, target) | ||
71 | ))); | ||
72 | } | ||
73 | storeBuilder.with(translator); | ||
74 | storeBuilder.with(new InvalidMultiplicityErrorTranslator(type, linkType, false, info.multiplicity())); | ||
75 | } | ||
76 | |||
77 | private void configureWithDefaultUnknown(PartialRelationTranslator translator) { | ||
78 | var name = linkType.name(); | ||
79 | var type = info.type(); | ||
80 | var multiplicity = info.multiplicity(); | ||
81 | var mayName = DnfLifter.decorateName(name, Modality.MAY, Concreteness.PARTIAL); | ||
82 | var mayNewSource = CrossReferenceUtils.createMayHelper(linkType, type, multiplicity, false); | ||
83 | var forbiddenView = new ForbiddenView(symbol); | ||
84 | translator.may(Query.of(mayName, (builder, source, target) -> { | ||
85 | builder.clause( | ||
86 | mayNewSource.call(source), | ||
87 | mayNewSource.call(target), | ||
88 | not(forbiddenView.call(source, target)) | ||
89 | ); | ||
90 | if (info.isConstrained()) { | ||
91 | // Violation of monotonicity: | ||
92 | // Edges violating upper multiplicity will not be marked as {@code ERROR}, but the | ||
93 | // corresponding error pattern will already mark the node as invalid. | ||
94 | builder.clause( | ||
95 | must(linkType.call(source, target)), | ||
96 | not(forbiddenView.call(source, target)), | ||
97 | may(type.call(source)), | ||
98 | may(type.call(target)) | ||
99 | ); | ||
100 | } | ||
101 | })); | ||
102 | if (info.partial()) { | ||
103 | var candidateMayName = DnfLifter.decorateName(name, Modality.MAY, Concreteness.CANDIDATE); | ||
104 | var candidateMayNewSource = CrossReferenceUtils.createCandidateMayHelper(linkType, type, multiplicity, | ||
105 | false); | ||
106 | translator.candidateMay(Query.of(candidateMayName, (builder, source, target) -> { | ||
60 | builder.clause( | 107 | builder.clause( |
61 | mayNewSource.call(source), | 108 | candidateMayNewSource.call(source), |
62 | mayNewSource.call(target), | 109 | candidateMayNewSource.call(target), |
63 | not(forbiddenView.call(source, target)) | 110 | not(forbiddenView.call(source, target)) |
64 | ); | 111 | ); |
65 | if (info.isConstrained()) { | 112 | if (info.isConstrained()) { |
66 | // Violation of monotonicity: | ||
67 | // Edges violating upper multiplicity will not be marked as {@code ERROR}, but the | ||
68 | // corresponding error pattern will already mark the node as invalid. | ||
69 | builder.clause( | 113 | builder.clause( |
70 | must(linkType.call(source, target)), | 114 | candidateMust(linkType.call(source, target)), |
71 | not(forbiddenView.call(source, target)), | 115 | not(forbiddenView.call(source, target)), |
72 | may(type.call(source)), | 116 | candidateMay(type.call(source)), |
73 | may(type.call(target)) | 117 | candidateMay(type.call(target)) |
74 | ); | 118 | ); |
75 | } | 119 | } |
76 | })); | 120 | })); |
77 | } else { | 121 | } |
78 | var propagationBuilder = storeBuilder.getAdapter(PropagationBuilder.class); | 122 | } |
79 | propagationBuilder.rule(Rule.of(name + "#invalidLink", (builder, p1, p2) -> { | 123 | |
124 | private void configureWithDefaultFalse(ModelStoreBuilder storeBuilder) { | ||
125 | var name = linkType.name(); | ||
126 | var type = info.type(); | ||
127 | var mayNewSource = CrossReferenceUtils.createMayHelper(linkType, type, info.multiplicity(), false); | ||
128 | var propagationBuilder = storeBuilder.getAdapter(PropagationBuilder.class); | ||
129 | propagationBuilder.rule(Rule.of(name + "#invalidLink", (builder, p1, p2) -> { | ||
130 | builder.clause( | ||
131 | may(linkType.call(p1, p2)), | ||
132 | not(may(type.call(p1))) | ||
133 | ); | ||
134 | if (info.isConstrained()) { | ||
80 | builder.clause( | 135 | builder.clause( |
81 | may(linkType.call(p1, p2)), | 136 | may(linkType.call(p1, p2)), |
82 | not(may(type.call(p1))) | 137 | not(must(linkType.call(p1, p2))), |
83 | ); | 138 | not(mayNewSource.call(p1)) |
84 | if (info.isConstrained()) { | ||
85 | builder.clause( | ||
86 | may(linkType.call(p1, p2)), | ||
87 | not(must(linkType.call(p1, p2))), | ||
88 | not(mayNewSource.call(p1)) | ||
89 | ); | ||
90 | } | ||
91 | builder.action( | ||
92 | merge(linkType, TruthValue.FALSE, p1, p2) | ||
93 | ); | 139 | ); |
94 | })); | 140 | } |
95 | } | 141 | builder.action( |
96 | translator.refiner(UndirectedCrossReferenceRefiner.of(symbol, type)); | 142 | merge(linkType, TruthValue.FALSE, p1, p2) |
97 | translator.initializer(new UndirectedCrossReferenceInitializer(linkType, type, symbol)); | 143 | ); |
98 | translator.decision(Rule.of(linkType.name(), (builder, source, target) -> builder | 144 | })); |
99 | .clause( | ||
100 | may(linkType.call(source, target)), | ||
101 | not(candidateMust(linkType.call(source, target))), | ||
102 | not(MULTI_VIEW.call(source)), | ||
103 | not(MULTI_VIEW.call(target)) | ||
104 | ) | ||
105 | .action( | ||
106 | add(linkType, source, target) | ||
107 | ))); | ||
108 | storeBuilder.with(translator); | ||
109 | |||
110 | storeBuilder.with(new InvalidMultiplicityErrorTranslator(type, linkType, false, info.multiplicity())); | ||
111 | } | 145 | } |
112 | } | 146 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java index d1979b8c..94bf1c5d 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -143,7 +143,7 @@ public class MetamodelBuilder { | |||
143 | targetType, linkType, sourceType)); | 143 | targetType, linkType, sourceType)); |
144 | } | 144 | } |
145 | undirectedCrossReferences.put(linkType, new UndirectedCrossReferenceInfo(sourceType, | 145 | undirectedCrossReferences.put(linkType, new UndirectedCrossReferenceInfo(sourceType, |
146 | info.multiplicity(), defaultValue)); | 146 | info.multiplicity(), defaultValue, info.partial())); |
147 | return; | 147 | return; |
148 | } | 148 | } |
149 | oppositeReferences.put(opposite, linkType); | 149 | oppositeReferences.put(opposite, linkType); |
@@ -153,7 +153,7 @@ public class MetamodelBuilder { | |||
153 | return; | 153 | return; |
154 | } | 154 | } |
155 | directedCrossReferences.put(linkType, new DirectedCrossReferenceInfo(sourceType, info.multiplicity(), | 155 | directedCrossReferences.put(linkType, new DirectedCrossReferenceInfo(sourceType, info.multiplicity(), |
156 | targetType, targetMultiplicity, defaultValue)); | 156 | targetType, targetMultiplicity, defaultValue, info.partial())); |
157 | } | 157 | } |
158 | 158 | ||
159 | private void processContainmentInfo(PartialRelation linkType, ReferenceInfo info, | 159 | private void processContainmentInfo(PartialRelation linkType, ReferenceInfo info, |
@@ -197,5 +197,9 @@ public class MetamodelBuilder { | |||
197 | throw new TranslationException(opposite, "Opposite %s of containment %s cannot be containment" | 197 | throw new TranslationException(opposite, "Opposite %s of containment %s cannot be containment" |
198 | .formatted(opposite, linkType)); | 198 | .formatted(opposite, linkType)); |
199 | } | 199 | } |
200 | if (info.partial() != oppositeInfo.partial()) { | ||
201 | throw new TranslationException(opposite, "Either both %s and %s have to be partial or neither of them" | ||
202 | .formatted(opposite, linkType)); | ||
203 | } | ||
200 | } | 204 | } |
201 | } | 205 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfo.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfo.java index 47a2e95f..94050dc0 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfo.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfo.java | |||
@@ -10,7 +10,14 @@ import tools.refinery.store.reasoning.translator.multiplicity.Multiplicity; | |||
10 | import tools.refinery.logic.term.truthvalue.TruthValue; | 10 | import tools.refinery.logic.term.truthvalue.TruthValue; |
11 | 11 | ||
12 | public record ReferenceInfo(boolean containment, PartialRelation sourceType, Multiplicity multiplicity, | 12 | public record ReferenceInfo(boolean containment, PartialRelation sourceType, Multiplicity multiplicity, |
13 | PartialRelation targetType, PartialRelation opposite, TruthValue defaultValue) { | 13 | PartialRelation targetType, PartialRelation opposite, TruthValue defaultValue, |
14 | boolean partial) { | ||
15 | public ReferenceInfo { | ||
16 | if (containment && partial) { | ||
17 | throw new IllegalArgumentException("Containment references cannot be partial"); | ||
18 | } | ||
19 | } | ||
20 | |||
14 | public static ReferenceInfoBuilder builder() { | 21 | public static ReferenceInfoBuilder builder() { |
15 | return new ReferenceInfoBuilder(); | 22 | return new ReferenceInfoBuilder(); |
16 | } | 23 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfoBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfoBuilder.java index 39240d6b..90fb22b5 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfoBuilder.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/ReferenceInfoBuilder.java | |||
@@ -21,6 +21,7 @@ public final class ReferenceInfoBuilder { | |||
21 | private PartialRelation targetType; | 21 | private PartialRelation targetType; |
22 | private PartialRelation opposite; | 22 | private PartialRelation opposite; |
23 | private TruthValue defaultValue = TruthValue.UNKNOWN; | 23 | private TruthValue defaultValue = TruthValue.UNKNOWN; |
24 | private boolean partial; | ||
24 | 25 | ||
25 | ReferenceInfoBuilder() { | 26 | ReferenceInfoBuilder() { |
26 | } | 27 | } |
@@ -72,6 +73,11 @@ public final class ReferenceInfoBuilder { | |||
72 | return this; | 73 | return this; |
73 | } | 74 | } |
74 | 75 | ||
76 | public ReferenceInfoBuilder partial(boolean partial) { | ||
77 | this.partial = partial; | ||
78 | return this; | ||
79 | } | ||
80 | |||
75 | public ReferenceInfo build() { | 81 | public ReferenceInfo build() { |
76 | if (sourceType == null) { | 82 | if (sourceType == null) { |
77 | throw new IllegalStateException("Source type is required"); | 83 | throw new IllegalStateException("Source type is required"); |
@@ -79,6 +85,6 @@ public final class ReferenceInfoBuilder { | |||
79 | if (targetType == null) { | 85 | if (targetType == null) { |
80 | throw new IllegalStateException("Target type is required"); | 86 | throw new IllegalStateException("Target type is required"); |
81 | } | 87 | } |
82 | return new ReferenceInfo(containment, sourceType, multiplicity, targetType, opposite, defaultValue); | 88 | return new ReferenceInfo(containment, sourceType, multiplicity, targetType, opposite, defaultValue, partial); |
83 | } | 89 | } |
84 | } | 90 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiplicity/InvalidMultiplicityErrorTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiplicity/InvalidMultiplicityErrorTranslator.java index 0ca6eac2..e2eff921 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiplicity/InvalidMultiplicityErrorTranslator.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiplicity/InvalidMultiplicityErrorTranslator.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 20232-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -52,12 +52,11 @@ public class InvalidMultiplicityErrorTranslator implements ModelStoreConfigurati | |||
52 | 52 | ||
53 | @Override | 53 | @Override |
54 | public void apply(ModelStoreBuilder storeBuilder) { | 54 | public void apply(ModelStoreBuilder storeBuilder) { |
55 | if (!(multiplicity instanceof ConstrainedMultiplicity constrainedMultiplicity)) { | 55 | if (!(multiplicity instanceof ConstrainedMultiplicity(var cardinalityInterval, var errorSymbol))) { |
56 | return; | 56 | return; |
57 | } | 57 | } |
58 | 58 | ||
59 | var name = constrainedMultiplicity.errorSymbol().name(); | 59 | var name = errorSymbol.name(); |
60 | var cardinalityInterval = constrainedMultiplicity.multiplicity(); | ||
61 | var node = Variable.of("node"); | 60 | var node = Variable.of("node"); |
62 | var other = Variable.of("other"); | 61 | var other = Variable.of("other"); |
63 | List<Variable> arguments = inverse ? List.of(other, node) : List.of(node, other); | 62 | List<Variable> arguments = inverse ? List.of(other, node) : List.of(node, other); |
@@ -98,8 +97,7 @@ public class InvalidMultiplicityErrorTranslator implements ModelStoreConfigurati | |||
98 | )); | 97 | )); |
99 | } | 98 | } |
100 | 99 | ||
101 | if (cardinalityInterval.upperBound() instanceof FiniteUpperCardinality finiteUpperCardinality) { | 100 | if (cardinalityInterval.upperBound() instanceof FiniteUpperCardinality(int upperBound)) { |
102 | int upperBound = finiteUpperCardinality.finiteUpperBound(); | ||
103 | mustBuilder.clause(Integer.class, existingContents -> List.of( | 101 | mustBuilder.clause(Integer.class, existingContents -> List.of( |
104 | must(nodeType.call(node)), | 102 | must(nodeType.call(node)), |
105 | new CountLowerBoundLiteral(existingContents, linkType, arguments), | 103 | new CountLowerBoundLiteral(existingContents, linkType, arguments), |
@@ -128,7 +126,7 @@ public class InvalidMultiplicityErrorTranslator implements ModelStoreConfigurati | |||
128 | output.assign(missingBuilder.build().aggregate(INT_SUM, Variable.of())) | 126 | output.assign(missingBuilder.build().aggregate(INT_SUM, Variable.of())) |
129 | )); | 127 | )); |
130 | 128 | ||
131 | storeBuilder.with(PartialRelationTranslator.of(constrainedMultiplicity.errorSymbol()) | 129 | storeBuilder.with(PartialRelationTranslator.of(errorSymbol) |
132 | .mayNever() | 130 | .mayNever() |
133 | .must(mustBuilder.build()) | 131 | .must(mustBuilder.build()) |
134 | .candidateMay(candidateMayBuilder.build()) | 132 | .candidateMay(candidateMayBuilder.build()) |
diff --git a/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyPartialModelTest.java b/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyPartialModelTest.java index e87b2684..85147921 100644 --- a/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyPartialModelTest.java +++ b/subprojects/store-reasoning/src/test/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyPartialModelTest.java | |||
@@ -149,7 +149,7 @@ class TypeHierarchyPartialModelTest { | |||
149 | 149 | ||
150 | var personCandidateInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, person); | 150 | var personCandidateInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, person); |
151 | assertThat(personCandidateInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); | 151 | assertThat(personCandidateInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); |
152 | assertThat(personCandidateInterpretation.get(Tuple.of(3)), is(TruthValue.FALSE)); | 152 | assertThat(personCandidateInterpretation.get(Tuple.of(3)), is(TruthValue.ERROR)); |
153 | 153 | ||
154 | var memberInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.PARTIAL, member); | 154 | var memberInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.PARTIAL, member); |
155 | assertThat(memberInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); | 155 | assertThat(memberInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); |
@@ -157,7 +157,7 @@ class TypeHierarchyPartialModelTest { | |||
157 | 157 | ||
158 | var memberCandidateInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, member); | 158 | var memberCandidateInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, member); |
159 | assertThat(memberCandidateInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); | 159 | assertThat(memberCandidateInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); |
160 | assertThat(memberCandidateInterpretation.get(Tuple.of(3)), is(TruthValue.FALSE)); | 160 | assertThat(memberCandidateInterpretation.get(Tuple.of(3)), is(TruthValue.ERROR)); |
161 | 161 | ||
162 | var studentInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.PARTIAL, student); | 162 | var studentInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.PARTIAL, student); |
163 | assertThat(studentInterpretation.get(Tuple.of(1)), is(TruthValue.FALSE)); | 163 | assertThat(studentInterpretation.get(Tuple.of(1)), is(TruthValue.FALSE)); |
@@ -165,7 +165,7 @@ class TypeHierarchyPartialModelTest { | |||
165 | 165 | ||
166 | var studentCandidateInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, student); | 166 | var studentCandidateInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, student); |
167 | assertThat(studentCandidateInterpretation.get(Tuple.of(1)), is(TruthValue.FALSE)); | 167 | assertThat(studentCandidateInterpretation.get(Tuple.of(1)), is(TruthValue.FALSE)); |
168 | assertThat(studentCandidateInterpretation.get(Tuple.of(3)), is(TruthValue.FALSE)); | 168 | assertThat(studentCandidateInterpretation.get(Tuple.of(3)), is(TruthValue.ERROR)); |
169 | 169 | ||
170 | var teacherInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.PARTIAL, teacher); | 170 | var teacherInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.PARTIAL, teacher); |
171 | assertThat(teacherInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); | 171 | assertThat(teacherInterpretation.get(Tuple.of(1)), is(TruthValue.TRUE)); |
diff --git a/subprojects/store/build.gradle.kts b/subprojects/store/build.gradle.kts index f96922a9..e48c0088 100644 --- a/subprojects/store/build.gradle.kts +++ b/subprojects/store/build.gradle.kts | |||
@@ -10,6 +10,6 @@ plugins { | |||
10 | } | 10 | } |
11 | 11 | ||
12 | dependencies { | 12 | dependencies { |
13 | implementation(libs.eclipseCollections.api) | 13 | api(libs.eclipseCollections.api) |
14 | runtimeOnly(libs.eclipseCollections) | 14 | runtimeOnly(libs.eclipseCollections) |
15 | } | 15 | } |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/AbstractNeighbourhoodCalculator.java b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/AbstractNeighbourhoodCalculator.java index 4cef6786..5bfc4725 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/AbstractNeighbourhoodCalculator.java +++ b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/AbstractNeighbourhoodCalculator.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -8,39 +8,87 @@ package tools.refinery.store.statecoding.neighbourhood; | |||
8 | import org.eclipse.collections.api.factory.primitive.IntLongMaps; | 8 | import org.eclipse.collections.api.factory.primitive.IntLongMaps; |
9 | import org.eclipse.collections.api.map.primitive.MutableIntLongMap; | 9 | import org.eclipse.collections.api.map.primitive.MutableIntLongMap; |
10 | import org.eclipse.collections.api.set.primitive.IntSet; | 10 | import org.eclipse.collections.api.set.primitive.IntSet; |
11 | import tools.refinery.store.model.AnyInterpretation; | 11 | import tools.refinery.store.map.Cursor; |
12 | import tools.refinery.store.model.Interpretation; | ||
13 | import tools.refinery.store.model.Model; | 12 | import tools.refinery.store.model.Model; |
14 | import tools.refinery.store.statecoding.ObjectCode; | 13 | import tools.refinery.store.statecoding.ObjectCode; |
14 | import tools.refinery.store.statecoding.StateCodeCalculator; | ||
15 | import tools.refinery.store.statecoding.StateCoderResult; | ||
15 | import tools.refinery.store.tuple.Tuple; | 16 | import tools.refinery.store.tuple.Tuple; |
16 | import tools.refinery.store.tuple.Tuple0; | ||
17 | 17 | ||
18 | import java.util.*; | 18 | import java.util.*; |
19 | 19 | ||
20 | public abstract class AbstractNeighbourhoodCalculator { | 20 | public abstract class AbstractNeighbourhoodCalculator<T> implements StateCodeCalculator { |
21 | protected final Model model; | 21 | private final Model model; |
22 | protected final List<AnyInterpretation> nullImpactValues; | 22 | private final IntSet individuals; |
23 | protected final LinkedHashMap<AnyInterpretation, long[]> impactValues; | 23 | private List<T> nullImpactValues; |
24 | protected final MutableIntLongMap individualHashValues = IntLongMaps.mutable.empty(); | 24 | private LinkedHashMap<T, long[]> impactValues; |
25 | private MutableIntLongMap individualHashValues; | ||
26 | private ObjectCodeImpl previousObjectCode = new ObjectCodeImpl(); | ||
27 | private ObjectCodeImpl nextObjectCode = new ObjectCodeImpl(); | ||
25 | 28 | ||
26 | protected static final long PRIME = 31; | 29 | protected static final long PRIME = 31; |
27 | 30 | ||
28 | protected AbstractNeighbourhoodCalculator(Model model, List<? extends AnyInterpretation> interpretations, | 31 | protected AbstractNeighbourhoodCalculator(Model model, IntSet individuals) { |
29 | IntSet individuals) { | ||
30 | this.model = model; | 32 | this.model = model; |
31 | this.nullImpactValues = new ArrayList<>(); | 33 | this.individuals = individuals; |
32 | this.impactValues = new LinkedHashMap<>(); | 34 | } |
35 | |||
36 | protected Model getModel() { | ||
37 | return model; | ||
38 | } | ||
39 | |||
40 | protected abstract List<T> getInterpretations(); | ||
41 | |||
42 | protected abstract int getArity(T interpretation); | ||
43 | |||
44 | protected abstract Object getNullValue(T interpretation); | ||
45 | |||
46 | // We need the wildcard here, because we don't know the value type. | ||
47 | @SuppressWarnings("squid:S1452") | ||
48 | protected abstract Cursor<Tuple, ?> getCursor(T interpretation); | ||
49 | |||
50 | @Override | ||
51 | public StateCoderResult calculateCodes() { | ||
52 | model.checkCancelled(); | ||
53 | ensureInitialized(); | ||
54 | previousObjectCode.clear(); | ||
55 | nextObjectCode.clear(); | ||
56 | initializeWithIndividuals(previousObjectCode); | ||
57 | |||
58 | int rounds = 0; | ||
59 | do { | ||
60 | model.checkCancelled(); | ||
61 | constructNextObjectCodes(previousObjectCode, nextObjectCode); | ||
62 | var tempObjectCode = previousObjectCode; | ||
63 | previousObjectCode = nextObjectCode; | ||
64 | nextObjectCode = tempObjectCode; | ||
65 | nextObjectCode.clear(); | ||
66 | rounds++; | ||
67 | } while (rounds <= 7 && rounds <= previousObjectCode.getEffectiveSize()); | ||
68 | |||
69 | long result = calculateLastSum(previousObjectCode); | ||
70 | return new StateCoderResult((int) result, previousObjectCode); | ||
71 | } | ||
72 | |||
73 | private void ensureInitialized() { | ||
74 | if (impactValues != null) { | ||
75 | return; | ||
76 | } | ||
77 | |||
78 | nullImpactValues = new ArrayList<>(); | ||
79 | impactValues = new LinkedHashMap<>(); | ||
80 | individualHashValues = IntLongMaps.mutable.empty(); | ||
33 | // Random isn't used for cryptographical purposes but just to assign distinguishable identifiers to symbols. | 81 | // Random isn't used for cryptographical purposes but just to assign distinguishable identifiers to symbols. |
34 | @SuppressWarnings("squid:S2245") | 82 | @SuppressWarnings("squid:S2245") |
35 | Random random = new Random(1); | 83 | Random random = new Random(1); |
36 | 84 | ||
37 | var individualsInOrder = individuals.toSortedList(Integer::compare); | 85 | var individualsInOrder = individuals.toSortedList(Integer::compare); |
38 | for(int i = 0; i<individualsInOrder.size(); i++) { | 86 | for (int i = 0; i < individualsInOrder.size(); i++) { |
39 | individualHashValues.put(individualsInOrder.get(i), random.nextLong()); | 87 | individualHashValues.put(individualsInOrder.get(i), random.nextLong()); |
40 | } | 88 | } |
41 | 89 | ||
42 | for (AnyInterpretation interpretation : interpretations) { | 90 | for (var interpretation : getInterpretations()) { |
43 | int arity = interpretation.getSymbol().arity(); | 91 | int arity = getArity(interpretation); |
44 | if (arity == 0) { | 92 | if (arity == 0) { |
45 | nullImpactValues.add(interpretation); | 93 | nullImpactValues.add(interpretation); |
46 | } else { | 94 | } else { |
@@ -50,6 +98,88 @@ public abstract class AbstractNeighbourhoodCalculator { | |||
50 | } | 98 | } |
51 | impactValues.put(interpretation, impact); | 99 | impactValues.put(interpretation, impact); |
52 | } | 100 | } |
101 | |||
102 | } | ||
103 | } | ||
104 | |||
105 | private long calculateLastSum(ObjectCode codes) { | ||
106 | long result = 0; | ||
107 | for (var nullImpactValue : nullImpactValues) { | ||
108 | result = result * PRIME + Objects.hashCode(getNullValue(nullImpactValue)); | ||
109 | } | ||
110 | |||
111 | for (int i = 0; i < codes.getSize(); i++) { | ||
112 | final long hash = codes.get(i); | ||
113 | result += hash*PRIME; | ||
114 | } | ||
115 | |||
116 | return result; | ||
117 | } | ||
118 | |||
119 | private void constructNextObjectCodes(ObjectCodeImpl previous, ObjectCodeImpl next) { | ||
120 | for (var impactValueEntry : this.impactValues.entrySet()) { | ||
121 | model.checkCancelled(); | ||
122 | var interpretation = impactValueEntry.getKey(); | ||
123 | var cursor = getCursor(interpretation); | ||
124 | int arity = getArity(interpretation); | ||
125 | long[] impactValue = impactValueEntry.getValue(); | ||
126 | impactCalculation(previous, next, impactValue, cursor, arity); | ||
127 | } | ||
128 | } | ||
129 | |||
130 | protected void impactCalculation(ObjectCodeImpl previous, ObjectCodeImpl next, long[] impactValue, | ||
131 | Cursor<Tuple, ?> cursor, int arity) { | ||
132 | switch (arity) { | ||
133 | case 1 -> { | ||
134 | while (cursor.move()) { | ||
135 | impactCalculation1(previous, next, impactValue, cursor); | ||
136 | } | ||
137 | } | ||
138 | case 2 -> { | ||
139 | while (cursor.move()) { | ||
140 | impactCalculation2(previous, next, impactValue, cursor); | ||
141 | } | ||
142 | } | ||
143 | default -> { | ||
144 | while (cursor.move()) { | ||
145 | impactCalculationN(previous, next, impactValue, cursor); | ||
146 | } | ||
147 | } | ||
148 | } | ||
149 | } | ||
150 | |||
151 | private void impactCalculation1(ObjectCodeImpl previous, ObjectCodeImpl next, long[] impactValues, | ||
152 | Cursor<Tuple, ?> cursor) { | ||
153 | |||
154 | Tuple tuple = cursor.getKey(); | ||
155 | int o = tuple.get(0); | ||
156 | Object value = cursor.getValue(); | ||
157 | long tupleHash = getTupleHash1(tuple, value, previous); | ||
158 | addHash(next, o, impactValues[0], tupleHash); | ||
159 | } | ||
160 | |||
161 | private void impactCalculation2(ObjectCodeImpl previous, ObjectCodeImpl next, long[] impactValues, | ||
162 | Cursor<Tuple, ?> cursor) { | ||
163 | final Tuple tuple = cursor.getKey(); | ||
164 | final int o1 = tuple.get(0); | ||
165 | final int o2 = tuple.get(1); | ||
166 | |||
167 | Object value = cursor.getValue(); | ||
168 | long tupleHash = getTupleHash2(tuple, value, previous); | ||
169 | |||
170 | addHash(next, o1, impactValues[0], tupleHash); | ||
171 | addHash(next, o2, impactValues[1], tupleHash); | ||
172 | } | ||
173 | |||
174 | private void impactCalculationN(ObjectCodeImpl previous, ObjectCodeImpl next, long[] impactValues, | ||
175 | Cursor<Tuple, ?> cursor) { | ||
176 | final Tuple tuple = cursor.getKey(); | ||
177 | |||
178 | Object value = cursor.getValue(); | ||
179 | long tupleHash = getTupleHashN(tuple, value, previous); | ||
180 | |||
181 | for (int i = 0; i < tuple.getSize(); i++) { | ||
182 | addHash(next, tuple.get(i), impactValues[i], tupleHash); | ||
53 | } | 183 | } |
54 | } | 184 | } |
55 | 185 | ||
@@ -88,13 +218,4 @@ public abstract class AbstractNeighbourhoodCalculator { | |||
88 | long x = tupleHash * impact; | 218 | long x = tupleHash * impact; |
89 | objectCodeImpl.set(o, objectCodeImpl.get(o) + x); | 219 | objectCodeImpl.set(o, objectCodeImpl.get(o) + x); |
90 | } | 220 | } |
91 | |||
92 | protected long calculateModelCode(long lastSum) { | ||
93 | long result = 0; | ||
94 | for (var nullImpactValue : nullImpactValues) { | ||
95 | result = result * PRIME + Objects.hashCode(((Interpretation<?>) nullImpactValue).get(Tuple0.INSTANCE)); | ||
96 | } | ||
97 | result += lastSum; | ||
98 | return result; | ||
99 | } | ||
100 | } | 221 | } |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/LazyNeighbourhoodCalculator.java b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/LazyNeighbourhoodCalculator.java deleted file mode 100644 index 04335141..00000000 --- a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/LazyNeighbourhoodCalculator.java +++ /dev/null | |||
@@ -1,195 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.statecoding.neighbourhood; | ||
7 | |||
8 | import org.eclipse.collections.api.factory.primitive.LongIntMaps; | ||
9 | import org.eclipse.collections.api.map.primitive.LongIntMap; | ||
10 | import org.eclipse.collections.api.map.primitive.MutableLongIntMap; | ||
11 | import org.eclipse.collections.api.set.primitive.IntSet; | ||
12 | import tools.refinery.store.map.Cursor; | ||
13 | import tools.refinery.store.model.AnyInterpretation; | ||
14 | import tools.refinery.store.model.Interpretation; | ||
15 | import tools.refinery.store.model.Model; | ||
16 | import tools.refinery.store.statecoding.StateCodeCalculator; | ||
17 | import tools.refinery.store.statecoding.StateCoderResult; | ||
18 | import tools.refinery.store.tuple.Tuple; | ||
19 | |||
20 | import java.util.List; | ||
21 | |||
22 | public class LazyNeighbourhoodCalculator extends AbstractNeighbourhoodCalculator implements StateCodeCalculator { | ||
23 | public LazyNeighbourhoodCalculator(Model model, List<? extends AnyInterpretation> interpretations, | ||
24 | IntSet individuals) { | ||
25 | super(model, interpretations, individuals); | ||
26 | } | ||
27 | |||
28 | public StateCoderResult calculateCodes() { | ||
29 | ObjectCodeImpl previousObjectCode = new ObjectCodeImpl(); | ||
30 | MutableLongIntMap prevHash2Amount = LongIntMaps.mutable.empty(); | ||
31 | |||
32 | long lastSum; | ||
33 | // All hash code is 0, except to the individuals. | ||
34 | int lastSize = 1; | ||
35 | boolean first = true; | ||
36 | |||
37 | boolean grows; | ||
38 | int rounds = 0; | ||
39 | do { | ||
40 | final ObjectCodeImpl nextObjectCode; | ||
41 | if (first) { | ||
42 | nextObjectCode = new ObjectCodeImpl(); | ||
43 | initializeWithIndividuals(nextObjectCode); | ||
44 | } else { | ||
45 | nextObjectCode = new ObjectCodeImpl(previousObjectCode); | ||
46 | } | ||
47 | constructNextObjectCodes(previousObjectCode, nextObjectCode, prevHash2Amount); | ||
48 | |||
49 | MutableLongIntMap nextHash2Amount = LongIntMaps.mutable.empty(); | ||
50 | lastSum = calculateLastSum(previousObjectCode, nextObjectCode, prevHash2Amount, nextHash2Amount); | ||
51 | |||
52 | int nextSize = nextHash2Amount.size(); | ||
53 | grows = nextSize > lastSize; | ||
54 | lastSize = nextSize; | ||
55 | first = false; | ||
56 | |||
57 | previousObjectCode = nextObjectCode; | ||
58 | prevHash2Amount = nextHash2Amount; | ||
59 | } while (grows && rounds++ < 4/*&& lastSize < previousObjectCode.getSize()*/); | ||
60 | |||
61 | long result = calculateModelCode(lastSum); | ||
62 | |||
63 | return new StateCoderResult((int) result, previousObjectCode); | ||
64 | } | ||
65 | |||
66 | private long calculateLastSum(ObjectCodeImpl previous, ObjectCodeImpl next, LongIntMap hash2Amount, | ||
67 | MutableLongIntMap nextHash2Amount) { | ||
68 | long lastSum = 0; | ||
69 | for (int i = 0; i < next.getSize(); i++) { | ||
70 | final long hash; | ||
71 | if (isUnique(hash2Amount, previous, i)) { | ||
72 | hash = previous.get(i); | ||
73 | next.set(i, hash); | ||
74 | } else { | ||
75 | hash = next.get(i); | ||
76 | } | ||
77 | |||
78 | final int amount = nextHash2Amount.get(hash); | ||
79 | nextHash2Amount.put(hash, amount + 1); | ||
80 | |||
81 | final long shifted1 = hash >>> 8; | ||
82 | final long shifted2 = hash << 8; | ||
83 | final long shifted3 = hash >> 2; | ||
84 | lastSum += shifted1 * shifted3 + shifted2; | ||
85 | } | ||
86 | return lastSum; | ||
87 | } | ||
88 | |||
89 | private void constructNextObjectCodes(ObjectCodeImpl previous, ObjectCodeImpl next, LongIntMap hash2Amount) { | ||
90 | for (var impactValueEntry : this.impactValues.entrySet()) { | ||
91 | Interpretation<?> interpretation = (Interpretation<?>) impactValueEntry.getKey(); | ||
92 | var cursor = interpretation.getAll(); | ||
93 | int arity = interpretation.getSymbol().arity(); | ||
94 | long[] impactValue = impactValueEntry.getValue(); | ||
95 | |||
96 | if (arity == 1) { | ||
97 | while (cursor.move()) { | ||
98 | lazyImpactCalculation1(hash2Amount, previous, next, impactValue, cursor); | ||
99 | } | ||
100 | } else if (arity == 2) { | ||
101 | while (cursor.move()) { | ||
102 | lazyImpactCalculation2(hash2Amount, previous, next, impactValue, cursor); | ||
103 | } | ||
104 | } else { | ||
105 | while (cursor.move()) { | ||
106 | lazyImpactCalculationN(hash2Amount, previous, next, impactValue, cursor); | ||
107 | } | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | |||
112 | private boolean isUnique(LongIntMap hash2Amount, ObjectCodeImpl objectCodeImpl, int object) { | ||
113 | final long hash = objectCodeImpl.get(object); | ||
114 | if (hash == 0) { | ||
115 | return false; | ||
116 | } | ||
117 | final int amount = hash2Amount.get(hash); | ||
118 | return amount == 1; | ||
119 | } | ||
120 | |||
121 | private void lazyImpactCalculation1(LongIntMap hash2Amount, ObjectCodeImpl previous, ObjectCodeImpl next, | ||
122 | long[] impactValues, Cursor<Tuple, ?> cursor) { | ||
123 | |||
124 | Tuple tuple = cursor.getKey(); | ||
125 | int o = tuple.get(0); | ||
126 | |||
127 | if (isUnique(hash2Amount, previous, o)) { | ||
128 | next.ensureSize(o); | ||
129 | } else { | ||
130 | Object value = cursor.getValue(); | ||
131 | long tupleHash = getTupleHash1(tuple, value, previous); | ||
132 | |||
133 | addHash(next, o, impactValues[0], tupleHash); | ||
134 | } | ||
135 | } | ||
136 | |||
137 | private void lazyImpactCalculation2(LongIntMap hash2Amount, ObjectCodeImpl previous, ObjectCodeImpl next, | ||
138 | long[] impactValues, Cursor<Tuple, ?> cursor) { | ||
139 | final Tuple tuple = cursor.getKey(); | ||
140 | final int o1 = tuple.get(0); | ||
141 | final int o2 = tuple.get(1); | ||
142 | |||
143 | final boolean u1 = isUnique(hash2Amount, previous, o1); | ||
144 | final boolean u2 = isUnique(hash2Amount, previous, o2); | ||
145 | |||
146 | if (u1 && u2) { | ||
147 | next.ensureSize(o1); | ||
148 | next.ensureSize(o2); | ||
149 | } else { | ||
150 | Object value = cursor.getValue(); | ||
151 | long tupleHash = getTupleHash2(tuple, value, previous); | ||
152 | |||
153 | if (!u1) { | ||
154 | addHash(next, o1, impactValues[0], tupleHash); | ||
155 | next.ensureSize(o2); | ||
156 | } | ||
157 | if (!u2) { | ||
158 | next.ensureSize(o1); | ||
159 | addHash(next, o2, impactValues[1], tupleHash); | ||
160 | } | ||
161 | } | ||
162 | } | ||
163 | |||
164 | private void lazyImpactCalculationN(LongIntMap hash2Amount, ObjectCodeImpl previous, ObjectCodeImpl next, | ||
165 | long[] impactValues, Cursor<Tuple, ?> cursor) { | ||
166 | final Tuple tuple = cursor.getKey(); | ||
167 | |||
168 | final boolean[] uniques = new boolean[tuple.getSize()]; | ||
169 | boolean allUnique = true; | ||
170 | for (int i = 0; i < tuple.getSize(); i++) { | ||
171 | final boolean isUnique = isUnique(hash2Amount, previous, tuple.get(i)); | ||
172 | uniques[i] = isUnique; | ||
173 | allUnique &= isUnique; | ||
174 | } | ||
175 | |||
176 | if (allUnique) { | ||
177 | for (int i = 0; i < tuple.getSize(); i++) { | ||
178 | next.ensureSize(tuple.get(i)); | ||
179 | } | ||
180 | } else { | ||
181 | Object value = cursor.getValue(); | ||
182 | long tupleHash = getTupleHashN(tuple, value, previous); | ||
183 | |||
184 | for (int i = 0; i < tuple.getSize(); i++) { | ||
185 | int o = tuple.get(i); | ||
186 | if (!uniques[i]) { | ||
187 | addHash(next, o, impactValues[i], tupleHash); | ||
188 | } else { | ||
189 | next.ensureSize(o); | ||
190 | } | ||
191 | } | ||
192 | } | ||
193 | } | ||
194 | |||
195 | } | ||
diff --git a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java index 5e6de53b..f6071c5b 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java +++ b/subprojects/store/src/main/java/tools/refinery/store/statecoding/neighbourhood/NeighbourhoodCalculator.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -9,115 +9,36 @@ import org.eclipse.collections.api.set.primitive.IntSet; | |||
9 | import tools.refinery.store.map.Cursor; | 9 | import tools.refinery.store.map.Cursor; |
10 | import tools.refinery.store.model.Interpretation; | 10 | import tools.refinery.store.model.Interpretation; |
11 | import tools.refinery.store.model.Model; | 11 | import tools.refinery.store.model.Model; |
12 | import tools.refinery.store.statecoding.ObjectCode; | ||
13 | import tools.refinery.store.statecoding.StateCodeCalculator; | ||
14 | import tools.refinery.store.statecoding.StateCoderResult; | ||
15 | import tools.refinery.store.tuple.Tuple; | 12 | import tools.refinery.store.tuple.Tuple; |
16 | import tools.refinery.store.tuple.Tuple0; | ||
17 | 13 | ||
18 | import java.util.List; | 14 | import java.util.List; |
19 | import java.util.Objects; | ||
20 | 15 | ||
21 | public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator implements StateCodeCalculator { | 16 | public class NeighbourhoodCalculator extends AbstractNeighbourhoodCalculator<Interpretation<?>> { |
22 | private ObjectCodeImpl previousObjectCode = new ObjectCodeImpl(); | 17 | private final List<Interpretation<?>> interpretations; |
23 | private ObjectCodeImpl nextObjectCode = new ObjectCodeImpl(); | ||
24 | 18 | ||
25 | public NeighbourhoodCalculator(Model model, List<? extends Interpretation<?>> interpretations, IntSet individuals) { | 19 | public NeighbourhoodCalculator(Model model, List<? extends Interpretation<?>> interpretations, |
26 | super(model, interpretations, individuals); | 20 | IntSet individuals) { |
21 | super(model, individuals); | ||
22 | this.interpretations = List.copyOf(interpretations); | ||
27 | } | 23 | } |
28 | 24 | ||
29 | public StateCoderResult calculateCodes() { | 25 | @Override |
30 | model.checkCancelled(); | 26 | public List<Interpretation<?>> getInterpretations() { |
31 | previousObjectCode.clear(); | 27 | return interpretations; |
32 | nextObjectCode.clear(); | ||
33 | initializeWithIndividuals(previousObjectCode); | ||
34 | |||
35 | int rounds = 0; | ||
36 | do { | ||
37 | model.checkCancelled(); | ||
38 | constructNextObjectCodes(previousObjectCode, nextObjectCode); | ||
39 | var tempObjectCode = previousObjectCode; | ||
40 | previousObjectCode = nextObjectCode; | ||
41 | nextObjectCode = tempObjectCode; | ||
42 | nextObjectCode.clear(); | ||
43 | rounds++; | ||
44 | } while (rounds <= 7 && rounds <= previousObjectCode.getEffectiveSize()); | ||
45 | |||
46 | long result = calculateLastSum(previousObjectCode); | ||
47 | return new StateCoderResult((int) result, previousObjectCode); | ||
48 | } | 28 | } |
49 | 29 | ||
50 | private long calculateLastSum(ObjectCode codes) { | 30 | @Override |
51 | long result = 0; | 31 | protected int getArity(Interpretation<?> interpretation) { |
52 | for (var nullImpactValue : nullImpactValues) { | 32 | return interpretation.getSymbol().arity(); |
53 | result = result * PRIME + Objects.hashCode(((Interpretation<?>) nullImpactValue).get(Tuple0.INSTANCE)); | ||
54 | } | ||
55 | |||
56 | for (int i = 0; i < codes.getSize(); i++) { | ||
57 | final long hash = codes.get(i); | ||
58 | result += hash*PRIME; | ||
59 | } | ||
60 | |||
61 | return result; | ||
62 | } | 33 | } |
63 | 34 | ||
64 | private void constructNextObjectCodes(ObjectCodeImpl previous, ObjectCodeImpl next) { | 35 | @Override |
65 | for (var impactValueEntry : this.impactValues.entrySet()) { | 36 | protected Object getNullValue(Interpretation<?> interpretation) { |
66 | model.checkCancelled(); | 37 | return interpretation.get(Tuple.of()); |
67 | Interpretation<?> interpretation = (Interpretation<?>) impactValueEntry.getKey(); | ||
68 | var cursor = interpretation.getAll(); | ||
69 | int arity = interpretation.getSymbol().arity(); | ||
70 | long[] impactValue = impactValueEntry.getValue(); | ||
71 | |||
72 | if (arity == 1) { | ||
73 | while (cursor.move()) { | ||
74 | impactCalculation1(previous, next, impactValue, cursor); | ||
75 | } | ||
76 | } else if (arity == 2) { | ||
77 | while (cursor.move()) { | ||
78 | impactCalculation2(previous, next, impactValue, cursor); | ||
79 | } | ||
80 | } else { | ||
81 | while (cursor.move()) { | ||
82 | impactCalculationN(previous, next, impactValue, cursor); | ||
83 | } | ||
84 | } | ||
85 | } | ||
86 | } | 38 | } |
87 | 39 | ||
88 | 40 | @Override | |
89 | private void impactCalculation1(ObjectCodeImpl previous, ObjectCodeImpl next, long[] impactValues, | 41 | protected Cursor<Tuple, ?> getCursor(Interpretation<?> interpretation) { |
90 | Cursor<Tuple, ?> cursor) { | 42 | return interpretation.getAll(); |
91 | |||
92 | Tuple tuple = cursor.getKey(); | ||
93 | int o = tuple.get(0); | ||
94 | Object value = cursor.getValue(); | ||
95 | long tupleHash = getTupleHash1(tuple, value, previous); | ||
96 | addHash(next, o, impactValues[0], tupleHash); | ||
97 | } | ||
98 | |||
99 | private void impactCalculation2(ObjectCodeImpl previous, ObjectCodeImpl next, long[] impactValues, | ||
100 | Cursor<Tuple, ?> cursor) { | ||
101 | final Tuple tuple = cursor.getKey(); | ||
102 | final int o1 = tuple.get(0); | ||
103 | final int o2 = tuple.get(1); | ||
104 | |||
105 | Object value = cursor.getValue(); | ||
106 | long tupleHash = getTupleHash2(tuple, value, previous); | ||
107 | |||
108 | addHash(next, o1, impactValues[0], tupleHash); | ||
109 | addHash(next, o2, impactValues[1], tupleHash); | ||
110 | } | ||
111 | |||
112 | private void impactCalculationN(ObjectCodeImpl previous, ObjectCodeImpl next, long[] impactValues, | ||
113 | Cursor<Tuple, ?> cursor) { | ||
114 | final Tuple tuple = cursor.getKey(); | ||
115 | |||
116 | Object value = cursor.getValue(); | ||
117 | long tupleHash = getTupleHashN(tuple, value, previous); | ||
118 | |||
119 | for (int i = 0; i < tuple.getSize(); i++) { | ||
120 | addHash(next, tuple.get(i), impactValues[i], tupleHash); | ||
121 | } | ||
122 | } | 43 | } |
123 | } | 44 | } |