1 package org.simantics.tests.modelled.ui;
3 import java.io.IOException;
5 import java.io.StringReader;
7 import org.eclipse.ui.IPersistableElement;
8 import org.simantics.Simantics;
9 import org.simantics.db.ReadGraph;
10 import org.simantics.db.Resource;
11 import org.simantics.db.WriteGraph;
12 import org.simantics.db.common.request.UnaryRead;
13 import org.simantics.db.common.request.WriteRequest;
14 import org.simantics.db.exception.DatabaseException;
15 import org.simantics.scl.compiler.errors.Failable;
16 import org.simantics.scl.compiler.module.Module;
17 import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
18 import org.simantics.scl.compiler.module.repository.ModuleRepository;
19 import org.simantics.scl.compiler.module.repository.UpdateListener;
20 import org.simantics.scl.compiler.source.ModuleSource;
21 import org.simantics.scl.compiler.source.TextualModuleSource;
22 import org.simantics.scl.ui.editor2.StandardSCLModuleEditorInput;
23 import org.simantics.tests.modelled.ontology.TestsResource;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 public class STSTestEditorInput extends StandardSCLModuleEditorInput {
29 private static final Logger LOGGER = LoggerFactory.getLogger(STSTestEditorInput.class);
31 public STSTestEditorInput(String moduleName) {
36 public boolean exists() {
40 @SuppressWarnings("unchecked")
42 public <T> T getAdapter(Class<T> adapter) {
43 if(adapter.equals(ModuleSource.class))
45 return (T) Simantics.getSession().syncRequest(new ReadSTSModuleSource(getModuleName()));
46 } catch (DatabaseException e) {
49 if(adapter.equals(IPersistableElement.class))
55 private static class STSTextualModuleSource extends TextualModuleSource {
57 private String moduleText;
59 public STSTextualModuleSource(String stsModuleURI, String moduleText) {
61 this.moduleText = moduleText;
65 public void update(String newSourceText) {
67 Simantics.getSession().syncRequest(new WriteSTSModuleSource(getModuleName(), newSourceText));
68 } catch (DatabaseException e) {
74 public Failable<Module> compileModule(ModuleRepository environment, UpdateListener listener, ModuleCompilationOptions options) {
75 return super.compileModule(environment, listener, options);
79 public boolean isUpdateable() {
84 protected Reader getSourceReader(UpdateListener listener) throws IOException {
85 return new StringReader(moduleText);
89 static class ReadSTSModuleSource extends UnaryRead<String, ModuleSource> {
91 public ReadSTSModuleSource(String moduleName) {
96 public ModuleSource perform(ReadGraph graph) throws DatabaseException {
97 Resource moduleResource = graph.getPossibleResource(parameter);
98 if(moduleResource == null)
100 TestsResource TESTS = TestsResource.getInstance(graph);
101 if(!graph.isInstanceOf(moduleResource, TESTS.STSTest))
103 String text = graph.getRelatedValue(moduleResource, TESTS.STSTest_definition);
104 return new STSTextualModuleSource(parameter, text);
108 static class WriteSTSModuleSource extends WriteRequest {
109 private final String moduleURI;
110 private final String sourceText;
112 public WriteSTSModuleSource(String moduleURI, String sourceText) {
113 this.moduleURI = moduleURI;
114 this.sourceText = sourceText;
118 public void perform(WriteGraph graph) throws DatabaseException {
119 Resource moduleResource = graph.getPossibleResource(moduleURI);
120 if(moduleResource == null)
122 TestsResource TESTS = TestsResource.getInstance(graph);
123 if(!graph.isInstanceOf(moduleResource, TESTS.STSTest))
125 graph.claimLiteral(moduleResource, TESTS.STSTest_definition, sourceText);
130 public String getFactoryId() {
131 return "org.simantics.tests.modelled.ui.stseditor.inputFactory";