X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.tests.modelled.ui%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Fui%2FSTSTestEditorInput.java;fp=bundles%2Forg.simantics.tests.modelled.ui%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Fui%2FSTSTestEditorInput.java;h=d057daccb45d42c18036da9c1d465899ae6d2196;hp=0000000000000000000000000000000000000000;hb=f03893d9b643eae3f03debf7a656edbfa5b9b501;hpb=51006ffec13cbf8e0d9c8b07212d69478e4bdd4e diff --git a/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestEditorInput.java b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestEditorInput.java new file mode 100644 index 000000000..d057daccb --- /dev/null +++ b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestEditorInput.java @@ -0,0 +1,134 @@ +package org.simantics.tests.modelled.ui; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; + +import org.eclipse.ui.IPersistableElement; +import org.simantics.Simantics; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.UnaryRead; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.scl.compiler.errors.Failable; +import org.simantics.scl.compiler.module.Module; +import org.simantics.scl.compiler.module.options.ModuleCompilationOptions; +import org.simantics.scl.compiler.module.repository.ModuleRepository; +import org.simantics.scl.compiler.module.repository.UpdateListener; +import org.simantics.scl.compiler.source.ModuleSource; +import org.simantics.scl.compiler.source.TextualModuleSource; +import org.simantics.scl.ui.editor2.StandardSCLModuleEditorInput; +import org.simantics.tests.modelled.ontology.TestsResource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class STSTestEditorInput extends StandardSCLModuleEditorInput { + + private static final Logger LOGGER = LoggerFactory.getLogger(STSTestEditorInput.class); + + public STSTestEditorInput(String moduleName) { + super(moduleName); + } + + @Override + public boolean exists() { + return true; + } + + @SuppressWarnings("unchecked") + @Override + public T getAdapter(Class adapter) { + if(adapter.equals(ModuleSource.class)) + try { + return (T) Simantics.getSession().syncRequest(new ReadSTSModuleSource(getModuleName())); + } catch (DatabaseException e) { + e.printStackTrace(); + } + if(adapter.equals(IPersistableElement.class)) + return (T)this; + return null; + } + + + private static class STSTextualModuleSource extends TextualModuleSource { + + private String moduleText; + + public STSTextualModuleSource(String stsModuleURI, String moduleText) { + super(stsModuleURI); + this.moduleText = moduleText; + } + + @Override + public void update(String newSourceText) { + try { + Simantics.getSession().syncRequest(new WriteSTSModuleSource(getModuleName(), newSourceText)); + } catch (DatabaseException e) { + LOGGER.error("", e); + } + } + + @Override + public Failable compileModule(ModuleRepository environment, UpdateListener listener, ModuleCompilationOptions options) { + return super.compileModule(environment, listener, options); + } + + @Override + public boolean isUpdateable() { + return true; + } + + @Override + protected Reader getSourceReader(UpdateListener listener) throws IOException { + return new StringReader(moduleText); + } + } + + static class ReadSTSModuleSource extends UnaryRead { + + public ReadSTSModuleSource(String moduleName) { + super(moduleName); + } + + @Override + public ModuleSource perform(ReadGraph graph) throws DatabaseException { + Resource moduleResource = graph.getPossibleResource(parameter); + if(moduleResource == null) + return null; + TestsResource TESTS = TestsResource.getInstance(graph); + if(!graph.isInstanceOf(moduleResource, TESTS.STSTest)) + return null; + String text = graph.getRelatedValue(moduleResource, TESTS.STSTest_definition); + return new STSTextualModuleSource(parameter, text); + } + } + + static class WriteSTSModuleSource extends WriteRequest { + private final String moduleURI; + private final String sourceText; + + public WriteSTSModuleSource(String moduleURI, String sourceText) { + this.moduleURI = moduleURI; + this.sourceText = sourceText; + } + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Resource moduleResource = graph.getPossibleResource(moduleURI); + if(moduleResource == null) + return; + TestsResource TESTS = TestsResource.getInstance(graph); + if(!graph.isInstanceOf(moduleResource, TESTS.STSTest)) + return; + graph.claimLiteral(moduleResource, TESTS.STSTest_definition, sourceText); + } + } + + @Override + public String getFactoryId() { + return "org.simantics.tests.modelled.ui.stseditor.inputFactory"; + } + +}