You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2006/12/18 18:53:22 UTC
svn commit: r488368 [15/23] - in /directory/sandbox/pamarcelot/ldapstudio:
ldapstudio-browser-ui/ ldapstudio-browser-ui/META-INF/
ldapstudio-browser-ui/about_files/ ldapstudio-browser-ui/icons/
ldapstudio-browser-ui/icons/ovr16/ ldapstudio-browser-ui/s...
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditor.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditor.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditor.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditor.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,702 @@
+/*
+ * 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.ldapstudio.browser.ui.editors.ldif;
+
+
+import java.io.File;
+import java.util.ResourceBundle;
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
+import org.apache.directory.ldapstudio.browser.core.events.ConnectionUpdateEvent;
+import org.apache.directory.ldapstudio.browser.core.events.ConnectionUpdateListener;
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifFile;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.apache.directory.ldapstudio.browser.ui.actions.ExecuteLdifAction;
+import org.apache.directory.ldapstudio.browser.ui.actions.ValueEditorPreferencesAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.actions.EditLdifAttributeAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.actions.EditLdifRecordAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.actions.FormatLdifDocumentAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.actions.FormatLdifRecordAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.actions.OpenBestValueEditorAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.actions.OpenDefaultValueEditorAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.actions.OpenValueEditorAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifPartitionScanner;
+import org.apache.directory.ldapstudio.browser.ui.valueproviders.AbstractDialogCellEditor;
+import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProvider;
+import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProviderManager;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.commands.ActionHandler;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.source.IAnnotationHover;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.IVerticalRuler;
+import org.eclipse.jface.text.source.projection.ProjectionSupport;
+import org.eclipse.jface.text.source.projection.ProjectionViewer;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ViewForm;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.contexts.IContextActivation;
+import org.eclipse.ui.contexts.IContextService;
+import org.eclipse.ui.editors.text.EditorsUI;
+import org.eclipse.ui.editors.text.TextEditor;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.IShowInTargetList;
+import org.eclipse.ui.texteditor.ChainedPreferenceStore;
+import org.eclipse.ui.texteditor.ContentAssistAction;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
+import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+
+public class LdifEditor extends TextEditor implements ILdifEditor, ConnectionUpdateListener, IPartListener2
+{
+
+ protected ViewForm control;
+
+ protected Combo connectionCombo;
+
+ protected ToolBar actionToolBar;
+
+ protected IToolBarManager actionToolBarManager;
+
+ private IConnection connection;
+
+ private ProjectionSupport projectionSupport;
+
+ private LdifOutlinePage outlinePage;
+
+ private ValueProviderManager valueProviderManager;
+
+ private OpenBestValueEditorAction openBestValueEditorAction;
+
+ private OpenValueEditorAction[] openValueEditorActions;
+
+ private ValueEditorPreferencesAction valueEditorPreferencesAction;
+
+
+ public LdifEditor()
+ {
+ super();
+
+ setSourceViewerConfiguration( new LdifSourceViewerConfiguration( this, true ) );
+ setDocumentProvider( new LdifDocumentProvider() );
+
+ IPreferenceStore editorStore = EditorsUI.getPreferenceStore();
+ IPreferenceStore browserStore = BrowserUIPlugin.getDefault().getPreferenceStore();
+ IPreferenceStore combinedStore = new ChainedPreferenceStore( new IPreferenceStore[]
+ { browserStore, editorStore } );
+ setPreferenceStore( combinedStore );
+
+ setHelpContextId( BrowserUIPlugin.PLUGIN_ID + "." + "tools_ldif_editor" );
+ }
+
+
+ protected void handlePreferenceStoreChanged( PropertyChangeEvent event )
+ {
+ try
+ {
+
+ ISourceViewer sourceViewer = getSourceViewer();
+ if ( sourceViewer == null )
+ return;
+
+ // ((LdifSourceViewerConfiguration)
+ // getSourceViewerConfiguration()).handlePropertyChangeEvent(event);
+
+ int topIndex = getSourceViewer().getTopIndex();
+ getSourceViewer().getDocument().set( getSourceViewer().getDocument().get() );
+ getSourceViewer().setTopIndex( topIndex );
+
+ }
+ finally
+ {
+ super.handlePreferenceStoreChanged( event );
+ }
+ }
+
+
+ protected String[] collectContextMenuPreferencePages()
+ {
+ String[] ids = super.collectContextMenuPreferencePages();
+ String[] more = new String[ids.length + 4];
+ more[0] = BrowserUIConstants.PREFERENCEPAGEID_LDIFEDITOR;
+ more[1] = BrowserUIConstants.PREFERENCEPAGEID_LDIFEDITOR_CONTENTASSIST;
+ more[2] = BrowserUIConstants.PREFERENCEPAGEID_LDIFEDITOR_SYNTAXCOLORING;
+ more[3] = BrowserUIConstants.PREFERENCEPAGEID_LDIFEDITOR_TEMPLATES;
+ System.arraycopy( ids, 0, more, 4, ids.length );
+ return more;
+ }
+
+
+ public static String getId()
+ {
+ return LdifEditor.class.getName();
+ }
+
+
+ public void init( IEditorSite site, IEditorInput input ) throws PartInitException
+ {
+
+ if ( input instanceof FileEditorInput )
+ {
+ FileEditorInput fei = ( FileEditorInput ) input;
+ IFile file = fei.getFile();
+ IPath path = file.getLocation();
+ File javaIoFile = path.toFile();
+ long fileLength = javaIoFile.length();
+ if ( fileLength > ( 1 * 1024 * 1024 ) )
+ {
+ MessageDialog.openError( site.getShell(), "LDIF file is too big",
+ "The selected LDIF file is too big. Perhaps it is possilbe to open it in a further version..." );
+ super.init( site, new NonExistingLdifEditorInput() );
+ return;
+ }
+ }
+
+ super.init( site, input );
+
+ EventRegistry.addConnectionUpdateListener( this );
+ getSite().getPage().addPartListener( this );
+
+ this.valueProviderManager = new ValueProviderManager( getSite().getShell() );
+ }
+
+
+ public void dispose()
+ {
+
+ this.valueProviderManager.dispose();
+
+ deactivateGlobalActionHandlers();
+
+ EventRegistry.removeConnectionUpdateListener( this );
+ getSite().getPage().removePartListener( this );
+
+ super.dispose();
+ }
+
+
+ public Object getAdapter( Class required )
+ {
+ if ( IShowInTargetList.class.equals( required ) )
+ {
+ return new IShowInTargetList()
+ {
+ public String[] getShowInTargetIds()
+ {
+ return new String[]
+ { IPageLayout.ID_RES_NAV };
+ }
+ };
+ }
+ if ( IContentOutlinePage.class.equals( required ) )
+ {
+ if ( outlinePage == null || outlinePage.getControl() == null || outlinePage.getControl().isDisposed() )
+ {
+ outlinePage = new LdifOutlinePage( this );
+ }
+ return outlinePage;
+ }
+ if ( ISourceViewer.class.equals( required ) )
+ {
+ return getSourceViewer();
+ }
+ if ( IAnnotationHover.class.equals( required ) )
+ {
+ if ( getSourceViewerConfiguration() != null && getSourceViewer() != null )
+ return getSourceViewerConfiguration().getAnnotationHover( getSourceViewer() );
+ }
+ if ( ITextHover.class.equals( required ) )
+ {
+ if ( getSourceViewerConfiguration() != null && getSourceViewer() != null )
+ return getSourceViewerConfiguration().getTextHover( getSourceViewer(), null );
+ }
+ if ( IContentAssistProcessor.class.equals( required ) )
+ {
+ if ( getSourceViewerConfiguration() != null && getSourceViewer() != null )
+ return getSourceViewerConfiguration().getContentAssistant( getSourceViewer() )
+ .getContentAssistProcessor( LdifPartitionScanner.LDIF_RECORD );
+ }
+ if ( projectionSupport != null )
+ {
+ Object adapter = projectionSupport.getAdapter( getSourceViewer(), required );
+ if ( adapter != null )
+ return adapter;
+ }
+ return super.getAdapter( required );
+ }
+
+
+ protected void editorContextMenuAboutToShow( IMenuManager menu )
+ {
+ super.editorContextMenuAboutToShow( menu );
+
+ IContributionItem[] items = menu.getItems();
+ for ( int i = 0; i < items.length; i++ )
+ {
+
+ if ( items[i] instanceof ActionContributionItem )
+ {
+ ActionContributionItem aci = ( ActionContributionItem ) items[i];
+ if ( aci.getAction() == getAction( ITextEditorActionConstants.SHIFT_LEFT ) )
+ {
+ menu.remove( items[i] );
+ }
+ if ( aci.getAction() == getAction( ITextEditorActionConstants.SHIFT_RIGHT ) )
+ {
+ menu.remove( items[i] );
+ }
+ // if(aci.getAction() instanceof TextOperationAction) {
+ // TextOperationAction toa =
+ // (TextOperationAction)aci.getAction();
+ // String id = toa.getActionDefinitionId();
+ // IAction referenceAction =
+ // getAction(ITextEditorActionConstants.CUT);
+ // boolean equal = toa==referenceAction;
+ // System.out.println(equal);
+ // }
+ }
+ }
+
+ // add Edit actions
+ addAction( menu, ITextEditorActionConstants.GROUP_EDIT, EditLdifAttributeAction.class.getName() );
+ addAction( menu, ITextEditorActionConstants.GROUP_EDIT, OpenDefaultValueEditorAction.class.getName() );
+
+ MenuManager valueEditorMenuManager = new MenuManager( "Edit Value With" );
+ if ( this.openBestValueEditorAction.isEnabled() )
+ {
+ valueEditorMenuManager.add( this.openBestValueEditorAction );
+ valueEditorMenuManager.add( new Separator() );
+ }
+ for ( int i = 0; i < this.openValueEditorActions.length; i++ )
+ {
+ this.openValueEditorActions[i].update();
+ if ( this.openValueEditorActions[i].isEnabled()
+ && this.openValueEditorActions[i].getValueProvider().getClass() != this.openBestValueEditorAction
+ .getValueProvider().getClass()
+ && this.openValueEditorActions[i].getValueProvider() instanceof AbstractDialogCellEditor )
+ {
+ valueEditorMenuManager.add( this.openValueEditorActions[i] );
+ }
+ }
+ valueEditorMenuManager.add( new Separator() );
+ valueEditorMenuManager.add( this.valueEditorPreferencesAction );
+ menu.appendToGroup( ITextEditorActionConstants.GROUP_EDIT, valueEditorMenuManager );
+
+ addAction( menu, ITextEditorActionConstants.GROUP_EDIT, EditLdifRecordAction.class.getName() );
+
+ // add Format actions
+ MenuManager formatMenuManager = new MenuManager( "Format" );
+ addAction( formatMenuManager, FormatLdifDocumentAction.class.getName() );
+ addAction( formatMenuManager, FormatLdifRecordAction.class.getName() );
+ menu.appendToGroup( ITextEditorActionConstants.GROUP_EDIT, formatMenuManager );
+
+ }
+
+
+ protected void createActions()
+ {
+ super.createActions();
+
+ // add content assistant
+ ResourceBundle bundle = BrowserUIPlugin.getDefault().getResourceBundle();
+ IAction action = new ContentAssistAction( bundle, "ldifeditor__contentassistproposal_", this ); //$NON-NLS-1$
+ action.setActionDefinitionId( ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS );
+ setAction( "ContentAssistProposal", action ); //$NON-NLS-1$
+
+ // add execute action (for tool bar)
+ ExecuteLdifAction executeLdifAction = new ExecuteLdifAction( this );
+ this.actionToolBarManager.add( executeLdifAction );
+ setAction( ExecuteLdifAction.class.getName(), executeLdifAction );
+ this.actionToolBarManager.update( true );
+
+ // add context menu edit actions
+ EditLdifAttributeAction editLdifAttributeAction = new EditLdifAttributeAction( this );
+ setAction( EditLdifAttributeAction.class.getName(), editLdifAttributeAction );
+
+ this.openBestValueEditorAction = new OpenBestValueEditorAction( this );
+ ValueProvider[] valueProviders = valueProviderManager.getAllValueProviders();
+ this.openValueEditorActions = new OpenValueEditorAction[valueProviders.length];
+ for ( int i = 0; i < this.openValueEditorActions.length; i++ )
+ {
+ this.openValueEditorActions[i] = new OpenValueEditorAction( this, valueProviders[i] );
+ }
+ this.valueEditorPreferencesAction = new ValueEditorPreferencesAction();
+
+ OpenDefaultValueEditorAction openDefaultValueEditorAction = new OpenDefaultValueEditorAction( this,
+ openBestValueEditorAction );
+ setAction( OpenDefaultValueEditorAction.class.getName(), openDefaultValueEditorAction );
+
+ EditLdifRecordAction editRecordAction = new EditLdifRecordAction( this );
+ setAction( EditLdifRecordAction.class.getName(), editRecordAction );
+
+ // add context menu format actions
+ FormatLdifDocumentAction formatDocumentAction = new FormatLdifDocumentAction( this );
+ setAction( FormatLdifDocumentAction.class.getName(), formatDocumentAction );
+ FormatLdifRecordAction formatRecordAction = new FormatLdifRecordAction( this );
+ setAction( FormatLdifRecordAction.class.getName(), formatRecordAction );
+
+ // update cut, copy, paste
+ IAction cutAction = getAction( ITextEditorActionConstants.CUT );
+ if ( cutAction != null )
+ {
+ cutAction.setImageDescriptor( PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
+ ISharedImages.IMG_TOOL_CUT ) );
+ }
+ IAction copyAction = getAction( ITextEditorActionConstants.COPY );
+ if ( copyAction != null )
+ {
+ copyAction.setImageDescriptor( PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
+ ISharedImages.IMG_TOOL_COPY ) );
+ }
+ IAction pasteAction = getAction( ITextEditorActionConstants.PASTE );
+ if ( pasteAction != null )
+ {
+ pasteAction.setImageDescriptor( PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(
+ ISharedImages.IMG_TOOL_PASTE ) );
+ }
+
+ activateGlobalActionHandlers();
+
+ }
+
+
+ public void createPartControl( Composite parent )
+ {
+
+ setHelpContextId( BrowserUIPlugin.PLUGIN_ID + "." + "tools_ldif_editor" );
+
+ Composite composite = new Composite( parent, SWT.NONE );
+ composite.setLayoutData( new GridData( GridData.FILL_BOTH ) );
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ // layout.horizontalSpacing = 0;
+ layout.verticalSpacing = 0;
+ composite.setLayout( layout );
+
+ control = new ViewForm( composite, SWT.NONE );
+ control.setLayoutData( new GridData( GridData.FILL_BOTH ) );
+
+ // infoText = BaseWidgetUtils.createLabeledText(control, "", 1);
+ Composite connectionComboControl = BaseWidgetUtils.createColumnContainer( control, 1, 1 );
+ // connectionComboControl.setLayoutData(new
+ // GridData(GridData.GRAB_HORIZONTAL));
+ connectionCombo = BaseWidgetUtils.createReadonlyCombo( connectionComboControl, new String[0], 0, 1 );
+ connectionCombo.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, true ) );
+ connectionUpdated( new ConnectionUpdateEvent( null, 0 ) );
+ connectionCombo.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ IConnection connection = BrowserCorePlugin.getDefault().getConnectionManager().getConnection(
+ connectionCombo.getText() );
+ setConnection( connection );
+ IAction action = getAction( ExecuteLdifAction.class.getName() );
+ if ( action != null )
+ {
+ action.setEnabled( connection == null );
+ action.setEnabled( connection != null );
+ // actionToolBarManager.update(true);
+ }
+ }
+ } );
+ control.setTopLeft( connectionComboControl );
+
+ // tool bar
+ actionToolBar = new ToolBar( control, SWT.FLAT | SWT.RIGHT );
+ actionToolBar.setLayoutData( new GridData( SWT.END, SWT.NONE, true, false ) );
+ actionToolBarManager = new ToolBarManager( actionToolBar );
+ control.setTopCenter( actionToolBar );
+
+ // local menu
+ control.setTopRight( null );
+
+ // content
+ Composite editorComposite = new Composite( control, SWT.NONE );
+ editorComposite.setLayout( new FillLayout() );
+ GridData data = new GridData( GridData.FILL_BOTH );
+ data.widthHint = 450;
+ data.heightHint = 250;
+ editorComposite.setLayoutData( data );
+ super.createPartControl( editorComposite );
+ control.setContent( editorComposite );
+
+ ProjectionViewer projectionViewer = ( ProjectionViewer ) getSourceViewer();
+ projectionSupport = new ProjectionSupport( projectionViewer, getAnnotationAccess(), getSharedColors() );
+ projectionSupport.install();
+ projectionViewer.doOperation( ProjectionViewer.TOGGLE );
+
+ }
+
+
+ protected ISourceViewer createSourceViewer( Composite parent, IVerticalRuler ruler, int styles )
+ {
+ getAnnotationAccess();
+ getOverviewRuler();
+ ISourceViewer viewer = new ProjectionViewer( parent, ruler, getOverviewRuler(), true, styles );
+ getSourceViewerDecorationSupport( viewer );
+
+ return viewer;
+ }
+
+
+ protected void configureSourceViewerDecorationSupport( SourceViewerDecorationSupport support )
+ {
+ super.configureSourceViewerDecorationSupport( support );
+ }
+
+
+ protected void configureSourceViewerDecorationSupport()
+ {
+
+ // Iterator e=
+ // fAnnotationPreferences.getAnnotationPreferences().iterator();
+ // while (e.hasNext())
+ // fSourceViewerDecorationSupport.setAnnotationPreference((AnnotationPreference)
+ // e.next());
+ // fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(DefaultMarkerAnnotationAccess.UNKNOWN,
+ // UNKNOWN_INDICATION_COLOR, UNKNOWN_INDICATION,
+ // UNKNOWN_INDICATION_IN_OVERVIEW_RULER, 0);
+ //
+ // fSourceViewerDecorationSupport.setCursorLinePainterPreferenceKeys(CURRENT_LINE,
+ // CURRENT_LINE_COLOR);
+ // fSourceViewerDecorationSupport.setMarginPainterPreferenceKeys(PRINT_MARGIN,
+ // PRINT_MARGIN_COLOR, PRINT_MARGIN_COLUMN);
+ // fSourceViewerDecorationSupport.setSymbolicFontName(getFontPropertyPreferenceKey());
+ }
+
+
+ protected void doSetInput( IEditorInput input ) throws CoreException
+ {
+ // this.ldifModel = null;
+ super.doSetInput( input );
+
+ // setOutlinePageInput();
+ // if (fFoldingStructureProvider != null) {
+ // fFoldingStructureProvider.setDocument(getDocumentProvider().getDocument(input));
+ // }
+ }
+
+
+ public LdifFile getLdifModel()
+ {
+ IDocumentProvider provider = getDocumentProvider();
+ if ( provider instanceof LdifDocumentProvider )
+ {
+ return ( ( LdifDocumentProvider ) provider ).getLdifModel();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ public void outlinePageClosed()
+ {
+ projectionSupport.dispose();
+ outlinePage = null;
+ }
+
+
+ public IConnection getConnection()
+ {
+ return this.connection;
+ }
+
+
+ private void setConnection( IConnection connection )
+ {
+ this.connection = connection;
+ getEditorSite().getActionBars().getStatusLineManager().setMessage(
+ "Used Connection: " + ( this.connection == null ? "-" : this.connection.getName() ) );
+ // getStatusField("ldapconnection").setText();
+ }
+
+
+ public void connectionUpdated( ConnectionUpdateEvent connectionUpdateEvent )
+ {
+ IConnection[] connections = BrowserCorePlugin.getDefault().getConnectionManager().getConnections();
+ String[] names = new String[connections.length + 1];
+ names[0] = "";
+ for ( int i = 0; i < connections.length; i++ )
+ {
+ names[i + 1] = connections[i].getName();
+ }
+ String old = this.connectionCombo.getText();
+ this.connectionCombo.setItems( names );
+ this.connectionCombo.setText( old );
+ connectionCombo.setVisibleItemCount( Math.max( names.length, 20 ) );
+
+ }
+
+
+ protected void performSaveAs( IProgressMonitor progressMonitor )
+ {
+
+ IPreferenceStore store = EditorsUI.getPreferenceStore();
+ String key = getEditorSite().getId() + ".internal.delegateSaveAs"; // $NON-NLS-1$
+ store.setValue( key, true );
+ super.performSaveAs( progressMonitor );
+ }
+
+ private IContextActivation contextActivation;
+
+
+ public void partDeactivated( IWorkbenchPartReference partRef )
+ {
+ if ( partRef.getPart( false ) == this && contextActivation != null )
+ {
+
+ this.deactivateGlobalActionHandlers();
+
+ IContextService contextService = ( IContextService ) PlatformUI.getWorkbench().getAdapter(
+ IContextService.class );
+ contextService.deactivateContext( contextActivation );
+ contextActivation = null;
+ }
+ }
+
+
+ public void partActivated( IWorkbenchPartReference partRef )
+ {
+ if ( partRef.getPart( false ) == this )
+ {
+
+ IContextService contextService = ( IContextService ) PlatformUI.getWorkbench().getAdapter(
+ IContextService.class );
+ contextActivation = contextService
+ .activateContext( "org.apache.directory.ldapstudio.browser.action.context" );
+
+ this.activateGlobalActionHandlers();
+ }
+ }
+
+
+ public void partBroughtToTop( IWorkbenchPartReference partRef )
+ {
+ }
+
+
+ public void partClosed( IWorkbenchPartReference partRef )
+ {
+ }
+
+
+ public void partHidden( IWorkbenchPartReference partRef )
+ {
+ }
+
+
+ public void partInputChanged( IWorkbenchPartReference partRef )
+ {
+ }
+
+
+ public void partOpened( IWorkbenchPartReference partRef )
+ {
+ }
+
+
+ public void partVisible( IWorkbenchPartReference partRef )
+ {
+ }
+
+
+ public void activateGlobalActionHandlers()
+ {
+
+ ICommandService commandService = ( ICommandService ) PlatformUI.getWorkbench().getAdapter(
+ ICommandService.class );
+ if ( commandService != null )
+ {
+ IAction elaa = getAction( EditLdifAttributeAction.class.getName() );
+ commandService.getCommand( elaa.getActionDefinitionId() ).setHandler( new ActionHandler( elaa ) );
+ IAction elva = getAction( OpenDefaultValueEditorAction.class.getName() );
+ commandService.getCommand( elva.getActionDefinitionId() ).setHandler( new ActionHandler( elva ) );
+ IAction elra = getAction( EditLdifRecordAction.class.getName() );
+ commandService.getCommand( elra.getActionDefinitionId() ).setHandler( new ActionHandler( elra ) );
+ }
+ }
+
+
+ public void deactivateGlobalActionHandlers()
+ {
+
+ ICommandService commandService = ( ICommandService ) PlatformUI.getWorkbench().getAdapter(
+ ICommandService.class );
+ if ( commandService != null )
+ {
+ IAction elaa = getAction( EditLdifAttributeAction.class.getName() );
+ commandService.getCommand( elaa.getActionDefinitionId() ).setHandler( null );
+ IAction elva = getAction( OpenDefaultValueEditorAction.class.getName() );
+ commandService.getCommand( elva.getActionDefinitionId() ).setHandler( null );
+ IAction elra = getAction( EditLdifRecordAction.class.getName() );
+ commandService.getCommand( elra.getActionDefinitionId() ).setHandler( null );
+ }
+ }
+
+
+ public ValueProviderManager getValueProviderManager()
+ {
+ return valueProviderManager;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditorContributor.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditorContributor.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditorContributor.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifEditorContributor.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,73 @@
+/*
+ * 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.ldapstudio.browser.ui.editors.ldif;
+
+
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.texteditor.BasicTextEditorActionContributor;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
+import org.eclipse.ui.texteditor.RetargetTextEditorAction;
+
+
+public class LdifEditorContributor extends BasicTextEditorActionContributor
+{
+
+ private static final String CONTENTASSIST_ACTION = "org.apache.directory.ldapstudio.browser.ContentAssist";
+
+ private RetargetTextEditorAction contentAssist;
+
+
+ public LdifEditorContributor()
+ {
+ super();
+
+ contentAssist = new RetargetTextEditorAction( BrowserUIPlugin.getDefault().getResourceBundle(),
+ "ContentAssistProposal." );
+ contentAssist.setActionDefinitionId( ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS );
+ }
+
+
+ public void setActiveEditor( IEditorPart part )
+ {
+ super.setActiveEditor( part );
+ ITextEditor editor = ( part instanceof ITextEditor ) ? ( ITextEditor ) part : null;
+ contentAssist.setAction( getAction( editor, CONTENTASSIST_ACTION ) );
+ }
+
+
+ public void init( IActionBars bars, IWorkbenchPage page )
+ {
+ super.init( bars, page );
+ bars.setGlobalActionHandler( CONTENTASSIST_ACTION, contentAssist );
+ }
+
+
+ public void dispose()
+ {
+ setActiveEditor( null );
+ super.dispose();
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifOutlinePage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifOutlinePage.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifOutlinePage.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifOutlinePage.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,480 @@
+/*
+ * 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.ldapstudio.browser.ui.editors.ldif;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifFile;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeAddRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeDeleteRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeModDnRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeModifyRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifContentRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifModSpec;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifAttrValLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.parser.LdifParser;
+import org.apache.directory.ldapstudio.browser.core.utils.Utils;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.apache.directory.ldapstudio.browser.ui.actions.CopyEntryAsLdifAction;
+import org.apache.directory.ldapstudio.browser.ui.editors.entry.EntryEditor;
+
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+
+
+public class LdifOutlinePage extends ContentOutlinePage
+{
+
+ private IEditorPart editorPart;
+
+
+ public LdifOutlinePage( IEditorPart editorPart )
+ {
+ this.editorPart = editorPart;
+ }
+
+
+ public void createControl( Composite parent )
+ {
+ super.createControl( parent );
+
+ final TreeViewer treeViewer = getTreeViewer();
+ treeViewer.setLabelProvider( new LdifLabelProvider() );
+ treeViewer.setContentProvider( new LdifContentProvider() );
+ // treeViewer.setAutoExpandLevel(1);
+
+ treeViewer.addSelectionChangedListener( new ISelectionChangedListener()
+ {
+ public void selectionChanged( SelectionChangedEvent event )
+ {
+ if ( editorPart instanceof LdifEditor )
+ {
+ LdifEditor ldifEditor = ( LdifEditor ) editorPart;
+ if ( !event.getSelection().isEmpty() && event.getSelection() instanceof IStructuredSelection )
+ {
+ Object element = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement();
+
+ if ( element instanceof LdifRecord )
+ {
+ LdifRecord ldifRecord = ( LdifRecord ) element;
+ ldifEditor.selectAndReveal( ldifRecord.getDnLine().getOffset(), ldifRecord.getDnLine()
+ .getLength() );
+ }
+ else if ( element instanceof List )
+ {
+ List list = ( List ) element;
+ if ( !list.isEmpty() && list.get( 0 ) instanceof LdifAttrValLine )
+ {
+ LdifAttrValLine line = ( LdifAttrValLine ) list.get( 0 );
+ ldifEditor.selectAndReveal( line.getOffset(), line.getRawAttributeDescription()
+ .length() );
+ }
+ }
+ else if ( element instanceof LdifAttrValLine )
+ {
+ LdifAttrValLine line = ( LdifAttrValLine ) element;
+ ldifEditor.selectAndReveal( line.getOffset() + line.getRawAttributeDescription().length()
+ + line.getRawValueType().length(), line.getRawValue().length() );
+ }
+ else if ( element instanceof LdifModSpec )
+ {
+ LdifModSpec modSpec = ( LdifModSpec ) element;
+ ldifEditor.selectAndReveal( modSpec.getOffset(), modSpec.getModSpecType().getLength() );
+ }
+ }
+ }
+ else if ( editorPart instanceof EntryEditor )
+ {
+ EntryEditor entryEditor = ( EntryEditor ) editorPart;
+ if ( !event.getSelection().isEmpty() && event.getSelection() instanceof IStructuredSelection )
+ {
+
+ Object o = entryEditor.getMainWidget().getViewer().getInput();
+ if ( o != null && o instanceof IEntry )
+ {
+ IEntry entry = ( IEntry ) o;
+ IAttribute[] attributes = entry.getAttributes();
+
+ List selectionList = new ArrayList();
+
+ Iterator it = ( ( IStructuredSelection ) event.getSelection() ).iterator();
+ while ( it.hasNext() )
+ {
+ Object element = it.next();
+
+ if ( element instanceof LdifAttrValLine )
+ {
+ // select the value
+ LdifAttrValLine line = ( LdifAttrValLine ) element;
+ for ( int a = 0; a < attributes.length; a++ )
+ {
+ IAttribute attribute = attributes[a];
+ if ( attribute.getDescription().equals( line.getUnfoldedAttributeDescription() ) )
+ {
+ IValue[] values = attribute.getValues();
+ for ( int v = 0; v < values.length; v++ )
+ {
+ IValue value = values[v];
+ if ( value.getStringValue().equals( line.getValueAsString() ) )
+ {
+ selectionList.add( value );
+ }
+ }
+ }
+ }
+ }
+ else if ( element instanceof List )
+ {
+ // select attribute and all values
+ List list = ( List ) element;
+ if ( !list.isEmpty() && list.get( 0 ) instanceof LdifAttrValLine )
+ {
+ LdifAttrValLine line = ( LdifAttrValLine ) list.get( 0 );
+ for ( int a = 0; a < attributes.length; a++ )
+ {
+ IAttribute attribute = attributes[a];
+ if ( attribute.getDescription().equals(
+ line.getUnfoldedAttributeDescription() ) )
+ {
+ selectionList.add( attribute );
+ selectionList.addAll( Arrays.asList( attribute.getValues() ) );
+ }
+ }
+ }
+ }
+ else if ( element instanceof LdifRecord )
+ {
+ for ( int a = 0; a < attributes.length; a++ )
+ {
+ IAttribute attribute = attributes[a];
+ selectionList.add( attribute );
+ selectionList.addAll( Arrays.asList( attribute.getValues() ) );
+ }
+ }
+ }
+
+ IStructuredSelection selection = new StructuredSelection( selectionList );
+ entryEditor.getMainWidget().getViewer().setSelection( selection );
+ }
+ }
+ }
+ }
+ } );
+
+ treeViewer.addDoubleClickListener( new IDoubleClickListener()
+ {
+ public void doubleClick( DoubleClickEvent event )
+ {
+ if ( event.getSelection() instanceof IStructuredSelection )
+ {
+ Object obj = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement();
+ if ( treeViewer.getExpandedState( obj ) )
+ treeViewer.collapseToLevel( obj, 1 );
+ else if ( ( ( ITreeContentProvider ) treeViewer.getContentProvider() ).hasChildren( obj ) )
+ treeViewer.expandToLevel( obj, 1 );
+ }
+ }
+ } );
+
+ this.refresh();
+ }
+
+
+ public void refresh( Object element )
+ {
+ final TreeViewer treeViewer = getTreeViewer();
+ if ( treeViewer != null )
+ {
+ treeViewer.refresh( element );
+ }
+ }
+
+
+ public void refresh()
+ {
+
+ final TreeViewer treeViewer = getTreeViewer();
+
+ if ( treeViewer != null )
+ {
+
+ // ISelection selection = treeViewer.getSelection();
+ // Object[] expandedElements = treeViewer.getExpandedElements();
+
+ if ( this.editorPart != null && this.editorPart instanceof LdifEditor )
+ {
+ if ( treeViewer.getInput() != ( ( LdifEditor ) this.editorPart ).getLdifModel() )
+ {
+ treeViewer.setInput( ( ( LdifEditor ) this.editorPart ).getLdifModel() );
+ }
+ }
+ else if ( this.editorPart != null && this.editorPart instanceof EntryEditor )
+ {
+ Object o = ( ( EntryEditor ) this.editorPart ).getMainWidget().getViewer().getInput();
+ if ( o != null && o instanceof IEntry )
+ {
+ StringBuffer sb = new StringBuffer();
+ new CopyEntryAsLdifAction( CopyEntryAsLdifAction.MODE_INCLUDE_OPERATIONAL_ATTRIBUTES )
+ .serialializeEntries( new IEntry[]
+ { ( IEntry ) o }, sb );
+ LdifFile model = new LdifParser().parse( sb.toString() );
+ treeViewer.setInput( model );
+ treeViewer.expandToLevel( 2 );
+ }
+ }
+
+ treeViewer.refresh();
+
+ // treeViewer.setSelection(selection);
+ // treeViewer.setExpandedElements(expandedElements);
+ }
+ }
+
+
+ public void dispose()
+ {
+ super.dispose();
+ if ( this.editorPart != null && this.editorPart instanceof LdifEditor )
+ {
+ ( ( LdifEditor ) this.editorPart ).outlinePageClosed();
+ this.editorPart = null;
+ }
+ }
+
+ private static class LdifContentProvider implements ITreeContentProvider
+ {
+ public Object[] getChildren( Object element )
+ {
+
+ // file --> records
+ if ( element instanceof LdifFile )
+ {
+ LdifFile ldifFile = ( LdifFile ) element;
+ return ldifFile.getRecords();
+ }
+
+ // record --> Array of List of AttrValLine
+ else if ( element instanceof LdifContentRecord )
+ {
+ LdifContentRecord record = ( LdifContentRecord ) element;
+ return getUniqueAttrValLineArray( record.getAttrVals() );
+ }
+ else if ( element instanceof LdifChangeAddRecord )
+ {
+ LdifChangeAddRecord record = ( LdifChangeAddRecord ) element;
+ return getUniqueAttrValLineArray( record.getAttrVals() );
+ }
+ else if ( element instanceof LdifChangeModifyRecord )
+ {
+ LdifChangeModifyRecord record = ( LdifChangeModifyRecord ) element;
+ return record.getModSpecs();
+ }
+ else if ( element instanceof LdifChangeModDnRecord )
+ {
+ return new Object[0];
+ }
+ else if ( element instanceof LdifChangeDeleteRecord )
+ {
+ return new Object[0];
+ }
+
+ // List of AttrValLine --> Array of AttrValLine
+ else if ( element instanceof List && ( ( List ) element ).get( 0 ) instanceof LdifAttrValLine )
+ {
+ List list = ( List ) element;
+ return list.toArray();
+ }
+ else if ( element instanceof LdifModSpec )
+ {
+ LdifModSpec modSpec = ( LdifModSpec ) element;
+ return modSpec.getAttrVals();
+ }
+
+ else
+ {
+ return new Object[0];
+ }
+ }
+
+
+ private Object[] getUniqueAttrValLineArray( LdifAttrValLine[] lines )
+ {
+ Map uniqueAttrMap = new LinkedHashMap();
+ for ( int i = 0; i < lines.length; i++ )
+ {
+ if ( !uniqueAttrMap.containsKey( lines[i].getUnfoldedAttributeDescription() ) )
+ {
+ uniqueAttrMap.put( lines[i].getUnfoldedAttributeDescription(), new ArrayList() );
+ }
+ ( ( List ) uniqueAttrMap.get( lines[i].getUnfoldedAttributeDescription() ) ).add( lines[i] );
+ }
+ return uniqueAttrMap.values().toArray();
+ }
+
+
+ public Object getParent( Object element )
+ {
+ return null;
+ }
+
+
+ public boolean hasChildren( Object element )
+ {
+ return getChildren( element ) != null && getChildren( element ).length > 0;
+ }
+
+
+ public Object[] getElements( Object inputElement )
+ {
+ return getChildren( inputElement );
+ }
+
+
+ public void dispose()
+ {
+ }
+
+
+ public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
+ {
+ }
+ }
+
+ private static class LdifLabelProvider extends LabelProvider
+ {
+ public String getText( Object element )
+ {
+
+ // Record
+ if ( element instanceof LdifRecord )
+ {
+ LdifRecord ldifRecord = ( LdifRecord ) element;
+ return ldifRecord.getDnLine().getValueAsString();
+ }
+
+ // List of AttrValLine
+ else if ( element instanceof List && ( ( List ) element ).get( 0 ) instanceof LdifAttrValLine )
+ {
+ List list = ( List ) element;
+ return ( ( LdifAttrValLine ) list.get( 0 ) ).getUnfoldedAttributeDescription() + " (" + list.size()
+ + ")";
+ }
+ else if ( element instanceof LdifModSpec )
+ {
+ LdifModSpec modSpec = ( LdifModSpec ) element;
+ return modSpec.getModSpecType().getUnfoldedAttributeDescription() + " (" + modSpec.getAttrVals().length
+ + ")";
+ }
+
+ // AttrValLine
+ else if ( element instanceof LdifAttrValLine )
+ {
+ LdifAttrValLine line = ( LdifAttrValLine ) element;
+ return Utils.getShortenedString( line.getValueAsString(), 20 );
+ }
+
+ else
+ {
+ return "";
+ }
+ }
+
+
+ public Image getImage( Object element )
+ {
+
+ // Record
+ if ( element instanceof LdifContentRecord )
+ {
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_ENTRY );
+ }
+ else if ( element instanceof LdifChangeAddRecord )
+ {
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_ADD );
+ }
+ else if ( element instanceof LdifChangeModifyRecord )
+ {
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_MODIFY );
+ }
+ else if ( element instanceof LdifChangeDeleteRecord )
+ {
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_DELETE );
+ }
+ else if ( element instanceof LdifChangeModDnRecord )
+ {
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_RENAME );
+ }
+
+ // List of AttrValLine
+ else if ( element instanceof List && ( ( List ) element ).get( 0 ) instanceof LdifAttrValLine )
+ {
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_ATTRIBUTE );
+ }
+ else if ( element instanceof LdifModSpec )
+ {
+ LdifModSpec modSpec = ( LdifModSpec ) element;
+ if ( modSpec.isAdd() )
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_MOD_ADD );
+ else if ( modSpec.isReplace() )
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_MOD_REPLACE );
+ else if ( modSpec.isDelete() )
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_MOD_DELETE );
+ else
+ return null;
+ }
+
+ // AttrValLine
+ else if ( element instanceof LdifAttrValLine )
+ {
+ return BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_LDIF_VALUE );
+ }
+
+ else
+ {
+ return null;
+ }
+ }
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifSourceViewerConfiguration.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifSourceViewerConfiguration.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifSourceViewerConfiguration.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/LdifSourceViewerConfiguration.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,243 @@
+/*
+ * 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.ldapstudio.browser.ui.editors.ldif;
+
+
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.reconciler.LdifReconcilingStrategy;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifAnnotationHover;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifAutoEditStrategy;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifCompletionProcessor;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifDamagerRepairer;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifDoubleClickStrategy;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifPartitionScanner;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.text.LdifTextHover;
+import org.apache.directory.ldapstudio.browser.ui.widgets.DialogContentAssistant;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy;
+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.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+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.IAnnotationHover;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.swt.graphics.RGB;
+
+
+public class LdifSourceViewerConfiguration extends SourceViewerConfiguration
+{
+
+ private ILdifEditor editor;
+
+ // Error hover and annotations
+ private LdifAnnotationHover annotationHover;
+
+ private LdifTextHover textHover;
+
+ // Presentation Reconciler (syntax highlight)
+ private PresentationReconciler presentationReconciler;
+
+ private LdifDamagerRepairer damagerRepairer;
+
+ // Content Assistent
+ private boolean contentAssistEnabled;
+
+ private ContentAssistant contentAssistant;
+
+ private IContentAssistProcessor contentAssistProcessor;
+
+ private LdifDoubleClickStrategy doubleClickStrategy;
+
+ // Asynchronous Reconciler (annotations)
+ private MonoReconciler reconciler;
+
+ private LdifReconcilingStrategy reconcilingStrategy;
+
+ private IAutoEditStrategy[] autoEditStrategies;
+
+
+ public LdifSourceViewerConfiguration( ILdifEditor editor, boolean contentAssistEnabled )
+ {
+ super();
+ this.editor = editor;
+
+ this.contentAssistEnabled = contentAssistEnabled;
+
+ }
+
+
+ public void setTextAttribute( String key, RGB rgb, int style )
+ {
+ damagerRepairer.setTextAttribute( key, rgb, style );
+ }
+
+
+ public String getConfiguredDocumentPartitioning( ISourceViewer sourceViewer )
+ {
+ return LdifDocumentSetupParticipant.LDIF_PARTITIONING;
+ }
+
+
+ public String[] getConfiguredContentTypes( ISourceViewer sourceViewer )
+ {
+ return new String[]
+ { IDocument.DEFAULT_CONTENT_TYPE, LdifPartitionScanner.LDIF_RECORD };
+ }
+
+
+ public ITextDoubleClickStrategy getDoubleClickStrategy( ISourceViewer sourceViewer, String contentType )
+ {
+ if ( this.doubleClickStrategy == null )
+ {
+ this.doubleClickStrategy = new LdifDoubleClickStrategy();
+ }
+ return this.doubleClickStrategy;
+ }
+
+
+ public IPresentationReconciler getPresentationReconciler( ISourceViewer sourceViewer )
+ {
+
+ if ( this.presentationReconciler == null )
+ {
+ this.presentationReconciler = new PresentationReconciler();
+ this.presentationReconciler.setDocumentPartitioning( getConfiguredDocumentPartitioning( sourceViewer ) );
+
+ damagerRepairer = new LdifDamagerRepairer( this.editor );
+
+ this.presentationReconciler.setDamager( damagerRepairer, IDocument.DEFAULT_CONTENT_TYPE );
+ this.presentationReconciler.setRepairer( damagerRepairer, IDocument.DEFAULT_CONTENT_TYPE );
+
+ this.presentationReconciler.setDamager( damagerRepairer, LdifPartitionScanner.LDIF_RECORD );
+ this.presentationReconciler.setRepairer( damagerRepairer, LdifPartitionScanner.LDIF_RECORD );
+ }
+
+ return this.presentationReconciler;
+ }
+
+
+ public IReconciler getReconciler( ISourceViewer sourceViewer )
+ {
+ if ( this.reconciler == null )
+ {
+ this.reconcilingStrategy = new LdifReconcilingStrategy( editor );
+
+ // Reconciler reconciler = new Reconciler();
+ // reconciler.setIsIncrementalReconciler(true);
+ // reconciler.setReconcilingStrategy(strategy,
+ // LdifPartitionScanner.LDIF_RECORD);
+ // reconciler.setReconcilingStrategy(strategy,
+ // IDocument.DEFAULT_CONTENT_TYPE);
+ // reconciler.setProgressMonitor(new NullProgressMonitor());
+ // reconciler.setDelay(500);
+ // return reconciler;
+
+ this.reconciler = new MonoReconciler( this.reconcilingStrategy, true );
+ this.reconciler.setProgressMonitor( new NullProgressMonitor() );
+ this.reconciler.setDelay( 500 );
+ }
+
+ return this.reconciler;
+ }
+
+
+ public IContentAssistant getContentAssistant( ISourceViewer sourceViewer )
+ {
+ if ( this.contentAssistEnabled )
+ {
+ if ( this.contentAssistant == null )
+ {
+ // this.contentAssistant = new ContentAssistant();
+ this.contentAssistant = new DialogContentAssistant();
+
+ this.contentAssistProcessor = new LdifCompletionProcessor( editor, contentAssistant );
+ this.contentAssistant.setContentAssistProcessor( this.contentAssistProcessor,
+ LdifPartitionScanner.LDIF_RECORD );
+ this.contentAssistant.setContentAssistProcessor( this.contentAssistProcessor,
+ IDocument.DEFAULT_CONTENT_TYPE );
+ this.contentAssistant.setDocumentPartitioning( LdifDocumentSetupParticipant.LDIF_PARTITIONING );
+
+ this.contentAssistant.setContextInformationPopupOrientation( IContentAssistant.CONTEXT_INFO_ABOVE );
+ this.contentAssistant.setInformationControlCreator( getInformationControlCreator( sourceViewer ) );
+
+ IPreferenceStore store = BrowserUIPlugin.getDefault().getPreferenceStore();
+ this.contentAssistant.enableAutoInsert( store
+ .getBoolean( BrowserUIConstants.PREFERENCE_LDIFEDITOR_CONTENTASSIST_INSERTSINGLEPROPOSALAUTO ) );
+ this.contentAssistant.enableAutoActivation( store
+ .getBoolean( BrowserUIConstants.PREFERENCE_LDIFEDITOR_CONTENTASSIST_ENABLEAUTOACTIVATION ) );
+ this.contentAssistant.setAutoActivationDelay( store
+ .getInt( BrowserUIConstants.PREFERENCE_LDIFEDITOR_CONTENTASSIST_AUTOACTIVATIONDELAY ) );
+ // this.contentAssistant.enableAutoInsert(true);
+ // this.contentAssistant.enableAutoActivation(true);
+ // this.contentAssistant.setAutoActivationDelay(100);
+ }
+ return this.contentAssistant;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ public IAnnotationHover getAnnotationHover( ISourceViewer sourceViewer )
+ {
+ if ( this.annotationHover == null )
+ {
+ this.annotationHover = new LdifAnnotationHover( this.editor );
+ }
+ return this.annotationHover;
+ }
+
+
+ public ITextHover getTextHover( ISourceViewer sourceViewer, String contentType )
+ {
+ if ( this.textHover == null )
+ {
+ this.textHover = new LdifTextHover( this.editor );
+ }
+ return this.textHover;
+ }
+
+
+ public IAutoEditStrategy[] getAutoEditStrategies( ISourceViewer sourceViewer, String contentType )
+ {
+ if ( autoEditStrategies == null )
+ {
+ this.autoEditStrategies = new IAutoEditStrategy[2];
+ this.autoEditStrategies[0] = new DefaultIndentLineAutoEditStrategy();
+ this.autoEditStrategies[1] = new LdifAutoEditStrategy( this.editor );
+ }
+
+ return autoEditStrategies;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/NonExistingLdifEditorInput.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/NonExistingLdifEditorInput.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/NonExistingLdifEditorInput.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/NonExistingLdifEditorInput.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,111 @@
+/*
+ * 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.ldapstudio.browser.ui.editors.ldif;
+
+
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.editors.text.ILocationProvider;
+
+
+public class NonExistingLdifEditorInput implements IEditorInput, ILocationProvider
+{
+
+ private static int counter = 0;
+
+ private String name;
+
+
+ public NonExistingLdifEditorInput()
+ {
+ ++counter;
+ name = "LDIF " + counter; //$NON-NLS-1$
+ }
+
+
+ public boolean exists()
+ {
+ return false;
+ }
+
+
+ public ImageDescriptor getImageDescriptor()
+ {
+ return null;
+ }
+
+
+ public String getName()
+ {
+ return name;
+ }
+
+
+ public IPersistableElement getPersistable()
+ {
+ return null;
+ }
+
+
+ public String getToolTipText()
+ {
+ return name;
+ }
+
+
+ public Object getAdapter( Class adapter )
+ {
+ if ( ILocationProvider.class.equals( adapter ) )
+ return this;
+ return Platform.getAdapterManager().getAdapter( this, adapter );
+ }
+
+
+ public IPath getPath( Object element )
+ {
+ return BrowserUIPlugin.getDefault().getStateLocation().append( name + ".ldif" );
+ }
+
+
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ return true;
+
+ if ( o instanceof NonExistingLdifEditorInput )
+ {
+ NonExistingLdifEditorInput input = ( NonExistingLdifEditorInput ) o;
+ return name.equals( input.name );
+ }
+
+ return false;
+ }
+
+
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractLdifAction.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractLdifAction.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractLdifAction.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractLdifAction.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,132 @@
+/*
+ * 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.ldapstudio.browser.ui.editors.ldif.actions;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifFile;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifContainer;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifModSpec;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.LdifEditor;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.texteditor.IUpdate;
+
+
+public abstract class AbstractLdifAction extends Action implements IUpdate
+{
+
+ protected LdifEditor editor;
+
+
+ public AbstractLdifAction( String text, LdifEditor editor )
+ {
+ super( text );
+ this.editor = editor;
+ }
+
+
+ public final void run()
+ {
+ if ( this.isEnabled() )
+ {
+ doRun();
+ }
+ }
+
+
+ protected abstract void doRun();
+
+
+ public boolean isEnabled()
+ {
+ update();
+ return super.isEnabled();
+ }
+
+
+ protected LdifFile getLdifModel()
+ {
+ LdifFile model = editor.getLdifModel();
+ return model;
+ }
+
+
+ protected LdifContainer[] getSelectedLdifContainers()
+ {
+
+ LdifContainer[] containers = null;
+
+ ISourceViewer sourceViewer = ( ISourceViewer ) editor.getAdapter( ISourceViewer.class );
+ if ( sourceViewer != null )
+ {
+ LdifFile model = editor.getLdifModel();
+ Point selection = sourceViewer.getSelectedRange();
+ containers = LdifFile.getContainers( model, selection.x, selection.y );
+ }
+
+ return containers != null ? containers : new LdifContainer[0];
+
+ }
+
+
+ protected LdifPart[] getSelectedLdifParts()
+ {
+
+ LdifPart[] parts = null;
+
+ ISourceViewer sourceViewer = ( ISourceViewer ) editor.getAdapter( ISourceViewer.class );
+ if ( sourceViewer != null )
+ {
+ LdifFile model = editor.getLdifModel();
+ Point selection = sourceViewer.getSelectedRange();
+ parts = LdifFile.getParts( model, selection.x, selection.y );
+
+ }
+
+ return parts != null ? parts : new LdifPart[0];
+
+ }
+
+
+ protected LdifModSpec getSelectedLdifModSpec()
+ {
+
+ LdifModSpec modSpec = null;
+
+ LdifContainer[] containers = getSelectedLdifContainers();
+ if ( containers.length == 1 )
+ {
+ ISourceViewer sourceViewer = ( ISourceViewer ) editor.getAdapter( ISourceViewer.class );
+ if ( sourceViewer != null )
+ {
+ Point selection = sourceViewer.getSelectedRange();
+ modSpec = LdifFile.getInnerContainer( containers[0], selection.x );
+ }
+ }
+
+ return modSpec;
+
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractOpenValueEditorAction.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractOpenValueEditorAction.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractOpenValueEditorAction.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/actions/AbstractOpenValueEditorAction.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,197 @@
+/*
+ * 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.ldapstudio.browser.ui.editors.ldif.actions;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifAttrValLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifControlLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifDeloldrdnLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifDnLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifNewrdnLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifNewsuperiorLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifValueLineBase;
+import org.apache.directory.ldapstudio.browser.core.model.schema.Schema;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.LdifEditor;
+import org.apache.directory.ldapstudio.browser.ui.valueproviders.AbstractDialogCellEditor;
+import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProvider;
+import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProviderManager;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+
+
+public abstract class AbstractOpenValueEditorAction extends AbstractLdifAction
+{
+
+ protected ValueProviderManager manager;
+
+ protected ValueProvider valueProvider;
+
+
+ public AbstractOpenValueEditorAction( LdifEditor editor )
+ {
+ super( "Edit Value", editor );
+ manager = editor.getValueProviderManager();
+ }
+
+
+ public Object getValueProvider()
+ {
+ return valueProvider;
+ }
+
+
+ protected void doRun()
+ {
+
+ LdifPart[] parts = getSelectedLdifParts();
+ if ( parts.length == 1 && ( parts[0] instanceof LdifValueLineBase ) )
+ {
+ LdifValueLineBase line = ( LdifValueLineBase ) parts[0];
+
+ String attributeDescription = getAttributeDescription();
+ Object rawValue = getValueProviderRawValue();
+
+ if ( valueProvider instanceof AbstractDialogCellEditor )
+ {
+ AbstractDialogCellEditor cellEditor = ( AbstractDialogCellEditor ) valueProvider;
+ cellEditor.setValue( rawValue );
+ cellEditor.activate();
+ Object newValue = cellEditor.getValue();
+
+ if ( newValue != null && newValue instanceof String || newValue instanceof byte[] )
+ {
+ IDocument document = editor.getDocumentProvider().getDocument( editor.getEditorInput() );
+
+ LdifValueLineBase newLine;
+ if ( line instanceof LdifControlLine )
+ {
+ LdifControlLine oldControlLine = ( LdifControlLine ) line;
+ if ( newValue instanceof String )
+ {
+ newLine = LdifControlLine.create( oldControlLine.getUnfoldedOid(), oldControlLine
+ .getUnfoldedCriticality(), ( String ) newValue );
+ }
+ else
+ {
+ newLine = LdifControlLine.create( oldControlLine.getUnfoldedOid(), oldControlLine
+ .getUnfoldedCriticality(), ( byte[] ) newValue );
+ }
+ }
+ else
+ {
+ if ( newValue instanceof String )
+ {
+ newLine = LdifAttrValLine.create( attributeDescription, ( String ) newValue );
+ }
+ else
+ {
+ newLine = LdifAttrValLine.create( attributeDescription, ( byte[] ) newValue );
+ }
+ }
+
+ try
+ {
+ document.replace( line.getOffset(), line.getLength(), newLine.toFormattedString() );
+ }
+ catch ( BadLocationException e )
+ {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+ }
+
+
+ protected Schema getSchema()
+ {
+ return editor.getConnection() != null ? editor.getConnection().getSchema() : Schema.DEFAULT_SCHEMA;
+ }
+
+
+ protected Object getValueProviderRawValue()
+ {
+ Object rawValue = null;
+ Object value = getValue();
+ if ( value != null )
+ {
+ Schema schema = getSchema();
+ rawValue = valueProvider.getRawValue( null, schema, value );
+ }
+
+ return rawValue;
+ }
+
+
+ protected Object getValue()
+ {
+ LdifPart[] parts = getSelectedLdifParts();
+ Object oldValue = null;
+ if ( parts.length == 1 && ( parts[0] instanceof LdifValueLineBase ) )
+ {
+ LdifValueLineBase line = ( LdifValueLineBase ) parts[0];
+ oldValue = line.getValueAsObject();
+
+ if ( line instanceof LdifControlLine )
+ {
+ oldValue = ( ( LdifControlLine ) line ).getUnfoldedControlValue();
+ }
+
+ }
+ return oldValue;
+ }
+
+
+ protected String getAttributeDescription()
+ {
+ String attributeDescription = null;
+ LdifPart[] parts = getSelectedLdifParts();
+ if ( parts.length == 1 && ( parts[0] instanceof LdifValueLineBase ) )
+ {
+ LdifValueLineBase line = ( LdifValueLineBase ) parts[0];
+
+ if ( line instanceof LdifControlLine )
+ {
+ attributeDescription = "";
+ }
+ else
+ {
+ attributeDescription = line.getUnfoldedLineStart();
+ }
+ }
+ return attributeDescription;
+ }
+
+
+ protected boolean isEditableLineSelected()
+ {
+ LdifPart[] parts = getSelectedLdifParts();
+ boolean b = parts.length == 1
+ && ( parts[0] instanceof LdifAttrValLine || parts[0] instanceof LdifDnLine
+ || parts[0] instanceof LdifControlLine || parts[0] instanceof LdifNewrdnLine
+ || parts[0] instanceof LdifDeloldrdnLine || parts[0] instanceof LdifNewsuperiorLine );
+ return b;
+ }
+
+}