aboutsummaryrefslogtreecommitdiffstats
path: root/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
diff options
context:
space:
mode:
Diffstat (limited to 'language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java')
-rw-r--r--language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java89
1 files changed, 89 insertions, 0 deletions
diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
new file mode 100644
index 00000000..edb25a1c
--- /dev/null
+++ b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java
@@ -0,0 +1,89 @@
1package org.eclipse.viatra.solver.language.resource;
2
3import org.eclipse.emf.ecore.EObject;
4import org.eclipse.viatra.solver.language.ProblemUtil;
5import org.eclipse.viatra.solver.language.model.problem.NamedElement;
6import org.eclipse.viatra.solver.language.model.problem.Node;
7import org.eclipse.viatra.solver.language.model.problem.Problem;
8import org.eclipse.viatra.solver.language.model.problem.Variable;
9import org.eclipse.xtext.EcoreUtil2;
10import org.eclipse.xtext.naming.IQualifiedNameConverter;
11import org.eclipse.xtext.naming.QualifiedName;
12import org.eclipse.xtext.resource.EObjectDescription;
13import org.eclipse.xtext.resource.IEObjectDescription;
14import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy;
15import org.eclipse.xtext.util.IAcceptor;
16
17import com.google.inject.Inject;
18import com.google.inject.Singleton;
19
20@Singleton
21public class ProblemResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy {
22 @Inject
23 private IQualifiedNameConverter qualifiedNameConverter;
24
25 @Override
26 public boolean createEObjectDescriptions(EObject eObject, IAcceptor<IEObjectDescription> acceptor) {
27 if (eObject instanceof Variable) {
28 return false;
29 }
30 if (eObject instanceof NamedElement) {
31 NamedElement namedElement = (NamedElement) eObject;
32 String name = namedElement.getName();
33 if (name == null || name.isEmpty()) {
34 return true;
35 }
36 Problem problem = EcoreUtil2.getContainerOfType(namedElement, Problem.class);
37 QualifiedName problemQualifiedName = null;
38 if (problem != null) {
39 String problemName = problem.getName();
40 if (problemName != null && !problemName.isEmpty()) {
41 problemQualifiedName = qualifiedNameConverter.toQualifiedName(problemName);
42 }
43 }
44 QualifiedName qualifiedName = qualifiedNameConverter.toQualifiedName(namedElement.getName());
45 boolean nameExported;
46 if (shouldExportSimpleName(namedElement)) {
47 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor);
48 nameExported = true;
49 } else {
50 nameExported = false;
51 }
52 EObject parent = namedElement.eContainer();
53 while (parent != null && parent != problem) {
54 if (parent instanceof NamedElement) {
55 NamedElement namedParent = (NamedElement) parent;
56 String parentName = namedParent.getName();
57 if (parentName != null || !name.isEmpty()) {
58 QualifiedName parentQualifiedName = qualifiedNameConverter.toQualifiedName(parentName);
59 qualifiedName = parentQualifiedName.append(qualifiedName);
60 if (shouldExportSimpleName(parent)) {
61 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor);
62 nameExported = true;
63 } else {
64 nameExported = false;
65 }
66 }
67 }
68 parent = parent.eContainer();
69 }
70 if (!nameExported) {
71 acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor);
72 }
73 }
74 return true;
75 }
76
77 protected boolean shouldExportSimpleName(EObject eObject) {
78 if (eObject instanceof Node) {
79 return !ProblemUtil.isNewNode((Node) eObject);
80 }
81 return true;
82 }
83
84 private void acceptEObjectDescription(EObject eObject, QualifiedName prefix, QualifiedName qualifiedName,
85 IAcceptor<IEObjectDescription> acceptor) {
86 QualifiedName qualifiedNameWithPrefix = prefix == null ? qualifiedName : prefix.append(qualifiedName);
87 acceptor.accept(EObjectDescription.create(qualifiedNameWithPrefix, eObject));
88 }
89}