1 package org.simantics.tests.modelled.ui;
3 import java.io.IOException;
5 import org.eclipse.ui.IPersistableElement;
6 import org.simantics.Simantics;
7 import org.simantics.db.ReadGraph;
8 import org.simantics.db.Resource;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.common.request.UnaryRead;
11 import org.simantics.db.common.request.WriteRequest;
12 import org.simantics.db.exception.DatabaseException;
13 import org.simantics.scl.compiler.errors.Failable;
14 import org.simantics.scl.compiler.module.Module;
15 import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
16 import org.simantics.scl.compiler.module.repository.ModuleRepository;
17 import org.simantics.scl.compiler.module.repository.UpdateListener;
18 import org.simantics.scl.compiler.source.ModuleSource;
19 import org.simantics.scl.compiler.source.TextualModuleSource;
20 import org.simantics.scl.ui.editor2.StandardSCLModuleEditorInput;
21 import org.simantics.tests.modelled.ontology.TestsResource;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
25 public class STSTestEditorInput extends StandardSCLModuleEditorInput {
27 private static final Logger LOGGER = LoggerFactory.getLogger(STSTestEditorInput.class);
29 public STSTestEditorInput(String moduleName) {
34 public boolean exists() {
38 @SuppressWarnings("unchecked")
40 public <T> T getAdapter(Class<T> adapter) {
41 if(adapter.equals(ModuleSource.class))
43 return (T) Simantics.getSession().syncRequest(new ReadSTSModuleSource(getModuleName()));
44 } catch (DatabaseException e) {
47 if(adapter.equals(IPersistableElement.class))
53 private static class STSTextualModuleSource extends TextualModuleSource {
55 private String moduleText;
57 public STSTextualModuleSource(String stsModuleURI, String moduleText) {
59 this.moduleText = moduleText;
63 public void update(String newSourceText) {
65 Simantics.getSession().syncRequest(new WriteSTSModuleSource(getModuleName(), newSourceText));
66 } catch (DatabaseException e) {
72 public Failable<Module> compileModule(ModuleRepository environment, UpdateListener listener, ModuleCompilationOptions options) {
73 return super.compileModule(environment, listener, options);
77 public boolean isUpdateable() {
82 public String getSourceText(UpdateListener listener) throws IOException {
87 static class ReadSTSModuleSource extends UnaryRead<String, ModuleSource> {
89 public ReadSTSModuleSource(String moduleName) {
94 public ModuleSource perform(ReadGraph graph) throws DatabaseException {
95 Resource moduleResource = graph.getPossibleResource(parameter);
96 if(moduleResource == null)
98 TestsResource TESTS = TestsResource.getInstance(graph);
99 if(!graph.isInstanceOf(moduleResource, TESTS.STSTest))
101 String text = graph.getRelatedValue(moduleResource, TESTS.STSTest_definition);
102 return new STSTextualModuleSource(parameter, text);
106 static class WriteSTSModuleSource extends WriteRequest {
107 private final String moduleURI;
108 private final String sourceText;
110 public WriteSTSModuleSource(String moduleURI, String sourceText) {
111 this.moduleURI = moduleURI;
112 this.sourceText = sourceText;
116 public void perform(WriteGraph graph) throws DatabaseException {
117 Resource moduleResource = graph.getPossibleResource(moduleURI);
118 if(moduleResource == null)
120 TestsResource TESTS = TestsResource.getInstance(graph);
121 if(!graph.isInstanceOf(moduleResource, TESTS.STSTest))
123 graph.claimLiteral(moduleResource, TESTS.STSTest_definition, sourceText);
128 public String getFactoryId() {
129 return "org.simantics.tests.modelled.ui.stseditor.inputFactory";