aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java')
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java31
1 files changed, 16 insertions, 15 deletions
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 3fbc5d2d..f05abc45 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
@@ -1,11 +1,12 @@
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 */
6package tools.refinery.language.web.semantics.metadata; 6package tools.refinery.language.web.semantics.metadata;
7 7
8import com.google.inject.Inject; 8import com.google.inject.Inject;
9import com.google.inject.Provider;
9import org.eclipse.emf.ecore.EObject; 10import org.eclipse.emf.ecore.EObject;
10import org.eclipse.xtext.naming.IQualifiedNameConverter; 11import org.eclipse.xtext.naming.IQualifiedNameConverter;
11import org.eclipse.xtext.naming.IQualifiedNameProvider; 12import org.eclipse.xtext.naming.IQualifiedNameProvider;
@@ -18,6 +19,7 @@ import tools.refinery.language.semantics.TracedException;
18import tools.refinery.language.utils.ProblemUtil; 19import tools.refinery.language.utils.ProblemUtil;
19import tools.refinery.store.model.Model; 20import tools.refinery.store.model.Model;
20import tools.refinery.store.reasoning.ReasoningAdapter; 21import tools.refinery.store.reasoning.ReasoningAdapter;
22import tools.refinery.store.reasoning.literal.Concreteness;
21import tools.refinery.store.reasoning.representation.PartialRelation; 23import tools.refinery.store.reasoning.representation.PartialRelation;
22 24
23import java.util.ArrayList; 25import java.util.ArrayList;
@@ -35,10 +37,11 @@ public class MetadataCreator {
35 @Inject 37 @Inject
36 private IQualifiedNameConverter qualifiedNameConverter; 38 private IQualifiedNameConverter qualifiedNameConverter;
37 39
38 private ProblemTrace problemTrace; 40 @Inject
41 private Provider<NodeMetadataFactory> nodeMetadataFactoryProvider;
39 42
43 private ProblemTrace problemTrace;
40 private IScope nodeScope; 44 private IScope nodeScope;
41
42 private IScope relationScope; 45 private IScope relationScope;
43 46
44 public void setProblemTrace(ProblemTrace problemTrace) { 47 public void setProblemTrace(ProblemTrace problemTrace) {
@@ -51,37 +54,35 @@ public class MetadataCreator {
51 relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__RELATION); 54 relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__RELATION);
52 } 55 }
53 56
54 public static String unnamedNode(int nodeId) { 57 public List<NodeMetadata> getNodesMetadata(Model model, Concreteness concreteness) {
55 return "::" + nodeId;
56 }
57
58 public List<NodeMetadata> getNodesMetadata(Model model, boolean preserveNewNodes) {
59 int nodeCount = model.getAdapter(ReasoningAdapter.class).getNodeCount(); 58 int nodeCount = model.getAdapter(ReasoningAdapter.class).getNodeCount();
60 var nodeTrace = problemTrace.getNodeTrace(); 59 var nodeTrace = problemTrace.getNodeTrace();
61 var nodes = new NodeMetadata[Math.max(nodeTrace.size(), nodeCount)]; 60 var nodes = new NodeMetadata[Math.max(nodeTrace.size(), nodeCount)];
61 var nodeMetadataFactory = nodeMetadataFactoryProvider.get();
62 nodeMetadataFactory.initialize(problemTrace, concreteness, model);
63 boolean preserveNewNodes = concreteness == Concreteness.PARTIAL;
62 for (var entry : nodeTrace.keyValuesView()) { 64 for (var entry : nodeTrace.keyValuesView()) {
63 var node = entry.getOne(); 65 var node = entry.getOne();
64 var id = entry.getTwo(); 66 var id = entry.getTwo();
65 nodes[id] = getNodeMetadata(id, node, preserveNewNodes); 67 nodes[id] = getNodeMetadata(id, node, preserveNewNodes, nodeMetadataFactory);
66 } 68 }
67 for (int i = 0; i < nodes.length; i++) { 69 for (int i = 0; i < nodes.length; i++) {
68 if (nodes[i] == null) { 70 if (nodes[i] == null) {
69 var nodeName = unnamedNode(i); 71 nodes[i] = nodeMetadataFactory.createFreshlyNamedMetadata(i);
70 nodes[i] = new NodeMetadata(nodeName, nodeName, NodeKind.IMPLICIT);
71 } 72 }
72 } 73 }
73 return List.of(nodes); 74 return List.of(nodes);
74 } 75 }
75 76
76 private NodeMetadata getNodeMetadata(int nodeId, Node node, boolean preserveNewNodes) { 77 private NodeMetadata getNodeMetadata(int nodeId, Node node, boolean preserveNewNodes,
78 NodeMetadataFactory nodeMetadataFactory) {
77 var kind = getNodeKind(node); 79 var kind = getNodeKind(node);
78 if (!preserveNewNodes && kind == NodeKind.NEW) { 80 if (!preserveNewNodes && kind == NodeKind.NEW) {
79 var nodeName = unnamedNode(nodeId); 81 return nodeMetadataFactory.createFreshlyNamedMetadata(nodeId);
80 return new NodeMetadata(nodeName, nodeName, NodeKind.IMPLICIT);
81 } 82 }
82 var qualifiedName = getQualifiedName(node); 83 var qualifiedName = getQualifiedName(node);
83 var simpleName = getSimpleName(node, qualifiedName, nodeScope); 84 var simpleName = getSimpleName(node, qualifiedName, nodeScope);
84 return new NodeMetadata(qualifiedNameConverter.toString(qualifiedName), 85 return nodeMetadataFactory.doCreateMetadata(nodeId, qualifiedNameConverter.toString(qualifiedName),
85 qualifiedNameConverter.toString(simpleName), getNodeKind(node)); 86 qualifiedNameConverter.toString(simpleName), getNodeKind(node));
86 } 87 }
87 88