aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-dse-visualization
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-07 20:44:48 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-07 20:44:48 +0200
commitdf8ebe6dae2203513240a3b001fabc2b8b34d505 (patch)
tree5f642cda936c190f2f5525992f17a05be2491920 /subprojects/store-dse-visualization
parentfeat: declarative DSE rules and model refinement (diff)
parentAdd missing copyright headers (diff)
downloadrefinery-df8ebe6dae2203513240a3b001fabc2b8b34d505.tar.gz
refinery-df8ebe6dae2203513240a3b001fabc2b8b34d505.tar.zst
refinery-df8ebe6dae2203513240a3b001fabc2b8b34d505.zip
Merge remote-tracking branch 'nagilooh/datastructure' into partial-interpretation
Diffstat (limited to 'subprojects/store-dse-visualization')
-rw-r--r--subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/ModelVisualizerAdapter.java13
-rw-r--r--subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/internal/ModelVisualizerAdapterImpl.java61
-rw-r--r--subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/VisualizationStore.java18
-rw-r--r--subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/internal/VisualizationStoreImpl.java51
4 files changed, 75 insertions, 68 deletions
diff --git a/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/ModelVisualizerAdapter.java b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/ModelVisualizerAdapter.java
index ae87d8ac..ad80bbc6 100644
--- a/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/ModelVisualizerAdapter.java
+++ b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/ModelVisualizerAdapter.java
@@ -9,6 +9,7 @@ import tools.refinery.store.adapter.ModelAdapter;
9import tools.refinery.store.map.Version; 9import tools.refinery.store.map.Version;
10import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
11import tools.refinery.visualization.internal.ModelVisualizerBuilderImpl; 11import tools.refinery.visualization.internal.ModelVisualizerBuilderImpl;
12import tools.refinery.visualization.statespace.VisualizationStore;
12 13
13import java.util.Collection; 14import java.util.Collection;
14 15
@@ -18,15 +19,5 @@ public interface ModelVisualizerAdapter extends ModelAdapter {
18 static ModelVisualizerBuilder builder() { 19 static ModelVisualizerBuilder builder() {
19 return new ModelVisualizerBuilderImpl(); 20 return new ModelVisualizerBuilderImpl();
20 } 21 }
21 22 void visualize(VisualizationStore visualizationStore);
22 public void addTransition(Version from, Version to, String action);
23
24
25 public void addTransition(Version from, Version to, String action, Tuple activation);
26 public void addState(Version state);
27 public void addState(Version state, Collection<Double> fitness);
28 public void addState(Version state, String label);
29 public void addSolution(Version state);
30 public void visualize();
31
32} 23}
diff --git a/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/internal/ModelVisualizerAdapterImpl.java b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/internal/ModelVisualizerAdapterImpl.java
index 531969b4..031b2e6b 100644
--- a/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/internal/ModelVisualizerAdapterImpl.java
+++ b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/internal/ModelVisualizerAdapterImpl.java
@@ -13,6 +13,7 @@ import tools.refinery.store.representation.TruthValue;
13import tools.refinery.store.tuple.Tuple; 13import tools.refinery.store.tuple.Tuple;
14import tools.refinery.visualization.ModelVisualizerAdapter; 14import tools.refinery.visualization.ModelVisualizerAdapter;
15import tools.refinery.visualization.ModelVisualizerStoreAdapter; 15import tools.refinery.visualization.ModelVisualizerStoreAdapter;
16import tools.refinery.visualization.statespace.VisualizationStore;
16 17
17import java.io.*; 18import java.io.*;
18import java.util.*; 19import java.util.*;
@@ -281,62 +282,6 @@ public class ModelVisualizerAdapterImpl implements ModelVisualizerAdapter {
281 return true; 282 return true;
282 } 283 }
283 284
284 @Override
285 public void addTransition(Version from, Version to, String action) {
286 designSpaceBuilder.append(states.get(from)).append(" -> ").append(states.get(to))
287 .append(" [label=\"").append(transitionCounter++).append(": ").append(action).append("\"]\n");
288 }
289
290 @Override
291 public void addTransition(Version from, Version to, String action, Tuple activation) {
292 designSpaceBuilder.append(states.get(from)).append(" -> ").append(states.get(to))
293 .append(" [label=\"").append(transitionCounter++).append(": ").append(action).append(" / ");
294
295
296 for (int i = 0; i < activation.getSize(); i++) {
297 designSpaceBuilder.append(activation.get(i));
298 if (i < activation.getSize() - 1) {
299 designSpaceBuilder.append(", ");
300 }
301 }
302 designSpaceBuilder.append("\"]\n");
303 }
304
305 @Override
306 public void addState(Version state) {
307 if (states.containsKey(state)) {
308 return;
309 }
310 states.put(state, numberOfStates++);
311 designSpaceBuilder.append(states.get(state)).append(" [URL=\"./").append(states.get(state)).append(".svg\"]\n");
312 }
313
314 @Override
315 public void addState(Version state, Collection<Double> fitness) {
316 var labelBuilder = new StringBuilder();
317 for (var f : fitness) {
318 labelBuilder.append(f).append(", ");
319 }
320 addState(state, labelBuilder.toString());
321 }
322
323 @Override
324 public void addState(Version state, String label) {
325 if (states.containsKey(state)) {
326 return;
327 }
328 states.put(state, numberOfStates++);
329 designSpaceBuilder.append(states.get(state)).append(" [label = \"").append(states.get(state)).append(" (");
330 designSpaceBuilder.append(label);
331 designSpaceBuilder.append(")\"\n").append("URL=\"./").append(states.get(state)).append(".svg\"]\n");
332 }
333
334 @Override
335 public void addSolution(Version state) {
336 addState(state);
337 designSpaceBuilder.append(states.get(state)).append(" [shape = doublecircle]\n");
338 }
339
340 private String buildDesignSpaceDot() { 285 private String buildDesignSpaceDot() {
341 designSpaceBuilder.append("}"); 286 designSpaceBuilder.append("}");
342 return designSpaceBuilder.toString(); 287 return designSpaceBuilder.toString();
@@ -381,7 +326,9 @@ public class ModelVisualizerAdapterImpl implements ModelVisualizerAdapter {
381 } 326 }
382 327
383 @Override 328 @Override
384 public void visualize() { 329 public void visualize(VisualizationStore visualizationStore) {
330 this.designSpaceBuilder.append(visualizationStore.getDesignSpaceStringBuilder());
331 this.states.putAll(visualizationStore.getStates());
385 renderDesignSpace(outputPath, formats); 332 renderDesignSpace(outputPath, formats);
386 } 333 }
387} 334}
diff --git a/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/VisualizationStore.java b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/VisualizationStore.java
new file mode 100644
index 00000000..414ef737
--- /dev/null
+++ b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/VisualizationStore.java
@@ -0,0 +1,18 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.visualization.statespace;
7
8import tools.refinery.store.map.Version;
9
10import java.util.Map;
11
12public interface VisualizationStore {
13 void addState(Version state, String label);
14 void addSolution(Version state);
15 void addTransition(Version from, Version to, String label);
16 StringBuilder getDesignSpaceStringBuilder();
17 Map<Version, Integer> getStates();
18}
diff --git a/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/internal/VisualizationStoreImpl.java b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/internal/VisualizationStoreImpl.java
new file mode 100644
index 00000000..08a69cb4
--- /dev/null
+++ b/subprojects/store-dse-visualization/src/main/java/tools/refinery/visualization/statespace/internal/VisualizationStoreImpl.java
@@ -0,0 +1,51 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.visualization.statespace.internal;
7
8import tools.refinery.store.map.Version;
9import tools.refinery.visualization.statespace.VisualizationStore;
10
11import java.util.HashMap;
12import java.util.Map;
13
14public class VisualizationStoreImpl implements VisualizationStore {
15
16 private final Map<Version, Integer> states = new HashMap<>();
17 private int transitionCounter = 0;
18 private Integer numberOfStates = 0;
19 private final StringBuilder designSpaceBuilder = new StringBuilder();
20
21 @Override
22 public synchronized void addState(Version state, String label) {
23 if (states.containsKey(state)) {
24 return;
25 }
26 states.put(state, numberOfStates++);
27 designSpaceBuilder.append(states.get(state)).append(" [label = \"").append(states.get(state)).append(" (");
28 designSpaceBuilder.append(label);
29 designSpaceBuilder.append(")\"\n").append("URL=\"./").append(states.get(state)).append(".svg\"]\n");
30 }
31
32 @Override
33 public synchronized void addSolution(Version state) {
34 designSpaceBuilder.append(states.get(state)).append(" [peripheries = 2]\n");
35 }
36
37 @Override
38 public synchronized void addTransition(Version from, Version to, String label) {
39 designSpaceBuilder.append(states.get(from)).append(" -> ").append(states.get(to))
40 .append(" [label=\"").append(transitionCounter++).append(": ").append(label).append("\"]\n");
41 }
42
43 public synchronized StringBuilder getDesignSpaceStringBuilder() {
44 return designSpaceBuilder;
45 }
46
47 @Override
48 public Map<Version, Integer> getStates() {
49 return states;
50 }
51}