diff options
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.java | 31 |
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 | */ |
6 | package tools.refinery.language.web.semantics.metadata; | 6 | package tools.refinery.language.web.semantics.metadata; |
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import com.google.inject.Provider; | ||
9 | import org.eclipse.emf.ecore.EObject; | 10 | import org.eclipse.emf.ecore.EObject; |
10 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | 11 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
11 | import org.eclipse.xtext.naming.IQualifiedNameProvider; | 12 | import org.eclipse.xtext.naming.IQualifiedNameProvider; |
@@ -18,6 +19,7 @@ import tools.refinery.language.semantics.TracedException; | |||
18 | import tools.refinery.language.utils.ProblemUtil; | 19 | import tools.refinery.language.utils.ProblemUtil; |
19 | import tools.refinery.store.model.Model; | 20 | import tools.refinery.store.model.Model; |
20 | import tools.refinery.store.reasoning.ReasoningAdapter; | 21 | import tools.refinery.store.reasoning.ReasoningAdapter; |
22 | import tools.refinery.store.reasoning.literal.Concreteness; | ||
21 | import tools.refinery.store.reasoning.representation.PartialRelation; | 23 | import tools.refinery.store.reasoning.representation.PartialRelation; |
22 | 24 | ||
23 | import java.util.ArrayList; | 25 | import 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 | ||