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