]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleEditor2DocumentProvider.java
Merge changes Ib86a41bb,I4fed12d3
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / SCLModuleEditor2DocumentProvider.java
1 package org.simantics.scl.ui.editor2;\r
2 \r
3 import java.io.IOException;\r
4 \r
5 import org.eclipse.core.runtime.CoreException;\r
6 import org.eclipse.core.runtime.IProgressMonitor;\r
7 import org.eclipse.core.runtime.Status;\r
8 import org.eclipse.jface.operation.IRunnableContext;\r
9 import org.eclipse.jface.text.Document;\r
10 import org.eclipse.jface.text.IDocument;\r
11 import org.eclipse.jface.text.IDocumentPartitioner;\r
12 import org.eclipse.jface.text.rules.FastPartitioner;\r
13 import org.eclipse.jface.text.source.AnnotationModel;\r
14 import org.eclipse.jface.text.source.IAnnotationModel;\r
15 import org.eclipse.ui.texteditor.AbstractDocumentProvider;\r
16 import org.simantics.scl.compiler.source.ModuleSource;\r
17 import org.simantics.scl.compiler.source.TextualModuleSource;\r
18 import org.simantics.scl.osgi.SCLOsgi;\r
19 import org.simantics.scl.ui.editor.SCLSourceViewerConfigurationNew;\r
20 \r
21 public class SCLModuleEditor2DocumentProvider extends AbstractDocumentProvider {\r
22 \r
23     private SCLSourceViewerConfigurationNew sourceViewer;\r
24     protected AnnotationModel annotationModel = new AnnotationModel();\r
25     \r
26     public SCLModuleEditor2DocumentProvider(\r
27             SCLSourceViewerConfigurationNew sourceViewer) {\r
28         this.sourceViewer = sourceViewer;\r
29     }\r
30 \r
31     private static TextualModuleSource toTextualModuleSource(Object input) {\r
32         if(!(input instanceof SCLModuleEditorInput))\r
33             return null;\r
34         ModuleSource source = ((SCLModuleEditorInput)input).getAdapter(ModuleSource.class);\r
35         if(source == null)\r
36             return null;\r
37         if(!(source instanceof TextualModuleSource))\r
38             return null;\r
39         return (TextualModuleSource)source;\r
40     }\r
41     \r
42     @Override\r
43     protected IDocument createDocument(Object element) throws CoreException {\r
44         TextualModuleSource source = toTextualModuleSource(element);\r
45         if(source == null)\r
46             throw new CoreException(\r
47                     new Status(Status.ERROR, "org.simantics.scl.ui", "Source for the SCL module could not be found.")\r
48                     );\r
49         Document document;\r
50         try {\r
51             document = new Document(source.getSourceText(null));\r
52         } catch (IOException e) {\r
53             throw new CoreException(\r
54                     new Status(Status.ERROR, "org.simantics.scl.ui", "Reading SCL module failed.", e)\r
55                     );\r
56         }\r
57         IDocumentPartitioner partitioner = new FastPartitioner(new SCLPartitionScanner(), SCLPartitionScanner.PARTITION_TYPES);\r
58         partitioner.connect(document);\r
59         document.setDocumentPartitioner(partitioner);\r
60         sourceViewer.updateCompletionAssistModuleName(source.getModuleName());\r
61         return document;\r
62     }\r
63     \r
64     @Override\r
65     public boolean isModifiable(Object element) {\r
66         TextualModuleSource source = toTextualModuleSource(element);\r
67         if(source == null)\r
68             return false;\r
69         return source.isUpdateable();\r
70     }\r
71     \r
72     @Override\r
73     public boolean isReadOnly(Object element) {\r
74         return !isModifiable(element);\r
75     }\r
76 \r
77     @Override\r
78     protected IAnnotationModel createAnnotationModel(Object element)\r
79             throws CoreException {\r
80         SCLModuleEditorInput input = (SCLModuleEditorInput)element;\r
81         return new SCLAnnotationModel(input, SCLOsgi.MODULE_REPOSITORY);\r
82     }\r
83 \r
84     @Override\r
85     protected void doSaveDocument(IProgressMonitor monitor, Object element,\r
86             IDocument document, boolean overwrite) throws CoreException {\r
87         TextualModuleSource source = toTextualModuleSource(element);\r
88         if(source == null)\r
89             return;\r
90         source.update(document.get());\r
91     }\r
92 \r
93     @Override\r
94     protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {\r
95         // TODO Auto-generated method stub\r
96         return null;\r
97     }\r
98 \r
99 }\r