1 package org.simantics.scl.ui.editor2;
3 import java.io.IOException;
5 import org.eclipse.core.runtime.CoreException;
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.Status;
8 import org.eclipse.jface.operation.IRunnableContext;
9 import org.eclipse.jface.text.Document;
10 import org.eclipse.jface.text.IDocument;
11 import org.eclipse.jface.text.IDocumentPartitioner;
12 import org.eclipse.jface.text.rules.FastPartitioner;
13 import org.eclipse.jface.text.source.AnnotationModel;
14 import org.eclipse.jface.text.source.IAnnotationModel;
15 import org.eclipse.ui.texteditor.AbstractDocumentProvider;
16 import org.simantics.scl.compiler.source.ModuleSource;
17 import org.simantics.scl.compiler.source.TextualModuleSource;
18 import org.simantics.scl.osgi.SCLOsgi;
19 import org.simantics.scl.ui.editor.SCLSourceViewerConfigurationNew;
21 public class SCLModuleEditor2DocumentProvider extends AbstractDocumentProvider {
23 private SCLSourceViewerConfigurationNew sourceViewer;
24 protected AnnotationModel annotationModel = new AnnotationModel();
26 public SCLModuleEditor2DocumentProvider(
27 SCLSourceViewerConfigurationNew sourceViewer) {
28 this.sourceViewer = sourceViewer;
31 private static TextualModuleSource toTextualModuleSource(Object input) {
32 if(!(input instanceof SCLModuleEditorInput))
34 ModuleSource source = ((SCLModuleEditorInput)input).getAdapter(ModuleSource.class);
37 if(!(source instanceof TextualModuleSource))
39 return (TextualModuleSource)source;
43 protected IDocument createDocument(Object element) throws CoreException {
44 TextualModuleSource source = toTextualModuleSource(element);
46 throw new CoreException(
47 new Status(Status.ERROR, "org.simantics.scl.ui", "Source for the SCL module could not be found.")
51 document = new Document(source.getSourceText(null));
52 } catch (IOException e) {
53 throw new CoreException(
54 new Status(Status.ERROR, "org.simantics.scl.ui", "Reading SCL module failed.", e)
57 IDocumentPartitioner partitioner = new FastPartitioner(new SCLPartitionScanner(), SCLPartitionScanner.PARTITION_TYPES);
58 partitioner.connect(document);
59 document.setDocumentPartitioner(partitioner);
60 sourceViewer.updateCompletionAssistModuleName(source.getModuleName());
65 public boolean isModifiable(Object element) {
66 TextualModuleSource source = toTextualModuleSource(element);
69 return source.isUpdateable();
73 public boolean isReadOnly(Object element) {
74 return !isModifiable(element);
78 protected IAnnotationModel createAnnotationModel(Object element)
79 throws CoreException {
80 SCLModuleEditorInput input = (SCLModuleEditorInput)element;
81 return new SCLAnnotationModel(input, SCLOsgi.MODULE_REPOSITORY);
85 protected void doSaveDocument(IProgressMonitor monitor, Object element,
86 IDocument document, boolean overwrite) throws CoreException {
87 TextualModuleSource source = toTextualModuleSource(element);
90 source.update(document.get());
94 protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {
95 // TODO Auto-generated method stub