]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSTestEditorInput.java
SCL compiler generates line numbers to bytecode
[simantics/platform.git] / bundles / org.simantics.tests.modelled.ui / src / org / simantics / tests / modelled / ui / STSTestEditorInput.java
1 package org.simantics.tests.modelled.ui;
2
3 import java.io.IOException;
4
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;
24
25 public class STSTestEditorInput extends StandardSCLModuleEditorInput  {
26
27     private static final Logger LOGGER = LoggerFactory.getLogger(STSTestEditorInput.class);
28     
29     public STSTestEditorInput(String moduleName) {
30         super(moduleName);
31     }
32     
33     @Override
34     public boolean exists() {
35         return true;
36     }
37     
38     @SuppressWarnings("unchecked")
39     @Override
40     public <T> T getAdapter(Class<T> adapter) {
41         if(adapter.equals(ModuleSource.class))
42             try {
43                 return (T) Simantics.getSession().syncRequest(new ReadSTSModuleSource(getModuleName()));
44             } catch (DatabaseException e) {
45                 e.printStackTrace();
46             }
47         if(adapter.equals(IPersistableElement.class))
48             return (T)this;
49         return null;
50     }
51     
52     
53     private static class STSTextualModuleSource extends TextualModuleSource {
54
55         private String moduleText;
56
57         public STSTextualModuleSource(String stsModuleURI, String moduleText) {
58             super(stsModuleURI);
59             this.moduleText = moduleText;
60         }
61
62         @Override
63         public void update(String newSourceText) {
64             try {
65                 Simantics.getSession().syncRequest(new WriteSTSModuleSource(getModuleName(), newSourceText));
66             } catch (DatabaseException e) {
67                 LOGGER.error("", e);
68             }
69         }
70         
71         @Override
72         public Failable<Module> compileModule(ModuleRepository environment, UpdateListener listener, ModuleCompilationOptions options) {
73             return super.compileModule(environment, listener, options);
74         }
75         
76         @Override
77         public boolean isUpdateable() {
78             return true;
79         }
80
81         @Override
82         public String getSourceText(UpdateListener listener) throws IOException {
83             return moduleText;
84         }
85     }
86     
87     static class ReadSTSModuleSource extends UnaryRead<String, ModuleSource> {
88         
89         public ReadSTSModuleSource(String moduleName) {
90             super(moduleName);
91         }
92
93         @Override
94         public ModuleSource perform(ReadGraph graph) throws DatabaseException {
95             Resource moduleResource = graph.getPossibleResource(parameter);
96             if(moduleResource == null)
97                 return null;
98             TestsResource TESTS = TestsResource.getInstance(graph);
99             if(!graph.isInstanceOf(moduleResource, TESTS.STSTest))
100                 return null;
101             String text = graph.getRelatedValue(moduleResource, TESTS.STSTest_definition);
102             return new STSTextualModuleSource(parameter, text);
103         }
104     }
105     
106     static class WriteSTSModuleSource extends WriteRequest {
107         private final String moduleURI;
108         private final String sourceText;
109         
110         public WriteSTSModuleSource(String moduleURI, String sourceText) {
111             this.moduleURI = moduleURI;
112             this.sourceText = sourceText;
113         }
114
115         @Override
116         public void perform(WriteGraph graph) throws DatabaseException {
117             Resource moduleResource = graph.getPossibleResource(moduleURI);
118             if(moduleResource == null)
119                 return;
120             TestsResource TESTS = TestsResource.getInstance(graph);
121             if(!graph.isInstanceOf(moduleResource, TESTS.STSTest))
122                 return;
123             graph.claimLiteral(moduleResource, TESTS.STSTest_definition, sourceText);
124         }
125     }
126     
127     @Override
128     public String getFactoryId() {
129         return "org.simantics.tests.modelled.ui.stseditor.inputFactory";
130     }
131
132 }