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