/*
* "The Java Developer's Guide to Eclipse"
* by D'Anjou, Fairbrother, Kehn, Kellerman, McCarthy
*
* (C) Copyright International Business Machines Corporation, 2003, 2004.
* All Rights Reserved.
*
* Code or samples provided herein are provided without warranty of any kind.
*/
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.ITextDoubleClickStrategy;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.formatter.ContentFormatter;
import org.eclipse.jface.text.formatter.IContentFormatter;
import org.eclipse.jface.text.formatter.IFormattingStrategy;
import org.eclipse.jface.text.presentation.IPresentationReconciler;
import org.eclipse.jface.text.presentation.PresentationReconciler;
import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
import org.eclipse.jface.text.rules.RuleBasedScanner;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.swt.graphics.RGB;
import org.teiid.designer.ui.common.graphics.ColorManager;
import org.teiid.query.ui.sqleditor.sql.SqlAutoIndentStrategy;
import org.teiid.query.ui.sqleditor.sql.SqlCodeScanner;
import org.teiid.query.ui.sqleditor.sql.SqlCompletionProcessor;
import org.teiid.query.ui.sqleditor.sql.SqlDoubleClickStrategy;
import org.teiid.query.ui.sqleditor.sql.SqlPartitionScanner;
import org.teiid.query.ui.sqleditor.sql.SqlTextHover;
import org.teiid.query.ui.sqleditor.sql.SqlWordStrategy;
/**
* This class defines the editor add-ons; content assist, content formatter,
* highlighting, auto-indent strategy, double click strategy.
*
*
* @since 8.0
*/
public class SqlSourceViewerConfiguration
extends SourceViewerConfiguration {
private ColorManager colorManager;
public SqlSourceViewerConfiguration(ColorManager colorManager) {
this.colorManager = colorManager;
}
/**
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getContentAssistant(ISourceViewer)
*/
@Override
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
ContentAssistant assistant = new ContentAssistant();
assistant.setContentAssistProcessor(
new SqlCompletionProcessor(),
IDocument.DEFAULT_CONTENT_TYPE);
assistant.setContentAssistProcessor(
new SqlCompletionProcessor(),
SqlPartitionScanner.SQL_CODE);
assistant.enableAutoActivation(true);
assistant.setAutoActivationDelay(500);
assistant.setProposalPopupOrientation(IContentAssistant.CONTEXT_INFO_BELOW);
assistant.setContextInformationPopupOrientation(
IContentAssistant.CONTEXT_INFO_BELOW);
//Set to Carolina blue
assistant.setContextInformationPopupBackground(colorManager.getColor(new RGB(0, 191, 255)));
return assistant;
}
/**
* Configure the double click strategy here.
*
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getDoubleClickStrategy(ISourceViewer, String)
*/
@Override
public ITextDoubleClickStrategy getDoubleClickStrategy(
ISourceViewer sourceViewer,
String contentType) {
return new SqlDoubleClickStrategy();
}
/**
* Configure a presentation reconciler for syntax highlighting
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getPresentationReconciler(ISourceViewer)
*/
@Override
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
PresentationReconciler reconciler= new PresentationReconciler();
SqlCodeScanner scanner = new SqlCodeScanner(colorManager);
// rule for default text
DefaultDamagerRepairer dr= new DefaultDamagerRepairer(scanner);
reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
// rule for multiline comments
// We jsut need a scanner that does nothing but returns a token with the corrresponding text attributes
RuleBasedScanner multiLineScanner = new RuleBasedScanner();
multiLineScanner.setDefaultReturnToken(new Token(new TextAttribute(colorManager.getColor(ColorManager.MULTI_LINE_COMMENT))));
dr= new DefaultDamagerRepairer(multiLineScanner);
reconciler.setDamager(dr, SqlPartitionScanner.SQL_MULTILINE_COMMENT);
reconciler.setRepairer(dr, SqlPartitionScanner.SQL_MULTILINE_COMMENT);
// rule for SQL comments for documentation
dr= new DefaultDamagerRepairer(scanner);
reconciler.setDamager(dr, SqlPartitionScanner.SQL_CODE);
reconciler.setRepairer(dr, SqlPartitionScanner.SQL_CODE);
return reconciler;
}
/**
* Configure the content formatter with two formatting strategies
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getContentFormatter(ISourceViewer)
*/
@Override
public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) {
ContentFormatter formatter = new ContentFormatter();
IFormattingStrategy keyword = new SqlWordStrategy();
formatter.setFormattingStrategy(keyword, IDocument.DEFAULT_CONTENT_TYPE);
return formatter;
}
/**
* <p>
* {@inheritDoc}
* </p>
*
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer,
* java.lang.String)
*/
@Override
public IAutoEditStrategy[] getAutoEditStrategies( ISourceViewer sourceViewer,
String contentType ) {
return new IAutoEditStrategy[] {new SqlAutoIndentStrategy()};
}
/* (non-Javadoc)
* Method declared on SourceViewerConfiguration
*/
@Override
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
return new SqlTextHover();
}
}