/** * */ package org.goko.tools.editor.component.provider; import java.util.Iterator; import javax.swing.ProgressMonitor; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.rules.FastPartitioner; import org.eclipse.jface.text.source.Annotation; import org.eclipse.jface.text.source.AnnotationModel; import org.eclipse.jface.text.source.IAnnotationModel; import org.goko.core.common.exception.GkException; import org.goko.core.gcode.service.GCodeProviderDeleteEvent; import org.goko.core.gcode.service.IGCodeProviderDeleteVetoableListener; import org.goko.core.gcode.service.IGCodeProviderRepositoryListener; import org.goko.tools.editor.component.GCodePartitionScanner; import org.goko.tools.editor.component.GCodeSourceConfiguration; /** * @author Psyko * @date 26 mai 2016 */ public abstract class AbstractGCodeDocumentProvider extends AbstractDocumentProvider implements IGCodeProviderDeleteVetoableListener, IGCodeProviderRepositoryListener{ /** The associated annotation model */ private IAnnotationModel annotationModel; /** (inheritDoc) * @see org.goko.tools.editor.component.provider.AbstractDocumentProvider#performGetDocument() */ @Override protected IDocument performGetDocument() throws GkException { IDocument document = getGCodeDocument(); FastPartitioner partitioner = new FastPartitioner(new GCodePartitionScanner(), GCodeSourceConfiguration.CONTENT_TYPES); partitioner.connect(document); document.setDocumentPartitioner(partitioner); return document; } /** (inheritDoc) * @see org.goko.tools.editor.component.provider.AbstractDocumentProvider#getAnnotationModel() */ @Override public IAnnotationModel getAnnotationModel() throws GkException{ if(annotationModel == null){ annotationModel = new AnnotationModel(); addAnnotations(annotationModel); } return annotationModel; } protected void addAnnotations(IAnnotationModel annotationModel) throws GkException{ } /** (inheritDoc) * @see org.goko.tools.editor.component.provider.AbstractDocumentProvider#saveDocument(javax.swing.ProgressMonitor) */ @Override public void saveDocument(ProgressMonitor monitor) throws GkException { super.saveDocument(monitor); Iterator<Annotation> iter = annotationModel.getAnnotationIterator(); while (iter.hasNext()) { Annotation annotation = (Annotation) iter.next(); annotationModel.removeAnnotation(annotation); } addAnnotations(annotationModel); } protected abstract IDocument getGCodeDocument() throws GkException; /** (inheritDoc) * @see org.goko.core.gcode.service.IGCodeProviderDeleteVetoableListener#beforeDelete(org.goko.core.gcode.service.GCodeProviderDeleteEvent) */ @Override public void beforeDelete(GCodeProviderDeleteEvent event) { notifyAboutToClose(); event.setDoIt(!isDirty()); } }