]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleEditor2DocumentProvider.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/SCLModuleEditor2DocumentProvider.java
new file mode 100644 (file)
index 0000000..b92818a
--- /dev/null
@@ -0,0 +1,94 @@
+package org.simantics.scl.ui.editor2;\r
+\r
+import java.io.IOException;\r
+\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.operation.IRunnableContext;\r
+import org.eclipse.jface.text.Document;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.source.AnnotationModel;\r
+import org.eclipse.jface.text.source.IAnnotationModel;\r
+import org.eclipse.ui.texteditor.AbstractDocumentProvider;\r
+import org.simantics.scl.compiler.source.ModuleSource;\r
+import org.simantics.scl.compiler.source.TextualModuleSource;\r
+import org.simantics.scl.osgi.SCLOsgi;\r
+import org.simantics.scl.ui.editor.SCLSourceViewerConfigurationNew;\r
+\r
+public class SCLModuleEditor2DocumentProvider extends AbstractDocumentProvider {\r
+\r
+    private SCLSourceViewerConfigurationNew sourceViewer;\r
+    protected AnnotationModel annotationModel = new AnnotationModel();\r
+    \r
+    public SCLModuleEditor2DocumentProvider(\r
+            SCLSourceViewerConfigurationNew sourceViewer) {\r
+        this.sourceViewer = sourceViewer;\r
+    }\r
+\r
+    private static TextualModuleSource toTextualModuleSource(Object input) {\r
+        if(!(input instanceof SCLModuleEditorInput))\r
+            return null;\r
+        ModuleSource source = ((SCLModuleEditorInput)input).getAdapter(ModuleSource.class);\r
+        if(source == null)\r
+            return null;\r
+        if(!(source instanceof TextualModuleSource))\r
+            return null;\r
+        return (TextualModuleSource)source;\r
+    }\r
+    \r
+    @Override\r
+    protected IDocument createDocument(Object element) throws CoreException {\r
+        TextualModuleSource source = toTextualModuleSource(element);\r
+        if(source == null)\r
+            throw new CoreException(\r
+                    new Status(Status.ERROR, "org.simantics.scl.ui", "Source for the SCL module could not be found.")\r
+                    );\r
+        Document document;\r
+        try {\r
+            document = new Document(source.getSourceText(null));\r
+        } catch (IOException e) {\r
+            throw new CoreException(\r
+                    new Status(Status.ERROR, "org.simantics.scl.ui", "Reading SCL module failed.", e)\r
+                    );\r
+        }\r
+        sourceViewer.updateCompletionAssistModuleName(source.getModuleName());\r
+        return document;\r
+    }\r
+    \r
+    @Override\r
+    public boolean isModifiable(Object element) {\r
+        TextualModuleSource source = toTextualModuleSource(element);\r
+        if(source == null)\r
+            return false;\r
+        return source.isUpdateable();\r
+    }\r
+    \r
+    @Override\r
+    public boolean isReadOnly(Object element) {\r
+        return !isModifiable(element);\r
+    }\r
+\r
+    @Override\r
+    protected IAnnotationModel createAnnotationModel(Object element)\r
+            throws CoreException {\r
+        SCLModuleEditorInput input = (SCLModuleEditorInput)element;\r
+        return new SCLAnnotationModel(input, SCLOsgi.MODULE_REPOSITORY);\r
+    }\r
+\r
+    @Override\r
+    protected void doSaveDocument(IProgressMonitor monitor, Object element,\r
+            IDocument document, boolean overwrite) throws CoreException {\r
+        TextualModuleSource source = toTextualModuleSource(element);\r
+        if(source == null)\r
+            return;\r
+        source.update(document.get());\r
+    }\r
+\r
+    @Override\r
+    protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {\r
+        // TODO Auto-generated method stub\r
+        return null;\r
+    }\r
+\r
+}\r