aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java')
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java63
1 files changed, 24 insertions, 39 deletions
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
index fb89bea6..44974869 100644
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
+++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
@@ -15,16 +15,11 @@ import org.eclipse.xtext.validation.FeatureBasedDiagnostic;
15import org.eclipse.xtext.validation.IDiagnosticConverter; 15import org.eclipse.xtext.validation.IDiagnosticConverter;
16import org.eclipse.xtext.validation.Issue; 16import org.eclipse.xtext.validation.Issue;
17import org.eclipse.xtext.web.server.validation.ValidationResult; 17import org.eclipse.xtext.web.server.validation.ValidationResult;
18import tools.refinery.generator.ModelSemantics;
19import tools.refinery.generator.ModelSemanticsFactory;
18import tools.refinery.language.model.problem.Problem; 20import tools.refinery.language.model.problem.Problem;
19import tools.refinery.language.semantics.metadata.MetadataCreator; 21import tools.refinery.language.web.semantics.metadata.MetadataCreator;
20import tools.refinery.language.semantics.model.ModelInitializer; 22import tools.refinery.language.semantics.TracedException;
21import tools.refinery.language.semantics.model.TracedException;
22import tools.refinery.store.dse.propagation.PropagationAdapter;
23import tools.refinery.store.model.ModelStore;
24import tools.refinery.store.query.interpreter.QueryInterpreterAdapter;
25import tools.refinery.store.reasoning.ReasoningAdapter;
26import tools.refinery.store.reasoning.ReasoningStoreAdapter;
27import tools.refinery.store.reasoning.literal.Concreteness;
28import tools.refinery.store.reasoning.translator.TranslationException; 23import tools.refinery.store.reasoning.translator.TranslationException;
29import tools.refinery.store.util.CancellationToken; 24import tools.refinery.store.util.CancellationToken;
30 25
@@ -35,20 +30,20 @@ class SemanticsWorker implements Callable<SemanticsResult> {
35 private static final String DIAGNOSTIC_ID = "tools.refinery.language.semantics.SemanticError"; 30 private static final String DIAGNOSTIC_ID = "tools.refinery.language.semantics.SemanticError";
36 31
37 @Inject 32 @Inject
38 private PartialInterpretation2Json partialInterpretation2Json;
39
40 @Inject
41 private OperationCanceledManager operationCanceledManager; 33 private OperationCanceledManager operationCanceledManager;
42 34
43 @Inject 35 @Inject
44 private IDiagnosticConverter diagnosticConverter; 36 private IDiagnosticConverter diagnosticConverter;
45 37
46 @Inject 38 @Inject
47 private ModelInitializer initializer; 39 private ModelSemanticsFactory semanticsFactory;
48 40
49 @Inject 41 @Inject
50 private MetadataCreator metadataCreator; 42 private MetadataCreator metadataCreator;
51 43
44 @Inject
45 private PartialInterpretation2Json partialInterpretation2Json;
46
52 private Problem problem; 47 private Problem problem;
53 48
54 private CancellationToken cancellationToken; 49 private CancellationToken cancellationToken;
@@ -64,36 +59,26 @@ class SemanticsWorker implements Callable<SemanticsResult> {
64 59
65 @Override 60 @Override
66 public SemanticsResult call() { 61 public SemanticsResult call() {
67 var builder = ModelStore.builder()
68 .cancellationToken(cancellationToken)
69 .with(QueryInterpreterAdapter.builder())
70 .with(PropagationAdapter.builder())
71 .with(ReasoningAdapter.builder()
72 .requiredInterpretations(Concreteness.PARTIAL));
73 cancellationToken.checkCancelled(); 62 cancellationToken.checkCancelled();
63 ModelSemantics semantics;
74 try { 64 try {
75 var modelSeed = initializer.createModel(problem, builder); 65 semantics = semanticsFactory.cancellationToken(cancellationToken).createSemantics(problem);
76 cancellationToken.checkCancelled();
77 metadataCreator.setInitializer(initializer);
78 cancellationToken.checkCancelled();
79 var nodesMetadata = metadataCreator.getNodesMetadata();
80 cancellationToken.checkCancelled();
81 var relationsMetadata = metadataCreator.getRelationsMetadata();
82 cancellationToken.checkCancelled();
83 var store = builder.build();
84 cancellationToken.checkCancelled();
85 var model = store.getAdapter(ReasoningStoreAdapter.class).createInitialModel(modelSeed);
86 cancellationToken.checkCancelled();
87 var partialInterpretation = partialInterpretation2Json.getPartialInterpretation(initializer, model,
88 Concreteness.PARTIAL, cancellationToken);
89
90 return new SemanticsSuccessResult(nodesMetadata, relationsMetadata, partialInterpretation);
91 } catch (TracedException e) {
92 return getTracedErrorResult(e.getSourceElement(), e.getMessage());
93 } catch (TranslationException e) { 66 } catch (TranslationException e) {
94 var sourceElement = initializer.getInverseTrace(e.getPartialSymbol()); 67 return new SemanticsInternalErrorResult(e.getMessage());
95 return getTracedErrorResult(sourceElement, e.getMessage()); 68 } catch (TracedException e) {
69 var cause = e.getCause();
70 // Suppress the type of the cause exception.
71 var message = cause == null ? e.getMessage() : cause.getMessage();
72 return getTracedErrorResult(e.getSourceElement(), message);
96 } 73 }
74 cancellationToken.checkCancelled();
75 metadataCreator.setProblemTrace(semantics.getProblemTrace());
76 var nodesMetadata = metadataCreator.getNodesMetadata(semantics.getModel(), true);
77 cancellationToken.checkCancelled();
78 var relationsMetadata = metadataCreator.getRelationsMetadata();
79 cancellationToken.checkCancelled();
80 var partialInterpretation = partialInterpretation2Json.getPartialInterpretation(semantics, cancellationToken);
81 return new SemanticsSuccessResult(nodesMetadata, relationsMetadata, partialInterpretation);
97 } 82 }
98 83
99 private SemanticsResult getTracedErrorResult(EObject sourceElement, String message) { 84 private SemanticsResult getTracedErrorResult(EObject sourceElement, String message) {