/*
* Copyright (C) 2002-2004 Andrea Mazzolini
* andreamazzolini@users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.teiid.designer.transformation.ui.editors.sqleditor;
import org.eclipse.jface.text.IAutoEditStrategy;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.ITextDoubleClickStrategy;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.presentation.IPresentationReconciler;
import org.eclipse.jface.text.rules.FastPartitioner;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.teiid.designer.ui.common.graphics.ColorManager;
import org.teiid.query.ui.sqleditor.sql.SqlPartitionScanner;
/**
* @since 8.0
*/
public class SqlTextViewer extends SourceViewer {
IPresentationReconciler fPresentationReconciler;
private IDocumentPartitioner partitioner;
private static SqlPartitionScanner scanner = null;
private final static String[] TYPES =
new String[] { SqlPartitionScanner.SQL_CODE, SqlPartitionScanner.SQL_MULTILINE_COMMENT };
//IPreferenceStore store;
IAutoEditStrategy autoIndentStrategy;
ITextDoubleClickStrategy doubleClickStrategy;
IContentAssistant contentAssistant;
ITextHover textHover;
int iFormatDocumentCallCounter = 0;
//private AnnotationModel fVisualAnnotationModel;
SqlSourceViewerConfiguration configuration;
@Override
public void setDocument(IDocument dc) {
//s_log.debug("setDocument:"+dc);
IDocument previous = this.getDocument();
if (previous != null) {
partitioner.disconnect();
}
super.setDocument(dc);
if (dc != null) {
//s_log.debug("setDocument connect:"+dc);
partitioner.connect(dc);
dc.setDocumentPartitioner(partitioner);
}
}
public SqlTextViewer(Composite parent, IVerticalRuler ruler, int style, ColorManager colorManager) {
super(parent, ruler, style);
configuration = new SqlSourceViewerConfiguration(colorManager);
fPresentationReconciler = configuration.getPresentationReconciler(null);
contentAssistant = configuration.getContentAssistant(null);
if (contentAssistant != null) {
contentAssistant.install(this);
}
if (fPresentationReconciler != null)
fPresentationReconciler.install(this);
doubleClickStrategy = configuration.getDoubleClickStrategy(null, ""); //$NON-NLS-1$
autoIndentStrategy = configuration.getAutoEditStrategies(this, IDocument.DEFAULT_CONTENT_TYPE)[0];
setAutoEditStrategies(new IAutoEditStrategy[] {autoIndentStrategy}, IDocument.DEFAULT_CONTENT_TYPE);
textHover = configuration.getTextHover(this, IDocument.DEFAULT_CONTENT_TYPE);
setTextHover(textHover, IDocument.DEFAULT_CONTENT_TYPE);
partitioner = createSqlPartitioner();
parent.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent event) {
contentAssistant.uninstall();
}
});
}
/**
* Return a partitioner for SQL files.
*/
private FastPartitioner createSqlPartitioner() {
return new FastPartitioner(getSqlPartitionScanner(), TYPES);
}
/**
* Return a scanner for SQL partitions.
*/
private SqlPartitionScanner getSqlPartitionScanner() {
if (scanner == null)
scanner = new SqlPartitionScanner();
return scanner;
}
public void showAssistance() {
contentAssistant.showPossibleCompletions();
}
public void handleDoubleClick() {
doubleClickStrategy.doubleClicked(this);
}
/* (non-Javadoc)
* @see org.eclipse.jface.text.source.ISourceViewer#setDocument(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.source.IAnnotationModel)
*/
@Override
public void setDocument(IDocument document, IAnnotationModel annotationModel) {
// original code:
setDocument(document);
if (annotationModel != null && document != null)
annotationModel.connect(document);
}
}