--- /dev/null
+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