aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszka@SEMERATH-LAPTOP>2017-07-12 15:40:33 +0200
committerLibravatar OszkarSemerath <oszka@SEMERATH-LAPTOP>2017-07-12 15:40:33 +0200
commitb4927437a3487ecc61c48d1351d18b7a38c5b154 (patch)
tree3f1e6c25c50a71efb0de6131b0d94c5163759dcc /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation
parentRearranged the solver configuration into different subsections (diff)
downloadVIATRA-Generator-b4927437a3487ecc61c48d1351d18b7a38c5b154.tar.gz
VIATRA-Generator-b4927437a3487ecc61c48d1351d18b7a38c5b154.tar.zst
VIATRA-Generator-b4927437a3487ecc61c48d1351d18b7a38c5b154.zip
Graphviz based visualisation for the concretizations of partial models.
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.classpath18
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.gitignore2
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.project40
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.jdt.core.prefs2
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.m2e.core.prefs4
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/META-INF/MANIFEST.MF17
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/build.properties4
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/input/solution1.partialinterpretation394
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/pom.xml19
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend239
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/Test.xtend24
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/xtend-gen/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/.gitignore10
12 files changed, 773 insertions, 0 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.classpath b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.classpath
new file mode 100644
index 00000000..a49f7d1e
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.classpath
@@ -0,0 +1,18 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<classpath>
3 <classpathentry kind="src" path="src"/>
4 <classpathentry kind="src" path="xtend-gen"/>
5 <classpathentry kind="src" path="tests"/>
6 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
7 <attributes>
8 <attribute name="maven.pomderived" value="true"/>
9 </attributes>
10 </classpathentry>
11 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
12 <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
13 <attributes>
14 <attribute name="maven.pomderived" value="true"/>
15 </attributes>
16 </classpathentry>
17 <classpathentry kind="output" path="target/classes"/>
18</classpath>
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.gitignore b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.gitignore
new file mode 100644
index 00000000..09e3bc9b
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.gitignore
@@ -0,0 +1,2 @@
1/bin/
2/target/
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.project b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.project
new file mode 100644
index 00000000..a52c4496
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.project
@@ -0,0 +1,40 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<projectDescription>
3 <name>hu.bme.mit.inf.dslreasoner.visualisation</name>
4 <comment></comment>
5 <projects>
6 </projects>
7 <buildSpec>
8 <buildCommand>
9 <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
10 <arguments>
11 </arguments>
12 </buildCommand>
13 <buildCommand>
14 <name>org.eclipse.jdt.core.javabuilder</name>
15 <arguments>
16 </arguments>
17 </buildCommand>
18 <buildCommand>
19 <name>org.eclipse.pde.ManifestBuilder</name>
20 <arguments>
21 </arguments>
22 </buildCommand>
23 <buildCommand>
24 <name>org.eclipse.pde.SchemaBuilder</name>
25 <arguments>
26 </arguments>
27 </buildCommand>
28 <buildCommand>
29 <name>org.eclipse.m2e.core.maven2Builder</name>
30 <arguments>
31 </arguments>
32 </buildCommand>
33 </buildSpec>
34 <natures>
35 <nature>org.eclipse.m2e.core.maven2Nature</nature>
36 <nature>org.eclipse.pde.PluginNature</nature>
37 <nature>org.eclipse.jdt.core.javanature</nature>
38 <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
39 </natures>
40</projectDescription>
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.jdt.core.prefs b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..fd9afef6
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,2 @@
1eclipse.preferences.version=1
2org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.m2e.core.prefs b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000..14b697b7
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
1activeProfiles=
2eclipse.preferences.version=1
3resolveWorkspaceProjects=true
4version=1
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/META-INF/MANIFEST.MF b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..e7289f24
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
1Manifest-Version: 1.0
2Bundle-ManifestVersion: 2
3Bundle-Name: Visualisation
4Bundle-SymbolicName: hu.bme.mit.inf.dslreasoner.visualisation
5Bundle-Version: 1.0.0.qualifier
6Bundle-RequiredExecutionEnvironment: JavaSE-1.8
7Require-Bundle: com.google.guava,
8 org.eclipse.xtext.xbase.lib,
9 org.eclipse.xtend.lib,
10 org.eclipse.xtend.lib.macro,
11 hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage;bundle-version="1.0.0",
12 hu.bme.mit.inf.dslreasoner.viatra2logic;bundle-version="1.0.0",
13 hu.bme.mit.inf.dslreasoner.logic.model.validation;bundle-version="0.0.1",
14 org.eclipse.emf.ecore.xmi;bundle-version="2.12.0"
15Import-Package: org.apache.log4j;version="1.2.15"
16Export-Package: hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz
17
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/build.properties b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/build.properties
new file mode 100644
index 00000000..41eb6ade
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/build.properties
@@ -0,0 +1,4 @@
1source.. = src/
2output.. = bin/
3bin.includes = META-INF/,\
4 .
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/input/solution1.partialinterpretation b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/input/solution1.partialinterpretation
new file mode 100644
index 00000000..b6519111
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/input/solution1.partialinterpretation
@@ -0,0 +1,394 @@
1<?xml version="1.0" encoding="ASCII"?>
2<partialinterpretation:PartialInterpretation
3 xmi:version="2.0"
4 xmlns:xmi="http://www.omg.org/XMI"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xmlns:language="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
7 xmlns:partialinterpretation="http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
8 problem="//@problemConainer">
9 <partialrelationinterpretation
10 interpretationOf="//@problemConainer/@relations.0"
11 param1="//@problemConainer/@relations.0/@parameters.0"
12 param2="//@problemConainer/@relations.0/@parameters.1">
13 <relationlinks
14 xsi:type="partialinterpretation:BinaryElementRelationLink"
15 param1="//@newElements.0"
16 param2="//@newElements.1"/>
17 <relationlinks
18 xsi:type="partialinterpretation:BinaryElementRelationLink"
19 param1="//@newElements.2"
20 param2="//@newElements.4"/>
21 </partialrelationinterpretation>
22 <partialrelationinterpretation
23 interpretationOf="//@problemConainer/@relations.1"
24 param1="//@problemConainer/@relations.1/@parameters.0"
25 param2="//@problemConainer/@relations.1/@parameters.1"/>
26 <partialrelationinterpretation
27 interpretationOf="//@problemConainer/@relations.2"
28 param1="//@problemConainer/@relations.2/@parameters.0"
29 param2="//@problemConainer/@relations.2/@parameters.1">
30 <relationlinks
31 xsi:type="partialinterpretation:BinaryElementRelationLink"
32 param1="//@newElements.5"
33 param2="//@newElements.0"/>
34 <relationlinks
35 xsi:type="partialinterpretation:BinaryElementRelationLink"
36 param1="//@newElements.9"
37 param2="//@newElements.5"/>
38 </partialrelationinterpretation>
39 <partialrelationinterpretation
40 interpretationOf="//@problemConainer/@relations.3"
41 param1="//@problemConainer/@relations.3/@parameters.0"
42 param2="//@problemConainer/@relations.3/@parameters.1">
43 <relationlinks
44 xsi:type="partialinterpretation:BinaryElementRelationLink"
45 param1="//@problemConainer/@elements.3"
46 param2="//@newElements.0"/>
47 <relationlinks
48 xsi:type="partialinterpretation:BinaryElementRelationLink"
49 param1="//@problemConainer/@elements.3"
50 param2="//@newElements.2"/>
51 <relationlinks
52 xsi:type="partialinterpretation:BinaryElementRelationLink"
53 param1="//@problemConainer/@elements.3"
54 param2="//@newElements.3"/>
55 </partialrelationinterpretation>
56 <partialrelationinterpretation
57 interpretationOf="//@problemConainer/@relations.4"
58 param1="//@problemConainer/@relations.4/@parameters.0"
59 param2="//@problemConainer/@relations.4/@parameters.1">
60 <relationlinks
61 xsi:type="partialinterpretation:BinaryElementRelationLink"
62 param1="//@newElements.0"
63 param2="//@newElements.5"/>
64 <relationlinks
65 xsi:type="partialinterpretation:BinaryElementRelationLink"
66 param1="//@newElements.5"
67 param2="//@newElements.9"/>
68 </partialrelationinterpretation>
69 <partialrelationinterpretation
70 interpretationOf="//@problemConainer/@relations.5"
71 param1="//@problemConainer/@relations.5/@parameters.0"
72 param2="//@problemConainer/@relations.5/@parameters.1">
73 <relationlinks
74 xsi:type="partialinterpretation:BinaryElementRelationLink"
75 param1="//@newElements.7"
76 param2="//@newElements.6"/>
77 </partialrelationinterpretation>
78 <partialrelationinterpretation
79 interpretationOf="//@problemConainer/@relations.6"
80 param1="//@problemConainer/@relations.6/@parameters.0"
81 param2="//@problemConainer/@relations.6/@parameters.1"/>
82 <partialrelationinterpretation
83 interpretationOf="//@problemConainer/@relations.7"
84 param1="//@problemConainer/@relations.7/@parameters.0"
85 param2="//@problemConainer/@relations.7/@parameters.1"/>
86 <partialrelationinterpretation
87 interpretationOf="//@problemConainer/@relations.8"
88 param1="//@problemConainer/@relations.8/@parameters.0"
89 param2="//@problemConainer/@relations.8/@parameters.1">
90 <relationlinks
91 xsi:type="partialinterpretation:BinaryElementRelationLink"
92 param1="//@newElements.1"
93 param2="//@newElements.6"/>
94 <relationlinks
95 xsi:type="partialinterpretation:BinaryElementRelationLink"
96 param1="//@newElements.1"
97 param2="//@newElements.8"/>
98 </partialrelationinterpretation>
99 <partialrelationinterpretation
100 interpretationOf="//@problemConainer/@relations.9"
101 param1="//@problemConainer/@relations.9/@parameters.0"
102 param2="//@problemConainer/@relations.9/@parameters.1">
103 <relationlinks
104 xsi:type="partialinterpretation:BinaryElementRelationLink"
105 param1="//@newElements.1"
106 param2="//@newElements.0"/>
107 <relationlinks
108 xsi:type="partialinterpretation:BinaryElementRelationLink"
109 param1="//@newElements.4"
110 param2="//@newElements.2"/>
111 </partialrelationinterpretation>
112 <partialrelationinterpretation
113 interpretationOf="//@problemConainer/@relations.10"
114 param1="//@problemConainer/@relations.10/@parameters.0"
115 param2="//@problemConainer/@relations.10/@parameters.1"/>
116 <partialrelationinterpretation
117 interpretationOf="//@problemConainer/@relations.11"
118 param1="//@problemConainer/@relations.11/@parameters.0"
119 param2="//@problemConainer/@relations.11/@parameters.1"/>
120 <partialrelationinterpretation
121 interpretationOf="//@problemConainer/@relations.12"
122 param1="//@problemConainer/@relations.12/@parameters.0"
123 param2="//@problemConainer/@relations.12/@parameters.1">
124 <relationlinks
125 xsi:type="partialinterpretation:BinaryElementRelationLink"
126 param1="//@newElements.6"
127 param2="//@newElements.7"/>
128 </partialrelationinterpretation>
129 <partialrelationinterpretation
130 interpretationOf="//@problemConainer/@relations.13"
131 param1="//@problemConainer/@relations.13/@parameters.0"
132 param2="//@problemConainer/@relations.13/@parameters.1">
133 <relationlinks
134 xsi:type="partialinterpretation:BinaryElementRelationLink"
135 param1="//@newElements.6"
136 param2="//@newElements.1"/>
137 <relationlinks
138 xsi:type="partialinterpretation:BinaryElementRelationLink"
139 param1="//@newElements.8"
140 param2="//@newElements.1"/>
141 </partialrelationinterpretation>
142 <partialrelationinterpretation
143 interpretationOf="//@problemConainer/@relations.14"
144 param1="//@problemConainer/@relations.14/@parameters.0"
145 param2="//@problemConainer/@relations.14/@parameters.1"/>
146 <newElements/>
147 <newElements/>
148 <newElements/>
149 <newElements/>
150 <newElements/>
151 <newElements/>
152 <newElements/>
153 <newElements/>
154 <newElements/>
155 <newElements/>
156 <partialtypeinterpratation
157 interpretationOf="//@problemConainer/@types.0"
158 elements="//@newElements.0 //@newElements.2 //@newElements.3 //@newElements.5 //@newElements.9"/>
159 <partialtypeinterpratation
160 interpretationOf="//@problemConainer/@types.1"
161 elements="//@problemConainer/@elements.3"/>
162 <partialtypeinterpratation
163 interpretationOf="//@problemConainer/@types.2"
164 elements="//@newElements.0 //@newElements.2 //@newElements.3 //@newElements.5 //@newElements.9"
165 supertypeInterpretation="//@partialtypeinterpratation.0"/>
166 <partialtypeinterpratation
167 interpretationOf="//@problemConainer/@types.3"
168 elements="//@newElements.7"/>
169 <partialtypeinterpratation
170 interpretationOf="//@problemConainer/@types.4"/>
171 <partialtypeinterpratation
172 interpretationOf="//@problemConainer/@types.5"
173 elements="//@newElements.1 //@newElements.4"/>
174 <partialtypeinterpratation
175 interpretationOf="//@problemConainer/@types.6"
176 elements="//@newElements.6"
177 supertypeInterpretation="//@partialtypeinterpratation.8"/>
178 <partialtypeinterpratation
179 interpretationOf="//@problemConainer/@types.7"
180 elements="//@newElements.8"
181 supertypeInterpretation="//@partialtypeinterpratation.8"/>
182 <partialtypeinterpratation
183 interpretationOf="//@problemConainer/@types.8"
184 elements="//@newElements.6 //@newElements.8"/>
185 <partialtypeinterpratation
186 interpretationOf="//@problemConainer/@types.11"
187 supertypeInterpretation="//@partialtypeinterpratation.1"/>
188 <openWorldElementPrototype
189 name="Symbolic New Element"/>
190 <problemConainer>
191 <types xsi:type="language:TypeDeclaration"
192 name="FunctionalElement class"
193 subtypes="//@problemConainer/@types.2"
194 isAbstract="true"/>
195 <types xsi:type="language:TypeDeclaration"
196 name="FunctionalArchitectureModel class"
197 subtypes="//@problemConainer/@types.10 //@problemConainer/@types.11"
198 isAbstract="true"/>
199 <types xsi:type="language:TypeDeclaration"
200 name="Function class"
201 supertypes="//@problemConainer/@types.0"/>
202 <types xsi:type="language:TypeDeclaration"
203 name="FAMTerminator class"/>
204 <types xsi:type="language:TypeDeclaration"
205 name="InformationLink class"/>
206 <types xsi:type="language:TypeDeclaration"
207 name="FunctionalInterface class"/>
208 <types xsi:type="language:TypeDeclaration"
209 name="FunctionalInput class"
210 supertypes="//@problemConainer/@types.8"/>
211 <types xsi:type="language:TypeDeclaration"
212 name="FunctionalOutput class"
213 supertypes="//@problemConainer/@types.8"/>
214 <types xsi:type="language:TypeDeclaration"
215 name="FunctionalData class"
216 subtypes="//@problemConainer/@types.6 //@problemConainer/@types.7"
217 isAbstract="true"/>
218 <types xsi:type="language:TypeDefinition"
219 name="FunctionType enum"
220 elements="//@problemConainer/@elements.0 //@problemConainer/@elements.1 //@problemConainer/@elements.2"/>
221 <types xsi:type="language:TypeDefinition"
222 name="FunctionalArchitectureModel class DefinedPart"
223 supertypes="//@problemConainer/@types.1"
224 elements="//@problemConainer/@elements.3"/>
225 <types xsi:type="language:TypeDeclaration"
226 name="FunctionalArchitectureModel class UndefinedPart"
227 supertypes="//@problemConainer/@types.1"/>
228 <relations
229 xsi:type="language:RelationDeclaration"
230 name="interface reference FunctionalElement">
231 <parameters
232 xsi:type="language:ComplexTypeReference"
233 referred="//@problemConainer/@types.0"/>
234 <parameters
235 xsi:type="language:ComplexTypeReference"
236 referred="//@problemConainer/@types.5"/>
237 </relations>
238 <relations
239 xsi:type="language:RelationDeclaration"
240 name="model reference FunctionalElement">
241 <parameters
242 xsi:type="language:ComplexTypeReference"
243 referred="//@problemConainer/@types.0"/>
244 <parameters
245 xsi:type="language:ComplexTypeReference"
246 referred="//@problemConainer/@types.1"/>
247 </relations>
248 <relations
249 xsi:type="language:RelationDeclaration"
250 name="parent reference FunctionalElement">
251 <parameters
252 xsi:type="language:ComplexTypeReference"
253 referred="//@problemConainer/@types.0"/>
254 <parameters
255 xsi:type="language:ComplexTypeReference"
256 referred="//@problemConainer/@types.2"/>
257 </relations>
258 <relations
259 xsi:type="language:RelationDeclaration"
260 name="rootElements reference FunctionalArchitectureModel">
261 <parameters
262 xsi:type="language:ComplexTypeReference"
263 referred="//@problemConainer/@types.1"/>
264 <parameters
265 xsi:type="language:ComplexTypeReference"
266 referred="//@problemConainer/@types.0"/>
267 </relations>
268 <relations
269 xsi:type="language:RelationDeclaration"
270 name="subElements reference Function">
271 <parameters
272 xsi:type="language:ComplexTypeReference"
273 referred="//@problemConainer/@types.2"/>
274 <parameters
275 xsi:type="language:ComplexTypeReference"
276 referred="//@problemConainer/@types.0"/>
277 </relations>
278 <relations
279 xsi:type="language:RelationDeclaration"
280 name="data reference FAMTerminator">
281 <parameters
282 xsi:type="language:ComplexTypeReference"
283 referred="//@problemConainer/@types.3"/>
284 <parameters
285 xsi:type="language:ComplexTypeReference"
286 referred="//@problemConainer/@types.8"/>
287 </relations>
288 <relations
289 xsi:type="language:RelationDeclaration"
290 name="from reference InformationLink">
291 <parameters
292 xsi:type="language:ComplexTypeReference"
293 referred="//@problemConainer/@types.4"/>
294 <parameters
295 xsi:type="language:ComplexTypeReference"
296 referred="//@problemConainer/@types.7"/>
297 </relations>
298 <relations
299 xsi:type="language:RelationDeclaration"
300 name="to reference InformationLink">
301 <parameters
302 xsi:type="language:ComplexTypeReference"
303 referred="//@problemConainer/@types.4"/>
304 <parameters
305 xsi:type="language:ComplexTypeReference"
306 referred="//@problemConainer/@types.6"/>
307 </relations>
308 <relations
309 xsi:type="language:RelationDeclaration"
310 name="data reference FunctionalInterface">
311 <parameters
312 xsi:type="language:ComplexTypeReference"
313 referred="//@problemConainer/@types.5"/>
314 <parameters
315 xsi:type="language:ComplexTypeReference"
316 referred="//@problemConainer/@types.8"/>
317 </relations>
318 <relations
319 xsi:type="language:RelationDeclaration"
320 name="element reference FunctionalInterface">
321 <parameters
322 xsi:type="language:ComplexTypeReference"
323 referred="//@problemConainer/@types.5"/>
324 <parameters
325 xsi:type="language:ComplexTypeReference"
326 referred="//@problemConainer/@types.0"/>
327 </relations>
328 <relations
329 xsi:type="language:RelationDeclaration"
330 name="IncomingLinks reference FunctionalInput">
331 <parameters
332 xsi:type="language:ComplexTypeReference"
333 referred="//@problemConainer/@types.6"/>
334 <parameters
335 xsi:type="language:ComplexTypeReference"
336 referred="//@problemConainer/@types.4"/>
337 </relations>
338 <relations
339 xsi:type="language:RelationDeclaration"
340 name="outgoingLinks reference FunctionalOutput">
341 <parameters
342 xsi:type="language:ComplexTypeReference"
343 referred="//@problemConainer/@types.7"/>
344 <parameters
345 xsi:type="language:ComplexTypeReference"
346 referred="//@problemConainer/@types.4"/>
347 </relations>
348 <relations
349 xsi:type="language:RelationDeclaration"
350 name="terminator reference FunctionalData">
351 <parameters
352 xsi:type="language:ComplexTypeReference"
353 referred="//@problemConainer/@types.8"/>
354 <parameters
355 xsi:type="language:ComplexTypeReference"
356 referred="//@problemConainer/@types.3"/>
357 </relations>
358 <relations
359 xsi:type="language:RelationDeclaration"
360 name="interface reference FunctionalData">
361 <parameters
362 xsi:type="language:ComplexTypeReference"
363 referred="//@problemConainer/@types.8"/>
364 <parameters
365 xsi:type="language:ComplexTypeReference"
366 referred="//@problemConainer/@types.5"/>
367 </relations>
368 <relations
369 xsi:type="language:RelationDeclaration"
370 name="type attribute Function">
371 <parameters
372 xsi:type="language:ComplexTypeReference"
373 referred="//@problemConainer/@types.2"/>
374 <parameters
375 xsi:type="language:ComplexTypeReference"
376 referred="//@problemConainer/@types.9"/>
377 </relations>
378 <elements
379 name="Root literal FunctionType"
380 definedInType="//@problemConainer/@types.9"/>
381 <elements
382 name="Intermediate literal FunctionType"
383 definedInType="//@problemConainer/@types.9"/>
384 <elements
385 name="Leaf literal FunctionType"
386 definedInType="//@problemConainer/@types.9"/>
387 <elements
388 name="o 1"
389 definedInType="//@problemConainer/@types.10"/>
390 <containmentHierarchies
391 typesOrderedInHierarchy="//@problemConainer/@types.2 //@problemConainer/@types.5 //@problemConainer/@types.0 //@problemConainer/@types.3 //@problemConainer/@types.7 //@problemConainer/@types.1 //@problemConainer/@types.4 //@problemConainer/@types.8 //@problemConainer/@types.6"
392 containmentRelations="//@problemConainer/@relations.0 //@problemConainer/@relations.3 //@problemConainer/@relations.4 //@problemConainer/@relations.8 //@problemConainer/@relations.11 //@problemConainer/@relations.12"/>
393 </problemConainer>
394</partialinterpretation:PartialInterpretation>
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/pom.xml b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/pom.xml
new file mode 100644
index 00000000..ac745ad3
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/pom.xml
@@ -0,0 +1,19 @@
1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3 <modelVersion>4.0.0</modelVersion>
4 <groupId>hu.bme.mit.inf.dslreasoner.visualisation</groupId>
5 <artifactId>hu.bme.mit.inf.dslreasoner.visualisation</artifactId>
6 <version>0.0.1-SNAPSHOT</version>
7 <dependencies>
8 <dependency>
9 <groupId>guru.nidi</groupId>
10 <artifactId>graphviz-java</artifactId>
11 <version>0.2.1</version>
12 </dependency>
13 <dependency>
14 <groupId>org.slf4j</groupId>
15 <artifactId>slf4j-nop</artifactId>
16 <version>1.7.25</version>
17 </dependency>
18 </dependencies>
19</project> \ No newline at end of file
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
new file mode 100644
index 00000000..a4baeadb
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
@@ -0,0 +1,239 @@
1package hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz
2
3import guru.nidi.graphviz.attribute.Arrow
4import guru.nidi.graphviz.attribute.Color
5import guru.nidi.graphviz.attribute.Shape
6import guru.nidi.graphviz.attribute.Style
7import guru.nidi.graphviz.engine.Format
8import guru.nidi.graphviz.engine.Graphviz
9import guru.nidi.graphviz.model.Graph
10import guru.nidi.graphviz.model.Label
11import guru.nidi.graphviz.model.Node
12import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
13import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation
14import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
15import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation
19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser
20import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
21import java.io.File
22import java.util.HashMap
23import java.util.HashSet
24import java.util.LinkedList
25import java.util.Random
26import java.util.Set
27
28import static guru.nidi.graphviz.model.Factory.*
29import static guru.nidi.graphviz.attribute.Records.*;
30
31import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
32import guru.nidi.graphviz.engine.Engine
33import guru.nidi.graphviz.attribute.Records
34import guru.nidi.graphviz.attribute.Attributes
35import java.util.List
36
37class GraphvizVisualisation implements PartialInterpretationVisualiser {
38
39 val TypeColoringStyle typeColoringStyle = TypeColoringStyle::AVERAGE;
40 val smallFontSize=9
41 val keywords = #{"class","reference","literal","enum"}
42
43 override visualiseConcretization(PartialInterpretation partialInterpretation) {
44 visualisePartialInterpretation(partialInterpretation,true)
45 }
46
47 override visualisePartialSolution(PartialInterpretation partialInterpretation) {
48 visualisePartialInterpretation(partialInterpretation,false)
49 }
50
51 def private visualisePartialInterpretation(PartialInterpretation partialInterpretation, boolean concretizationOnly) {
52 val problem = partialInterpretation.problem
53
54 // Elements of the partial solutions
55 val oldElements = problem.elements
56 val newElements = partialInterpretation.newElements
57 //val prototypeElements = #[partialInterpretation.openWorldElementPrototype]
58 val allElements = problem.elements + partialInterpretation.newElements
59
60 // Indexing types
61 val mustTypes = new HashMap<DefinedElement,Set<Type>>
62 val mayTypes = new HashMap<DefinedElement,Set<Type>>
63 for(element : allElements) {
64 mustTypes.put(element,new HashSet)
65 mayTypes.put(element,new HashSet)
66 }
67 for(typeDefinition: problem.types.filter(TypeDefinition)) {
68 for(element : typeDefinition.elements) {
69 mustTypes.get(element)+=typeDefinition
70 }
71 }
72 for(partialTypeInterpretations: partialInterpretation.partialtypeinterpratation) {
73 for(element : partialTypeInterpretations.elements) {
74 mustTypes.get(element)+=partialTypeInterpretations.interpretationOf
75 }
76 }
77
78 // Indexing references
79
80 // Drawing the nodes
81 val elements2Node = new HashMap
82 val elements2ID = new HashMap
83 for(oldElemenetIndex : 0..<oldElements.size) {
84 val oldElement = oldElements.get(oldElemenetIndex)
85 val id = '''o «oldElemenetIndex»'''
86 val image = drawElement(oldElement,id,true,oldElement.lookup(mustTypes),emptySet)
87 elements2ID.put(oldElement, id)
88 elements2Node.put(oldElement, image)
89 }
90 for(newElementIndex: 0..<newElements.size) {
91 val newElement = newElements.get(newElementIndex)
92 val id = '''n «newElementIndex»'''
93 val image = drawElement(newElement,id,false,newElement.lookup(mustTypes),emptySet)
94 elements2ID.put(newElement,id)
95 elements2Node.put(newElement,image)
96 }
97 // Prototype elements
98
99 // Drawing the edges
100 val edges = new HashMap
101 for(element : elements2Node.values) {
102 edges.put(element,new LinkedList)
103 }
104 for(relationInterpretation : partialInterpretation.partialrelationinterpretation) {
105 val type = relationInterpretation.interpretationOf
106 val isContainment = problem.containmentHierarchies.exists[it.containmentRelations.contains(type)]
107 for(link : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)) {
108 val sourceNode = link.param1.lookup(elements2Node)
109 val targetNode = link.param2.lookup(elements2Node)
110
111 val edge = drawEdge(link,type,targetNode,isContainment)
112 sourceNode.lookup(edges).add(edge)
113 }
114 }
115
116 val graph = graph("PartialInterpretation").directed.with(
117 edges.entrySet.map[entry | entry.key.link(entry.value)]
118 )
119
120 return new GraphvisVisualisation(graph)
121 }
122
123 def protected drawElement(DefinedElement element, String ID, boolean old, Set<Type> mustTypes, Set<Type> mayTypes) {
124 var tableStyle = ''' CELLSPACING="0" BORDER="2" CELLBORDER="0" CELLPADDING="1" STYLE="ROUNDED"'''
125 if(typeColoringStyle==TypeColoringStyle::AVERAGE) {
126 tableStyle += ''' BGCOLOR="#«typePredicateColor(mustTypes).toBackgroundColorString»"'''
127 }
128 val mainLabel = if(element.name !== null) {
129 val parts = element.name.split("\\s+")
130 textWithSubSup(parts.getOrNull(0),parts.getOrNull(1),parts.getOrNull(2),null)
131 } else {
132 val parts = ID.split("\\s+")
133 textWithSubSup(parts.get(0),parts.get(1),parts.getOrNull(2),null)
134 }
135 val label = Label.html(
136 '''<TABLE«tableStyle»>'''+
137 '''<TR><TD COLSPAN="2" BORDER="2" SIDES="B">«mainLabel»</TD></TR>'''+
138 '''«FOR mustTypeName : mustTypes.map[it.name].sort»«typePredicateDescription(mustTypeName,true)»«ENDFOR»'''+
139 '''«FOR mayTypeName : mayTypes.map[it.name].sort»«typePredicateDescription(mayTypeName,false)»«ENDFOR»'''+
140 '''</TABLE>''')
141
142 val node = node(ID).with(label).with(
143 Shape.NONE,
144 Attributes.attr("margin","0")
145 )
146 return node
147 }
148
149 protected def drawEdge(BinaryElementRelationLink link, Relation relation, Node to, boolean isContainemnt) {
150 val nameSegments = relation.name.split("\\s+")
151 var l = to(to).with(Label.html(textWithSubSup(nameSegments.getOrNull(0),nameSegments.getOrNull(1),nameSegments.getOrNull(2),null)))
152 if(isContainemnt) {
153 l = l.with(Style.BOLD)
154 }
155 return l
156 }
157
158 private def <T> getOrNull(List<T> list, int index) {
159 if(list.size>index) return list.get(index)
160 else return null
161 }
162
163 def private textWithSubSup(String text, String sub, String sup, String after) {
164 val actualText = text
165 val actualSub = if(sub===null) {" "} else {sub.checkAndHighlightKeyword}
166 val actualSup = if(sup==null) {" "} else {sup.checkAndHighlightKeyword}
167 val actualAfter = if(after === null) {""} else {
168 '''<TD ROWSPAN="2" ALIGN="LEFT">«after»</TD>'''
169 }
170 return
171 '''<FONT FACE="helvetica"><Table CELLSPACING="0" BORDER="0" CELLBORDER="0" CELLPADDING="0">'''+
172 '''<TR><TD ROWSPAN="2" ALIGN="RIGHT">«actualText»</TD><TD ALIGN="LEFT" VALIGN="BOTTOM"><FONT POINT-SIZE="«smallFontSize»">«actualSup»</FONT></TD>«actualAfter»</TR>'''+
173 '''<TR><TD ALIGN="LEFT" VALIGN="TOP"><FONT POINT-SIZE="«smallFontSize»">«actualSub»</FONT></TD></TR>'''+
174 '''</Table></FONT>'''
175 }
176 def checkAndHighlightKeyword(String word) {
177 if(keywords.contains(word)) {
178 return '''<B>«word»</B>'''
179 } else {
180 word
181 }
182 }
183 def typePredicateDescription(String typeName, boolean must)
184 {
185 val value = if(must){'''1'''} else{'''½'''}
186 val backgroundColor = if(this.typeColoringStyle == TypeColoringStyle.FLAG) {
187 ''' BGCOLOR="#«typeName.typePredicateColor.toBackgroundColorString»"'''
188 } else {
189 ""
190 }
191 val typeNameSegments = typeName.split("\\s+")
192 return '''<TR><TD«backgroundColor»>«textWithSubSup(typeNameSegments.getOrNull(0),typeNameSegments.getOrNull(1),typeNameSegments.getOrNull(2),null)»</TD><TD«backgroundColor»> = «value» </TD></TR>'''
193 }
194 def toBackgroundColorString(List<Integer> backgroundColor) {
195 '''«Integer.toHexString(backgroundColor.get(0))»«Integer.toHexString(backgroundColor.get(1))»«Integer.toHexString(backgroundColor.get(2))»'''
196 }
197 protected def typePredicateColor(Set<Type> types) { types.averageColor }
198 protected def typePredicateColor(String name) {
199 val Random random = new Random(name.hashCode+1)
200 val rangePicker = [|random.nextInt(128)+128]
201 return #[rangePicker.apply(), rangePicker.apply(), rangePicker.apply()]
202 }
203 private def averageColor(Set<Type> types) {
204 if(types.empty) {
205 return #[256,256,256]
206 } else {
207 val typeColors = types.filter[!it.isIsAbstract].map[typePredicateColor(it.name)]
208 return #[
209 typeColors.map[get(0)].average,
210 typeColors.map[get(1)].average,
211 typeColors.map[get(2)].average
212 ]
213 }
214 }
215 private def average(Iterable<Integer> doubles) { return doubles.reduce[p1, p2|p1+p2]/doubles.size }
216
217
218
219
220}
221
222enum TypeColoringStyle {
223 FLAG, AVERAGE
224}
225
226class GraphvisVisualisation implements PartialInterpretationVisualisation {
227 val private Graph graph
228
229 public new(Graph graph) {
230 this.graph = graph
231 }
232
233 override writeToFile(ReasonerWorkspace workspace, String name) {
234 val path = '''«workspace.workspaceURI.toFileString»/«name».png'''
235 Graphviz.fromGraph(graph)//.engine(Engine::NEATO)
236 .render(Format.PNG).toFile(new File(path));
237 }
238
239}
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/Test.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/Test.xtend
new file mode 100644
index 00000000..75187c26
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/Test.xtend
@@ -0,0 +1,24 @@
1package hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz
2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
4import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
5import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace
6import org.eclipse.emf.ecore.resource.Resource
7import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
8
9class Test {
10 def static void main(String[] args) {
11 val workspace = new FileSystemWorkspace("input/","")
12
13 PartialinterpretationPackage.eINSTANCE.eClass
14 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("*",new XMIResourceFactoryImpl)
15
16 val model = workspace.readModel(PartialInterpretation,"solution1.partialinterpretation")
17 println("loaded")
18 val translator = new GraphvizVisualisation
19 val visualisation = translator.visualiseConcretization(model)
20 println("visualised")
21 visualisation.writeToFile(workspace,"output")
22 println("saved")
23 }
24} \ No newline at end of file
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/xtend-gen/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/.gitignore b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/xtend-gen/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/.gitignore
new file mode 100644
index 00000000..66ab25b3
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/xtend-gen/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/.gitignore
@@ -0,0 +1,10 @@
1/.GraphvisVisualisation.java._trace
2/.GraphvizVisualisation.java._trace
3/.PartialInterpretation2Graphviz.xtendbin
4/.Test.java._trace
5/.Test.xtendbin
6/.TypeColoringStyle.java._trace
7/GraphvisVisualisation.java
8/GraphvizVisualisation.java
9/Test.java
10/TypeColoringStyle.java