Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 55702 invoked from network); 18 Dec 2006 17:59:21 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 Dec 2006 17:59:21 -0000 Received: (qmail 92226 invoked by uid 500); 18 Dec 2006 17:59:28 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 92191 invoked by uid 500); 18 Dec 2006 17:59:28 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 92179 invoked by uid 99); 18 Dec 2006 17:59:28 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Dec 2006 09:59:28 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Dec 2006 09:59:15 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id 784761A982D; Mon, 18 Dec 2006 09:58:01 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r488371 [8/14] - in /directory/sandbox/pamarcelot/ldapstudio: ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/jobs/ ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/perspective/ ldapstudio-browser-ui... Date: Mon, 18 Dec 2006 17:57:49 -0000 To: commits@directory.apache.org From: pamarcelot@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20061218175801.784761A982D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetActionGroup.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetActionGroup.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetActionGroup.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetActionGroup.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,378 @@ +/* + * 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.widgets.entryeditor; + + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin; +import org.apache.directory.ldapstudio.browser.ui.actions.CopyAction; +import org.apache.directory.ldapstudio.browser.ui.actions.DeleteAction; +import org.apache.directory.ldapstudio.browser.ui.actions.NewValueAction; +import org.apache.directory.ldapstudio.browser.ui.actions.PasteAction; +import org.apache.directory.ldapstudio.browser.ui.actions.PropertiesAction; +import org.apache.directory.ldapstudio.browser.ui.actions.SelectAllAction; +import org.apache.directory.ldapstudio.browser.ui.actions.ShowRawValuesAction; +import org.apache.directory.ldapstudio.browser.ui.actions.ValueEditorPreferencesAction; +import org.apache.directory.ldapstudio.browser.ui.actions.proxy.BrowserActionProxy; +import org.apache.directory.ldapstudio.browser.ui.actions.proxy.EntryEditorActionProxy; +import org.apache.directory.ldapstudio.browser.ui.editors.entry.ShowQuickFilterAction; +import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProvider; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuListener; +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.commands.ActionHandler; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.commands.ICommandService; + + +public class EntryEditorWidgetActionGroup implements IMenuListener +{ + + protected OpenSortDialogAction openSortDialogAction; + + protected ShowRawValuesAction showRawValuesAction; + + protected ShowQuickFilterAction showQuickFilterAction; + + protected OpenDefaultEditorAction openDefaultEditorAction; + + protected OpenBestEditorAction openBestEditorAction; + + protected OpenEditorAction[] openEditorActions; + + protected ValueEditorPreferencesAction openValueEditorPreferencesAction; + + protected final static String newValueAction = "newValueAction"; + + protected final static String copyAction = "copyAction"; + + protected final static String pasteAction = "pasteAction"; + + protected final static String deleteAction = "deleteAction"; + + protected final static String selectAllAction = "selectAllAction"; + + protected final static String propertyDialogAction = "propertyDialogAction"; + + protected Map entryEditorActionMap; + + protected IActionBars actionBars; + + private EntryEditorWidget mainWidget; + + + public EntryEditorWidgetActionGroup( EntryEditorWidget mainWidget, EntryEditorWidgetConfiguration configuration ) + { + + this.mainWidget = mainWidget; + this.entryEditorActionMap = new HashMap(); + TreeViewer viewer = mainWidget.getViewer(); + + this.openSortDialogAction = new OpenSortDialogAction( configuration.getPreferences() ); + this.showRawValuesAction = new ShowRawValuesAction(); + this.showQuickFilterAction = new ShowQuickFilterAction( mainWidget.getQuickFilterWidget() ); + + this.openBestEditorAction = new OpenBestEditorAction( viewer, this, configuration + .getValueProviderManager( viewer ) ); + this.openDefaultEditorAction = new OpenDefaultEditorAction( viewer, this.openBestEditorAction ); + ValueProvider[] valueProviders = configuration.getValueProviderManager( viewer ).getAllValueProviders(); + this.openEditorActions = new OpenEditorAction[valueProviders.length]; + for ( int i = 0; i < this.openEditorActions.length; i++ ) + { + this.openEditorActions[i] = new OpenEditorAction( viewer, this, configuration + .getValueProviderManager( viewer ), valueProviders[i] ); + } + this.openValueEditorPreferencesAction = new ValueEditorPreferencesAction(); + + this.entryEditorActionMap.put( newValueAction, new EntryEditorActionProxy( viewer, new NewValueAction() ) ); + + this.entryEditorActionMap.put( pasteAction, new EntryEditorActionProxy( viewer, new PasteAction() ) ); + this.entryEditorActionMap.put( copyAction, new EntryEditorActionProxy( viewer, new CopyAction( + ( BrowserActionProxy ) this.entryEditorActionMap.get( pasteAction ) ) ) ); + this.entryEditorActionMap.put( deleteAction, new EntryEditorActionProxy( viewer, new DeleteAction() ) ); + this.entryEditorActionMap.put( selectAllAction, new EntryEditorActionProxy( viewer, + new SelectAllAction( viewer ) ) ); + + this.entryEditorActionMap.put( propertyDialogAction, + new EntryEditorActionProxy( viewer, new PropertiesAction() ) ); + + } + + + public void dispose() + { + if ( this.mainWidget != null ) + { + + this.openSortDialogAction = null; + this.showQuickFilterAction.dispose(); + this.showQuickFilterAction = null; + this.showRawValuesAction.dispose(); + this.showRawValuesAction = null; + + this.openDefaultEditorAction.dispose(); + this.openDefaultEditorAction = null; + this.openBestEditorAction.dispose(); + this.openBestEditorAction = null; + for ( int i = 0; i < this.openEditorActions.length; i++ ) + { + this.openEditorActions[i].dispose(); + this.openEditorActions[i] = null; + } + this.openValueEditorPreferencesAction.dispose(); + this.openValueEditorPreferencesAction = null; + + for ( Iterator it = this.entryEditorActionMap.keySet().iterator(); it.hasNext(); ) + { + String key = ( String ) it.next(); + EntryEditorActionProxy action = ( EntryEditorActionProxy ) this.entryEditorActionMap.get( key ); + action.dispose(); + action = null; + it.remove(); + } + this.entryEditorActionMap.clear(); + this.entryEditorActionMap = null; + + this.actionBars = null; + this.mainWidget = null; + } + + } + + + public void enableGlobalActionHandlers( IActionBars actionBars ) + { + this.actionBars = actionBars; + this.activateGlobalActionHandlers(); + } + + + public void fillToolBar( IToolBarManager toolBarManager ) + { + + toolBarManager.add( ( IAction ) this.entryEditorActionMap.get( newValueAction ) ); + toolBarManager.add( new Separator() ); + toolBarManager.add( ( IAction ) this.entryEditorActionMap.get( deleteAction ) ); + toolBarManager.add( new Separator() ); + toolBarManager.add( this.showQuickFilterAction ); + toolBarManager.update( true ); + + } + + + public void fillMenu( IMenuManager menuManager ) + { + menuManager.add( this.openSortDialogAction ); + menuManager.add( this.showRawValuesAction ); + menuManager.addMenuListener( new IMenuListener() + { + public void menuAboutToShow( IMenuManager manager ) + { + showRawValuesAction.setChecked( BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_SHOW_RAW_VALUES ) ); + } + } ); + } + + + public void fillContextMenu( IMenuManager menuManager ) + { + menuManager.setRemoveAllWhenShown( true ); + menuManager.addMenuListener( this ); + } + + + public void menuAboutToShow( IMenuManager menuManager ) + { + + // new + menuManager.add( ( IAction ) this.entryEditorActionMap.get( newValueAction ) ); + menuManager.add( new Separator() ); + + // copy, paste, delete + menuManager.add( ( IAction ) this.entryEditorActionMap.get( copyAction ) ); + menuManager.add( ( IAction ) this.entryEditorActionMap.get( pasteAction ) ); + menuManager.add( ( IAction ) this.entryEditorActionMap.get( deleteAction ) ); + menuManager.add( ( IAction ) this.entryEditorActionMap.get( selectAllAction ) ); + menuManager.add( new Separator() ); + + // edit + addEditMenu( menuManager ); + menuManager.add( new Separator() ); + + // properties + menuManager.add( ( IAction ) this.entryEditorActionMap.get( propertyDialogAction ) ); + } + + + protected void addEditMenu( IMenuManager menuManager ) + { + // edit + menuManager.add( this.openDefaultEditorAction ); + MenuManager editorMenuManager = new MenuManager( "Edit Value With" ); + if ( this.openBestEditorAction.isEnabled() ) + { + editorMenuManager.add( this.openBestEditorAction ); + editorMenuManager.add( new Separator() ); + } + for ( int i = 0; i < this.openEditorActions.length; i++ ) + { + if ( this.openEditorActions[i].isEnabled() + && this.openEditorActions[i].getValueProvider().getClass() != this.openBestEditorAction + .getBestValueProvider().getClass() ) + { + editorMenuManager.add( this.openEditorActions[i] ); + } + } + editorMenuManager.add( new Separator() ); + editorMenuManager.add( this.openValueEditorPreferencesAction ); + menuManager.add( editorMenuManager ); + } + + + public void activateGlobalActionHandlers() + { + + ICommandService commandService = ( ICommandService ) PlatformUI.getWorkbench().getAdapter( + ICommandService.class ); + + if ( this.actionBars != null ) + { + actionBars.setGlobalActionHandler( ActionFactory.COPY.getId(), ( IAction ) this.entryEditorActionMap + .get( copyAction ) ); + actionBars.setGlobalActionHandler( ActionFactory.PASTE.getId(), ( IAction ) this.entryEditorActionMap + .get( pasteAction ) ); + actionBars.setGlobalActionHandler( ActionFactory.DELETE.getId(), ( IAction ) this.entryEditorActionMap + .get( deleteAction ) ); + actionBars.setGlobalActionHandler( ActionFactory.SELECT_ALL.getId(), ( IAction ) this.entryEditorActionMap + .get( selectAllAction ) ); + actionBars.setGlobalActionHandler( ActionFactory.PROPERTIES.getId(), ( IAction ) this.entryEditorActionMap + .get( propertyDialogAction ) ); + actionBars.setGlobalActionHandler( ActionFactory.FIND.getId(), this.showQuickFilterAction ); // IWorkbenchActionDefinitionIds.FIND_REPLACE + + actionBars.updateActionBars(); + } + else + { + if ( commandService != null ) + { + IAction da = ( IAction ) this.entryEditorActionMap.get( deleteAction ); + da.setActionDefinitionId( "org.apache.directory.ldapstudio.browser.action.delete" ); + commandService.getCommand( da.getActionDefinitionId() ).setHandler( new ActionHandler( da ) ); + + IAction ca = ( IAction ) this.entryEditorActionMap.get( copyAction ); + ca.setActionDefinitionId( "org.apache.directory.ldapstudio.browser.action.copy" ); + commandService.getCommand( ca.getActionDefinitionId() ).setHandler( new ActionHandler( ca ) ); + + IAction pa = ( IAction ) this.entryEditorActionMap.get( pasteAction ); + pa.setActionDefinitionId( "org.apache.directory.ldapstudio.browser.action.paste" ); + commandService.getCommand( pa.getActionDefinitionId() ).setHandler( new ActionHandler( pa ) ); + + showQuickFilterAction.setActionDefinitionId( "org.apache.directory.ldapstudio.browser.action.find" ); + commandService.getCommand( showQuickFilterAction.getActionDefinitionId() ).setHandler( + new ActionHandler( showQuickFilterAction ) ); + + IAction pda = ( IAction ) this.entryEditorActionMap.get( propertyDialogAction ); + pda.setActionDefinitionId( "org.apache.directory.ldapstudio.browser.action.properties" ); + commandService.getCommand( pda.getActionDefinitionId() ).setHandler( new ActionHandler( pda ) ); + } + } + + if ( commandService != null ) + { + IAction nva = ( IAction ) this.entryEditorActionMap.get( newValueAction ); + commandService.getCommand( nva.getActionDefinitionId() ).setHandler( new ActionHandler( nva ) ); + commandService.getCommand( openDefaultEditorAction.getActionDefinitionId() ).setHandler( + new ActionHandler( openDefaultEditorAction ) ); + } + + } + + + public void deactivateGlobalActionHandlers() + { + + ICommandService commandService = ( ICommandService ) PlatformUI.getWorkbench().getAdapter( + ICommandService.class ); + + if ( this.actionBars != null ) + { + actionBars.setGlobalActionHandler( ActionFactory.COPY.getId(), null ); + actionBars.setGlobalActionHandler( ActionFactory.PASTE.getId(), null ); + actionBars.setGlobalActionHandler( ActionFactory.DELETE.getId(), null ); + actionBars.setGlobalActionHandler( ActionFactory.SELECT_ALL.getId(), null ); + actionBars.setGlobalActionHandler( ActionFactory.FIND.getId(), null ); + actionBars.setGlobalActionHandler( ActionFactory.PROPERTIES.getId(), null ); + + actionBars.updateActionBars(); + } + else + { + if ( commandService != null ) + { + IAction da = ( IAction ) this.entryEditorActionMap.get( deleteAction ); + commandService.getCommand( da.getActionDefinitionId() ).setHandler( null ); + + IAction ca = ( IAction ) this.entryEditorActionMap.get( copyAction ); + commandService.getCommand( ca.getActionDefinitionId() ).setHandler( null ); + + IAction pa = ( IAction ) this.entryEditorActionMap.get( pasteAction ); + commandService.getCommand( pa.getActionDefinitionId() ).setHandler( null ); + + commandService.getCommand( showQuickFilterAction.getActionDefinitionId() ).setHandler( null ); + + IAction pda = ( IAction ) this.entryEditorActionMap.get( propertyDialogAction ); + commandService.getCommand( pda.getActionDefinitionId() ).setHandler( null ); + } + } + + if ( commandService != null ) + { + IAction nva = ( IAction ) this.entryEditorActionMap.get( newValueAction ); + commandService.getCommand( nva.getActionDefinitionId() ).setHandler( null ); + commandService.getCommand( openDefaultEditorAction.getActionDefinitionId() ).setHandler( null ); + } + + } + + + public OpenBestEditorAction getOpenBestEditorAction() + { + return openBestEditorAction; + } + + + public OpenDefaultEditorAction getOpenDefaultEditorAction() + { + return openDefaultEditorAction; + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetCellModifier.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetCellModifier.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetCellModifier.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetCellModifier.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,149 @@ +/* + * 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.widgets.entryeditor; + + +import org.apache.directory.ldapstudio.browser.core.model.IValue; +import org.apache.directory.ldapstudio.browser.core.model.ModelModificationException; +import org.apache.directory.ldapstudio.browser.core.model.schema.SchemaUtils; +import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProviderManager; + +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ICellModifier; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Item; + + +public class EntryEditorWidgetCellModifier implements ICellModifier +{ + + private ValueProviderManager valueProviderManager; + + + public EntryEditorWidgetCellModifier( ValueProviderManager valueProviderManager ) + { + this.valueProviderManager = valueProviderManager; + } + + + public void dispose() + { + this.valueProviderManager = null; + } + + + public boolean canModify( Object element, String property ) + { + if ( element != null && element instanceof IValue ) + { + IValue attributeValue = ( IValue ) element; + + if ( !SchemaUtils.isModifyable( attributeValue.getAttribute().getAttributeTypeDescription() ) ) + { + return false; + } + if ( attributeValue.isRdnPart() ) + { + return false; + } + if ( EntryEditorWidgetTableMetadata.KEY_COLUMN_NAME.equals( property ) ) + { + return false; + } + if ( EntryEditorWidgetTableMetadata.VALUE_COLUMN_NAME.equals( property ) ) + { + return this.valueProviderManager.getCurrentValueProvider( attributeValue ).getRawValue( attributeValue ) != null; + } + } + + return false; + } + + + public Object getValue( Object element, String property ) + { + if ( element != null && element instanceof IValue ) + { + IValue attributeValue = ( IValue ) element; + Object returnValue; + if ( EntryEditorWidgetTableMetadata.KEY_COLUMN_NAME.equals( property ) ) + { + returnValue = attributeValue.getAttribute().getDescription(); + } + else if ( EntryEditorWidgetTableMetadata.VALUE_COLUMN_NAME.equals( property ) ) + { + returnValue = this.valueProviderManager.getCurrentValueProvider( attributeValue ).getRawValue( + attributeValue ); + } + else + { + returnValue = ""; + } + return returnValue; + } + else + { + return null; + } + } + + + public void modify( Object element, String property, Object newRawValue ) + { + + if ( element != null && element instanceof Item ) + { + element = ( ( Item ) element ).getData(); + } + + if ( element != null && element instanceof IValue ) + { + IValue attributeValue = ( IValue ) element; + + if ( EntryEditorWidgetTableMetadata.KEY_COLUMN_NAME.equals( property ) ) + { + // no modification + } + else if ( EntryEditorWidgetTableMetadata.VALUE_COLUMN_NAME.equals( property ) ) + { + try + { + this.valueProviderManager.getCurrentValueProvider( attributeValue ).modify( attributeValue, + newRawValue ); + } + catch ( ModelModificationException mme ) + { + MessageDialog.openError( Display.getDefault().getActiveShell(), "Error While Modifying Value", mme + .getMessage() ); + } + } + else + { + // no modification + } + } + else + { + ; + } + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetConfiguration.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetConfiguration.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetConfiguration.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetConfiguration.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,153 @@ +/* + * 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.widgets.entryeditor; + + +import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProviderManager; +import org.eclipse.jface.viewers.TreeViewer; + + +public class EntryEditorWidgetConfiguration +{ + + private boolean disposed = false; + + protected EntryEditorWidgetSorter sorter; + + protected EntryEditorWidgetFilter filter; + + protected EntryEditorWidgetPreferences preferences; + + protected EntryEditorWidgetContentProvider contentProvider; + + protected EntryEditorWidgetLabelProvider labelProvider; + + protected EntryEditorWidgetCellModifier cellModifier; + + protected ValueProviderManager valueProviderManager; + + + public EntryEditorWidgetConfiguration() + { + } + + + public void dispose() + { + if ( !this.disposed ) + { + + if ( this.sorter != null ) + this.sorter.dispose(); + this.sorter = null; + + if ( this.filter != null ) + this.filter.dispose(); + this.filter = null; + + if ( this.preferences != null ) + this.preferences.dispose(); + this.preferences = null; + + if ( this.contentProvider != null ) + this.contentProvider.dispose(); + this.contentProvider = null; + + if ( this.labelProvider != null ) + this.labelProvider.dispose(); + this.labelProvider = null; + + if ( this.cellModifier != null ) + this.cellModifier.dispose(); + this.cellModifier = null; + + if ( this.valueProviderManager != null ) + this.valueProviderManager.dispose(); + this.valueProviderManager = null; + + this.disposed = true; + } + } + + + public EntryEditorWidgetContentProvider getContentProvider( EntryEditorWidget mainWidget ) + { + if ( this.contentProvider == null ) + this.contentProvider = new EntryEditorWidgetContentProvider( this.getPreferences(), mainWidget ); + + return contentProvider; + } + + + public EntryEditorWidgetLabelProvider getLabelProvider( TreeViewer viewer ) + { + if ( this.labelProvider == null ) + this.labelProvider = new EntryEditorWidgetLabelProvider( this.getValueProviderManager( viewer ) ); + + return labelProvider; + } + + + public EntryEditorWidgetCellModifier getCellModifier( TreeViewer viewer ) + { + if ( this.cellModifier == null ) + this.cellModifier = new EntryEditorWidgetCellModifier( this.getValueProviderManager( viewer ) ); + + return cellModifier; + } + + + public ValueProviderManager getValueProviderManager( TreeViewer viewer ) + { + if ( this.valueProviderManager == null ) + this.valueProviderManager = new ValueProviderManager( viewer.getTree() ); + + return valueProviderManager; + } + + + public EntryEditorWidgetSorter getSorter() + { + if ( this.sorter == null ) + this.sorter = new EntryEditorWidgetSorter( getPreferences() ); + + return sorter; + } + + + public EntryEditorWidgetFilter getFilter() + { + if ( this.filter == null ) + this.filter = new EntryEditorWidgetFilter(); + + return filter; + } + + + public EntryEditorWidgetPreferences getPreferences() + { + if ( this.preferences == null ) + this.preferences = new EntryEditorWidgetPreferences(); + + return preferences; + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetContentProvider.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetContentProvider.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetContentProvider.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetContentProvider.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,185 @@ +/* + * 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.widgets.entryeditor; + + +import java.util.ArrayList; +import java.util.List; + +import org.apache.directory.ldapstudio.browser.core.jobs.InitializeAttributesJob; +import org.apache.directory.ldapstudio.browser.core.model.AttributeHierachie; +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.ui.BrowserUIConstants; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin; + +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.Viewer; + + +public class EntryEditorWidgetContentProvider implements ITreeContentProvider +{ + + protected EntryEditorWidgetPreferences preferences; + + protected EntryEditorWidget mainWidget; + + + public EntryEditorWidgetContentProvider( EntryEditorWidgetPreferences preferences, EntryEditorWidget mainWidget ) + { + this.preferences = preferences; + this.mainWidget = mainWidget; + } + + + public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) + { + + String dn = ""; + boolean enabled = true; + + if ( newInput != null && newInput instanceof IEntry ) + { + IEntry entry = ( IEntry ) newInput; + dn = "DN: " + entry.getDn().toString(); + } + else if ( newInput != null && newInput instanceof AttributeHierachie ) + { + AttributeHierachie ah = ( AttributeHierachie ) newInput; + dn = "DN: " + ah.getAttribute().getEntry().getDn().toString(); + } + else + { + dn = "No entry selected"; + enabled = false; + } + + if ( this.mainWidget.getInfoText() != null && !this.mainWidget.getInfoText().isDisposed() ) + { + this.mainWidget.getInfoText().setText( dn ); + } + if ( this.mainWidget.getQuickFilterWidget() != null ) + { + this.mainWidget.getQuickFilterWidget().setEnabled( enabled ); + } + if ( this.mainWidget.getViewer() != null && !this.mainWidget.getViewer().getTree().isDisposed() ) + { + this.mainWidget.getViewer().getTree().setEnabled( enabled ); + } + } + + + public void dispose() + { + } + + + public Object[] getElements( Object inputElement ) + { + + if ( inputElement != null && inputElement instanceof IEntry ) + { + IEntry entry = ( IEntry ) inputElement; + + if ( !entry.isAttributesInitialized() && entry.isDirectoryEntry() ) + { + boolean soa = BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_SHOW_OPERATIONAL_ATTRIBUTES ); + InitializeAttributesJob job = new InitializeAttributesJob( new IEntry[] + { entry }, soa ); + job.execute(); + return new Object[] + {}; + } + else + { + IAttribute[] attributes = entry.getAttributes(); + Object[] values = getValues( attributes ); + return values; + } + } + else if ( inputElement != null && inputElement instanceof AttributeHierachie ) + { + AttributeHierachie ah = ( AttributeHierachie ) inputElement; + IAttribute[] attributes = ah.getAttributes(); + Object[] values = getValues( attributes ); + return values; + } + else + { + return new Object[] + {}; + } + } + + + private Object[] getValues( IAttribute[] attributes ) + { + List valueList = new ArrayList(); + for ( int i = 0; attributes != null && i < attributes.length; i++ ) + { + IValue[] values = attributes[i].getValues(); + if ( this.preferences == null || !this.preferences.isUseFolding() + || ( values.length <= this.preferences.getFoldingThreshold() ) ) + { + for ( int j = 0; j < values.length; j++ ) + { + valueList.add( values[j] ); + } + } + else + { + valueList.add( attributes[i] ); + } + } + return valueList.toArray(); + } + + + public Object[] getChildren( Object parentElement ) + { + if ( parentElement instanceof IAttribute ) + { + IAttribute attribute = ( IAttribute ) parentElement; + IValue[] values = attribute.getValues(); + return values; + } + return null; + } + + + public Object getParent( Object element ) + { + if ( element instanceof IValue ) + { + return ( ( IValue ) element ).getAttribute(); + } + return null; + } + + + public boolean hasChildren( Object element ) + { + return ( element instanceof IAttribute ); + } + +} \ No newline at end of file Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetFilter.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetFilter.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetFilter.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetFilter.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,220 @@ +/* + * 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.widgets.entryeditor; + + +import java.util.ArrayList; + +import org.apache.directory.ldapstudio.browser.core.model.IAttribute; +import org.apache.directory.ldapstudio.browser.core.model.IValue; + +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; + + +public class EntryEditorWidgetFilter extends ViewerFilter +{ + + protected TreeViewer viewer; + + protected String quickFilterAttribute; + + protected String quickFilterValue; + + + public EntryEditorWidgetFilter() + { + this.quickFilterAttribute = ""; + this.quickFilterValue = ""; + } + + + public void connect( TreeViewer viewer ) + { + this.viewer = viewer; + this.viewer.addFilter( this ); + } + + + public Object[] filter( Viewer viewer, Object parent, Object[] elements ) + { + + int size = elements.length; + ArrayList out = new ArrayList( size ); + for ( int i = 0; i < size; ++i ) + { + Object element = elements[i]; + if ( select( viewer, parent, element ) ) + out.add( element ); + } + + return out.toArray(); + } + + + public boolean select( Viewer viewer, Object parentElement, Object element ) + { + + if ( element instanceof IAttribute ) + { + IAttribute attribute = ( IAttribute ) element; + + // check if one of the values goes through the quick filter + boolean oneGoesThrough = false; + IValue[] values = attribute.getValues(); + for ( int i = 0; i < values.length; i++ ) + { + if ( this.goesThroughQuickFilter( values[i] ) ) + { + oneGoesThrough = true; + break; + } + } + if ( !oneGoesThrough ) + { + return false; + } + + return true; + } + else if ( element instanceof IValue ) + { + IValue value = ( IValue ) element; + + // check quick filter + if ( !this.goesThroughQuickFilter( value ) ) + { + return false; + } + + // filter attribute types + if ( value.getAttribute().isObjectClassAttribute() ) + return this.isShowObjectClassAttribute(); + else if ( value.getAttribute().isMustAttribute() ) + return this.isShowMustAttributes(); + else if ( value.getAttribute().isMayAttribute() ) + return this.isShowMayAttributes(); + else if ( value.getAttribute().isOperationalAttribute() ) + return this.isShowOperationalAttributes(); + else + return true; + } + else + { + return true; + } + } + + + private boolean goesThroughQuickFilter( IValue value ) + { + // filter attribute description + if ( this.quickFilterAttribute != null && !"".equals( this.quickFilterAttribute ) ) + { + if ( value.getAttribute().getDescription().toUpperCase().indexOf( this.quickFilterAttribute.toUpperCase() ) == -1 ) + { + return false; + } + } + + // fitler value + if ( this.quickFilterValue != null && !"".equals( this.quickFilterValue ) ) + { + if ( value.isString() + && value.getStringValue().toUpperCase().indexOf( this.quickFilterValue.toUpperCase() ) == -1 ) + { + return false; + } + else if ( value.isBinary() ) + { + return false; + } + } + + return true; + } + + + public void dispose() + { + this.viewer = null; + } + + + public String getQuickFilterAttribute() + { + return quickFilterAttribute; + } + + + public void setQuickFilterAttribute( String quickFilterAttribute ) + { + if ( !this.quickFilterAttribute.equals( quickFilterAttribute ) ) + { + this.quickFilterAttribute = quickFilterAttribute; + if ( this.viewer != null ) + this.viewer.refresh(); + } + } + + + public String getQuickFilterValue() + { + return quickFilterValue; + } + + + public void setQuickFilterValue( String quickFilterValue ) + { + if ( !this.quickFilterValue.equals( quickFilterValue ) ) + { + this.quickFilterValue = quickFilterValue; + if ( this.viewer != null ) + this.viewer.refresh(); + } + } + + + public boolean isShowMayAttributes() + { + return true; + } + + + public boolean isShowMustAttributes() + { + return true; + } + + + public boolean isShowObjectClassAttribute() + { + return true; + } + + + public boolean isShowOperationalAttributes() + { + return true; + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetLabelProvider.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetLabelProvider.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetLabelProvider.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetLabelProvider.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,251 @@ +/* + * 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.widgets.entryeditor; + + +import org.apache.directory.ldapstudio.browser.core.model.IAttribute; +import org.apache.directory.ldapstudio.browser.core.model.IValue; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin; +import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProvider; +import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProviderManager; + +import org.eclipse.jface.preference.PreferenceConverter; +import org.eclipse.jface.viewers.IColorProvider; +import org.eclipse.jface.viewers.IFontProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.RGB; + + +public class EntryEditorWidgetLabelProvider extends LabelProvider implements ITableLabelProvider, IFontProvider, + IColorProvider +{ + + private ValueProviderManager valueProviderManager; + + + public EntryEditorWidgetLabelProvider( ValueProviderManager valueProviderManager ) + { + this.valueProviderManager = valueProviderManager; + } + + + public void dispose() + { + super.dispose(); + this.valueProviderManager = null; + } + + + public final String getColumnText( Object obj, int index ) + { + + if ( obj != null && obj instanceof IValue ) + { + IValue value = ( IValue ) obj; + switch ( index ) + { + case EntryEditorWidgetTableMetadata.KEY_COLUMN_INDEX: + return value.getAttribute().getDescription(); + case EntryEditorWidgetTableMetadata.VALUE_COLUMN_INDEX: + ValueProvider vp = this.valueProviderManager.getCurrentValueProvider( value ); + String dv = vp.getDisplayValue( value ); + return dv; + default: + return ""; + } + } + else if ( obj != null && obj instanceof IAttribute ) + { + IAttribute attribute = ( IAttribute ) obj; + if ( index == EntryEditorWidgetTableMetadata.KEY_COLUMN_INDEX ) + { + return attribute.getDescription() + " (" + attribute.getValueSize() + " values)"; + } + else + { + return ""; + } + } + else + { + return ""; + } + } + + + public final Image getColumnImage( Object element, int index ) + { + return null; + } + + + public Font getFont( Object element ) + { + + IAttribute attribute = null; + IValue value = null; + if ( element instanceof IAttribute ) + { + attribute = ( IAttribute ) element; + } + else if ( element instanceof IValue ) + { + value = ( IValue ) element; + attribute = value.getAttribute(); + } + + // inconsistent attributes and values + if ( value != null ) + { + if ( value.isEmpty() ) + { + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_ERROR_FONT ); + return BrowserUIPlugin.getDefault().getFont( fontData ); + } + } + if ( attribute != null && value == null ) + { + if ( !attribute.isConsistent() ) + { + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_ERROR_FONT ); + return BrowserUIPlugin.getDefault().getFont( fontData ); + } + } + + // attribute type + if ( attribute != null ) + { + if ( attribute.isObjectClassAttribute() ) + { + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_OBJECTCLASS_FONT ); + return BrowserUIPlugin.getDefault().getFont( fontData ); + } + else if ( attribute.isMustAttribute() ) + { + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_MUSTATTRIBUTE_FONT ); + return BrowserUIPlugin.getDefault().getFont( fontData ); + } + else if ( attribute.isOperationalAttribute() ) + { + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_OPERATIONALATTRIBUTE_FONT ); + return BrowserUIPlugin.getDefault().getFont( fontData ); + } + else + { + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_MAYATTRIBUTE_FONT ); + return BrowserUIPlugin.getDefault().getFont( fontData ); + } + } + else + { + return null; + } + } + + + public Color getForeground( Object element ) + { + + IAttribute attribute = null; + IValue value = null; + if ( element instanceof IAttribute ) + { + attribute = ( IAttribute ) element; + } + else if ( element instanceof IValue ) + { + value = ( IValue ) element; + attribute = value.getAttribute(); + } + + // inconsistent attributes and values + if ( value != null ) + { + if ( value.isEmpty() ) + { + RGB rgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_ERROR_COLOR ); + return BrowserUIPlugin.getDefault().getColor( rgb ); + } + } + if ( attribute != null && value == null ) + { + if ( !attribute.isConsistent() ) + { + RGB rgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_ERROR_COLOR ); + return BrowserUIPlugin.getDefault().getColor( rgb ); + } + } + + // attribute type + if ( attribute != null ) + { + if ( attribute.isObjectClassAttribute() ) + { + RGB rgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_OBJECTCLASS_COLOR ); + return BrowserUIPlugin.getDefault().getColor( rgb ); + } + else if ( attribute.isMustAttribute() ) + { + RGB rgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_MUSTATTRIBUTE_COLOR ); + return BrowserUIPlugin.getDefault().getColor( rgb ); + } + else if ( attribute.isOperationalAttribute() ) + { + RGB rgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_OPERATIONALATTRIBUTE_COLOR ); + return BrowserUIPlugin.getDefault().getColor( rgb ); + } + else + { + RGB rgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_MAYATTRIBUTE_COLOR ); + return BrowserUIPlugin.getDefault().getColor( rgb ); + } + } + else + { + return null; + } + } + + + public Color getBackground( Object element ) + { + return null; + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetPreferences.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetPreferences.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetPreferences.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetPreferences.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,135 @@ +/* + * 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.widgets.entryeditor; + + +import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; + + +public class EntryEditorWidgetPreferences implements IPropertyChangeListener +{ + + protected Viewer viewer; + + + public EntryEditorWidgetPreferences() + { + BrowserUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener( this ); + } + + + public void connect( TreeViewer viewer ) + { + this.viewer = viewer; + } + + + public void dispose() + { + BrowserUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener( this ); + this.viewer = null; + } + + + public boolean isUseFolding() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_ENABLE_FOLDING ); + } + + + public int getFoldingThreshold() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getInt( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_FOLDING_THRESHOLD ); + } + + + public boolean isShowMayAttributes() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_SHOW_MAY_ATTRIBUTES ); + } + + + public boolean isShowMustAttributes() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_SHOW_MUST_ATTRIBUTES ); + } + + + public boolean isShowObjectClassAttribute() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_SHOW_OBJECTCLASS_ATTRIBUTES ); + } + + + public boolean isShowOperationalAttributes() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_SHOW_OPERATIONAL_ATTRIBUTES ); + } + + + public boolean isObjectClassAndMustAttributesFirst() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_OBJECTCLASS_AND_MUST_ATTRIBUTES_FIRST ); + } + + + public boolean isOperationalAttributesLast() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_OPERATIONAL_ATTRIBUTES_LAST ); + } + + + public int getDefaultSortBy() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getInt( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_DEFAULT_SORT_BY ); + } + + + public int getDefaultSortOrder() + { + return BrowserUIPlugin.getDefault().getPreferenceStore().getInt( + BrowserUIConstants.PREFERENCE_ENTRYEDITOR_DEFAULT_SORT_ORDER ); + } + + + public void propertyChange( PropertyChangeEvent event ) + { + if ( this.viewer != null ) + { + this.viewer.refresh(); + } + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetQuickFilterWidget.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetQuickFilterWidget.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetQuickFilterWidget.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetQuickFilterWidget.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,233 @@ +/* + * 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.widgets.entryeditor; + + +import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin; +import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils; +import org.eclipse.jface.preference.PreferenceConverter; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; + + +public class EntryEditorWidgetQuickFilterWidget +{ + + private EntryEditorWidgetFilter filter; + + private EntryEditorWidget entryEditorWidget; + + private Composite parent; + + private Composite composite; + + private Composite innerComposite; + + private Text quickFilterAttributeText; + + private Text quickFilterValueText; + + private Button clearQuickFilterButton; + + + public EntryEditorWidgetQuickFilterWidget( EntryEditorWidgetFilter filter, EntryEditorWidget entryEditorWidget ) + { + this.filter = filter; + this.entryEditorWidget = entryEditorWidget; + } + + + public void createComposite( Composite parent ) + { + this.parent = parent; + + this.composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 ); + GridLayout gl = new GridLayout(); + gl.marginHeight = 2; + gl.marginWidth = 2; + composite.setLayout( gl ); + + this.innerComposite = null; + } + + + private void create() + { + innerComposite = BaseWidgetUtils.createColumnContainer( this.composite, 3, 1 ); + + this.quickFilterAttributeText = new Text( innerComposite, SWT.BORDER ); + this.quickFilterAttributeText.setLayoutData( new GridData( 200 - 14, SWT.DEFAULT ) ); + this.quickFilterAttributeText.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + filter.setQuickFilterAttribute( quickFilterAttributeText.getText() ); + clearQuickFilterButton.setEnabled( !"".equals( quickFilterAttributeText.getText() ) + || !"".equals( quickFilterValueText.getText() ) ); + if ( !"".equals( quickFilterAttributeText.getText() ) ) + { + RGB fgRgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_QUICKFILTER_FOREGROUND_COLOR ); + RGB bgRgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_QUICKFILTER_BACKGROUND_COLOR ); + Color fgColor = BrowserUIPlugin.getDefault().getColor( fgRgb ); + Color bgColor = BrowserUIPlugin.getDefault().getColor( bgRgb ); + quickFilterAttributeText.setForeground( fgColor ); + quickFilterAttributeText.setBackground( bgColor ); + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_QUICKFILTER_FONT ); + Font font = BrowserUIPlugin.getDefault().getFont( fontData ); + quickFilterAttributeText.setFont( font ); + } + else + { + quickFilterAttributeText.setBackground( null ); + } + } + } ); + + this.quickFilterValueText = new Text( innerComposite, SWT.BORDER ); + this.quickFilterValueText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); + this.quickFilterValueText.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + filter.setQuickFilterValue( quickFilterValueText.getText() ); + clearQuickFilterButton.setEnabled( !"".equals( quickFilterAttributeText.getText() ) + || !"".equals( quickFilterValueText.getText() ) ); + if ( !"".equals( quickFilterValueText.getText() ) ) + { + RGB fgRgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_QUICKFILTER_FOREGROUND_COLOR ); + RGB bgRgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(), + BrowserUIConstants.PREFERENCE_QUICKFILTER_BACKGROUND_COLOR ); + Color fgColor = BrowserUIPlugin.getDefault().getColor( fgRgb ); + Color bgColor = BrowserUIPlugin.getDefault().getColor( bgRgb ); + quickFilterValueText.setForeground( fgColor ); + quickFilterValueText.setBackground( bgColor ); + FontData[] fontData = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault() + .getPreferenceStore(), BrowserUIConstants.PREFERENCE_QUICKFILTER_FONT ); + Font font = BrowserUIPlugin.getDefault().getFont( fontData ); + quickFilterValueText.setFont( font ); + } + else + { + quickFilterValueText.setBackground( null ); + } + } + } ); + + this.clearQuickFilterButton = new Button( innerComposite, SWT.PUSH ); + this.clearQuickFilterButton.setToolTipText( "Clear Quick Filter" ); + this.clearQuickFilterButton.setImage( BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_CLEAR ) ); + this.clearQuickFilterButton.setEnabled( false ); + this.clearQuickFilterButton.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + if ( !"".equals( quickFilterAttributeText.getText() ) ) + quickFilterAttributeText.setText( "" ); + if ( !"".equals( quickFilterValueText.getText() ) ) + quickFilterValueText.setText( "" ); + } + } ); + + setEnabled( composite.isEnabled() ); + + composite.layout( true, true ); + parent.layout( true, true ); + } + + + private void destroy() + { + if ( !"".equals( quickFilterAttributeText.getText() ) ) + quickFilterAttributeText.setText( "" ); + if ( !"".equals( quickFilterValueText.getText() ) ) + quickFilterValueText.setText( "" ); + innerComposite.dispose(); + innerComposite = null; + + composite.layout( true, true ); + parent.layout( true, true ); + } + + + public void dispose() + { + if ( this.filter != null ) + { + this.quickFilterAttributeText = null; + this.quickFilterValueText = null; + this.clearQuickFilterButton = null; + this.innerComposite = null; + this.composite.dispose(); + this.composite = null; + this.parent = null; + this.filter = null; + } + } + + + public void setEnabled( boolean enabled ) + { + if ( this.composite != null && !this.composite.isDisposed() ) + { + this.composite.setEnabled( enabled ); + } + if ( this.innerComposite != null && !this.innerComposite.isDisposed() ) + { + this.innerComposite.setEnabled( enabled ); + this.quickFilterAttributeText.setEnabled( enabled ); + this.quickFilterValueText.setEnabled( enabled ); + this.clearQuickFilterButton.setEnabled( enabled ); + } + } + + + public void setActive( boolean visible ) + { + if ( visible && this.innerComposite == null && composite != null ) + { + create(); + this.quickFilterAttributeText.setFocus(); + } + else if ( !visible && this.innerComposite != null && composite != null ) + { + destroy(); + this.entryEditorWidget.getViewer().getTree().setFocus(); + } + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetSorter.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetSorter.java?view=auto&rev=488371 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetSorter.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/widgets/entryeditor/EntryEditorWidgetSorter.java Mon Dec 18 09:57:38 2006 @@ -0,0 +1,378 @@ +/* + * 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.widgets.entryeditor; + + +import java.util.Arrays; +import java.util.Comparator; + +import org.apache.directory.ldapstudio.browser.core.BrowserCoreConstants; +import org.apache.directory.ldapstudio.browser.core.model.IAttribute; +import org.apache.directory.ldapstudio.browser.core.model.IValue; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants; +import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin; + +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.TreeColumn; + + +public class EntryEditorWidgetSorter extends ViewerSorter implements SelectionListener +{ + + private TreeViewer viewer; + + private int sortBy; + + private int sortOrder; + + private EntryEditorWidgetPreferences preferences; + + + public EntryEditorWidgetSorter( EntryEditorWidgetPreferences preferences ) + { + this.sortBy = BrowserCoreConstants.SORT_BY_NONE; + this.sortOrder = BrowserCoreConstants.SORT_ORDER_NONE; + this.preferences = preferences; + } + + + public void connect( TreeViewer viewer ) + { + this.viewer = viewer; + this.viewer.setSorter( this ); + + TreeColumn[] columns = ( ( TreeViewer ) viewer ).getTree().getColumns(); + for ( int i = 0; i < columns.length; i++ ) + { + columns[i].addSelectionListener( this ); + } + } + + + public void dispose() + { + /* + * TableColumn[] columns = this.viewer.getTable().getColumns(); for(int + * i=0; i