package org.objectstyle.wolips.wodclipse.editor; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.reconciler.DirtyRegion; import org.eclipse.jface.text.reconciler.IReconcilingStrategy; import org.eclipse.jface.text.reconciler.IReconcilingStrategyExtension; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; import org.objectstyle.wolips.wodclipse.WodclipsePlugin; import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache; import org.objectstyle.wolips.wodclipse.core.util.WodModelUtils; public class WodReconcilingStrategy implements IReconcilingStrategy, IReconcilingStrategyExtension { private WodEditor _wodEditor; private IProgressMonitor _progressMonitor; private IDocument _document; private WodParserCache _cache; public WodReconcilingStrategy(WodEditor wodEditor) { _wodEditor = wodEditor; } public void setDocument(IDocument document) { _document = document; } public void reconcile() { IEditorInput input = _wodEditor.getEditorInput(); if (input instanceof IFileEditorInput) { IWorkspaceRunnable runnable = new IWorkspaceRunnable() { public void run(IProgressMonitor _monitor) throws CoreException { try { WodModelUtils.validateWodDocument(_document, _wodEditor.getComponentsLocateResults(), WodParserCache.getTypeCache(), _cache.getHtmlEntry().getHtmlElementCache()); } catch (Exception e) { WodclipsePlugin.getDefault().log(e); } } }; try { IFile wodFile = ((IFileEditorInput) input).getFile(); ResourcesPlugin.getWorkspace().run(runnable, ResourcesPlugin.getWorkspace().getRuleFactory().markerRule(wodFile), IWorkspace.AVOID_UPDATE, _progressMonitor); } catch (CoreException e) { WodclipsePlugin.getDefault().log(e); } } } public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) { reconcile(); } public void reconcile(IRegion partition) { reconcile(); } public void initialReconcile() { reconcile(); } public void setProgressMonitor(IProgressMonitor monitor) { _progressMonitor = monitor; } }