/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.directory.studio.ldapbrowser.common.filtereditor; import org.apache.directory.studio.ldapbrowser.common.widgets.DialogContentAssistant; import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; import org.apache.directory.studio.ldapbrowser.core.model.filter.parser.LdapFilterParser; import org.eclipse.jface.text.DefaultInformationControl; import org.eclipse.jface.text.IAutoEditStrategy; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IInformationControl; import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.text.ITextHover; 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.presentation.IPresentationReconciler; import org.eclipse.jface.text.presentation.PresentationReconciler; import org.eclipse.jface.text.reconciler.IReconciler; import org.eclipse.jface.text.reconciler.MonoReconciler; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; /** * The FilterSourceViewerConfiguration implements the configuration of * the source viewer. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class FilterSourceViewerConfiguration extends SourceViewerConfiguration { /** The current connection, used to retrieve schema information. */ private IBrowserConnection connection; /** The filter parser. */ private LdapFilterParser parser; /** The presentation reconciler, used for syntax highlighting. */ private PresentationReconciler presentationReconciler; /** The damager repairer, used for syntax highlighting. */ private FilterDamagerRepairer damagerRepairer; /** The reconciler, used to maintain error annotations. */ private MonoReconciler reconciler; /** The reconciling strategy, used to maintain error annotations. */ private FilterReconcilingStrategy reconcilingStrategy; /** The text hover, used to display error message tooltips. */ private FilterTextHover textHover; /** The auto edit strategy, used for smart parentesis handling. */ private FilterAutoEditStrategy[] autoEditStrategies; /** The formatter, used to format the filter. */ private ContentFormatter formatter; /** The formatting strategy, used to format the filter. */ private FilterFormattingStrategy formattingStrategy; /** The content assistant, used for content proposals. */ private DialogContentAssistant contentAssistant; /** The content assist processor, used for content proposals. */ private FilterContentAssistProcessor contentAssistProcessor; /** * Creates a new instance of FilterSourceViewerConfiguration. * * @param parser the filer parser * @param connection the connection */ public FilterSourceViewerConfiguration( LdapFilterParser parser, IBrowserConnection connection ) { this.parser = parser; this.connection = connection; } /** * Sets the connection. * * @param connection the connection */ public void setConnection( IBrowserConnection connection ) { this.connection = connection; contentAssistProcessor.setSchema( connection == null ? null : connection.getSchema() ); textHover.setSchema( connection == null ? null : connection.getSchema() ); } /** * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getPresentationReconciler(org.eclipse.jface.text.source.ISourceViewer) */ public IPresentationReconciler getPresentationReconciler( ISourceViewer sourceViewer ) { if ( damagerRepairer == null ) { damagerRepairer = new FilterDamagerRepairer( parser ); } if ( presentationReconciler == null ) { presentationReconciler = new PresentationReconciler(); presentationReconciler.setDamager( damagerRepairer, IDocument.DEFAULT_CONTENT_TYPE ); presentationReconciler.setRepairer( damagerRepairer, IDocument.DEFAULT_CONTENT_TYPE ); } return presentationReconciler; } /** * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getTextHover(org.eclipse.jface.text.source.ISourceViewer, java.lang.String) */ public ITextHover getTextHover( ISourceViewer sourceViewer, String contentType ) { if ( textHover == null ) { textHover = new FilterTextHover( parser ); textHover.setSchema( connection == null ? null : connection.getSchema() ); } return textHover; } /** * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getReconciler(org.eclipse.jface.text.source.ISourceViewer) */ public IReconciler getReconciler( ISourceViewer sourceViewer ) { if ( reconcilingStrategy == null ) { reconcilingStrategy = new FilterReconcilingStrategy( sourceViewer, parser ); } if ( reconciler == null ) { reconciler = new MonoReconciler( reconcilingStrategy, false ); } return reconciler; } /** * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, java.lang.String) */ public IAutoEditStrategy[] getAutoEditStrategies( ISourceViewer sourceViewer, String contentType ) { if ( autoEditStrategies == null ) { autoEditStrategies = new FilterAutoEditStrategy[] { new FilterAutoEditStrategy( parser ) }; } return autoEditStrategies; } /** * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getContentFormatter(org.eclipse.jface.text.source.ISourceViewer) */ public IContentFormatter getContentFormatter( ISourceViewer sourceViewer ) { if ( formattingStrategy == null ) { formattingStrategy = new FilterFormattingStrategy( sourceViewer, parser ); } if ( formatter == null ) { formatter = new ContentFormatter(); formatter.enablePartitionAwareFormatting( false ); formatter.setFormattingStrategy( formattingStrategy, IDocument.DEFAULT_CONTENT_TYPE ); } return formatter; } /** * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getContentAssistant(org.eclipse.jface.text.source.ISourceViewer) */ public IContentAssistant getContentAssistant( ISourceViewer sourceViewer ) { if ( contentAssistProcessor == null ) { contentAssistProcessor = new FilterContentAssistProcessor( sourceViewer, parser ); contentAssistProcessor.setSchema( connection == null ? null : connection.getSchema() ); } if ( contentAssistant == null ) { contentAssistant = new DialogContentAssistant(); contentAssistant.enableAutoInsert( true ); contentAssistant.setContentAssistProcessor( contentAssistProcessor, IDocument.DEFAULT_CONTENT_TYPE ); contentAssistant.enableAutoActivation( true ); contentAssistant.setAutoActivationDelay( 100 ); contentAssistant.setContextInformationPopupOrientation( IContentAssistant.CONTEXT_INFO_ABOVE ); contentAssistant.setInformationControlCreator( getInformationControlCreator( sourceViewer ) ); } return contentAssistant; } /** * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getInformationControlCreator(org.eclipse.jface.text.source.ISourceViewer) */ public IInformationControlCreator getInformationControlCreator( ISourceViewer sourceViewer ) { return new IInformationControlCreator() { public IInformationControl createInformationControl( Shell parent ) { return new DefaultInformationControl( parent, SWT.WRAP, null ); } }; } }