/*******************************************************************************
* Copyright (c) 2007, 2017 Red Hat Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat - initial API and implementation
* Alphonse Van Assche
*******************************************************************************/
package org.eclipse.linuxtools.internal.rpm.ui.editor;
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.linuxtools.internal.rpm.ui.editor.outline.SpecfileContentOutlinePage;
import org.eclipse.linuxtools.rpm.ui.editor.parser.Specfile;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
public class SpecfileReconcilingStrategy implements IReconcilingStrategy, IReconcilingStrategyExtension {
private SpecfileFoldingStructureProvider sFoldingStructureProvider;
SpecfileContentOutlinePage outline;
SpecfileEditor editor;
IDocumentProvider documentProvider;
public SpecfileReconcilingStrategy(SpecfileEditor editor) {
outline= (SpecfileContentOutlinePage) editor.getAdapter(IContentOutlinePage.class);
this.editor = editor;
documentProvider = editor.getDocumentProvider();
sFoldingStructureProvider= new SpecfileFoldingStructureProvider(editor);
}
@Override
public void setDocument(IDocument document) {
sFoldingStructureProvider.setDocument(document);
}
@Override
public void setProgressMonitor(IProgressMonitor monitor) {
sFoldingStructureProvider.setProgressMonitor(monitor);
}
@Override
public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) {
reconcile();
}
@Override
public void initialReconcile() {
reconcile();
}
private void reconcile() {
Specfile specfile = editor.getSpecfile();
if (specfile != null) {
editor.setSpecfile(editor.getParser().parse(documentProvider
.getDocument(editor.getEditorInput())));
outline.update();
updateFolding();
updateEditor();
}
}
@Override
public void reconcile(IRegion partition) {
reconcile();
}
private void updateEditor() {
Shell shell= editor.getSite().getShell();
if (!(shell == null || shell.isDisposed())) {
shell.getDisplay().asyncExec(() -> editor.setSpecfile(editor.getParser().parse(documentProvider
.getDocument(editor.getEditorInput()))));
}
}
private void updateFolding() {
sFoldingStructureProvider.updateFoldingRegions();
}
}