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 2009/08/13 17:20:15 UTC

svn commit: r803927 - in /directory/studio/trunk/ldapbrowser-ui: ./ src/main/java/org/apache/directory/studio/ldapbrowser/ui/ src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/preferences/

Author: pamarcelot
Date: Thu Aug 13 15:20:12 2009
New Revision: 803927

URL: http://svn.apache.org/viewvc?rev=803927&view=rev
Log:
DIRSTUDIO-516:
o Completed the behavior of the preference page.

Modified:
    directory/studio/trunk/ldapbrowser-ui/plugin.xml
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIConstants.java
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIPreferencesInitializer.java
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/preferences/EntryEditorsPreferencePage.java

Modified: directory/studio/trunk/ldapbrowser-ui/plugin.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/plugin.xml?rev=803927&r1=803926&r2=803927&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/plugin.xml (original)
+++ directory/studio/trunk/ldapbrowser-ui/plugin.xml Thu Aug 13 15:20:12 2009
@@ -442,6 +442,16 @@
           priority="5"
           multiWindow="false">
     </entryEditor>
+    <entryEditor
+          class="org.apache.directory.studio.ldapbrowser.ui.editors.entry.EntryEditor"
+          description="Example Entry Editor"
+          editorId="%Editor_EntryEditor_id"
+          icon="resources/icons/browser_entryeditor.gif"
+          id="org.apache.directory.studio.exampleentryeditorsuperior"
+          name="Example Entry Editor Superior"
+          priority="1"
+          multiWindow="false">
+    </entryEditor>
  </extension>
 
 </plugin>

Modified: directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIConstants.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIConstants.java?rev=803927&r1=803926&r2=803927&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIConstants.java (original)
+++ directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIConstants.java Thu Aug 13 15:20:12 2009
@@ -56,7 +56,13 @@
     public static final String PREFERENCEPAGEID_SEARCHLOGS = BrowserUIPlugin.getDefault().getPluginProperties()
         .getString( "PrefPage_SearchLogsPreferencePage_id" ); //$NON-NLS-1$
     public static final String PREFERENCEPAGEID_TEXTFORMATS = BrowserUIPlugin.getDefault().getPluginProperties()
-    .getString( "PrefPage_TextFormatsPreferencePage_id" ); //$NON-NLS-1$
+        .getString( "PrefPage_TextFormatsPreferencePage_id" ); //$NON-NLS-1$
+
+    /** The constant used to identify the "user user priorities" preference  */
+    public static final String PREFERENCE_ENTRYEDITORS_USE_USER_PRIORITIES = "useUserPriorities"; //$NON-NLS-1$
+
+    /** The constant used to identify the "user user priorities" preference  */
+    public static final String PREFERENCE_ENTRYEDITORS_USER_PRIORITIES = "userPriorities"; //$NON-NLS-1$
 
     public static final String IMG_LINK_WITH_EDITOR = "resources/icons/link_with_editor.gif"; //$NON-NLS-1$
     public static final String IMG_BATCH = "resources/icons/batch.gif"; //$NON-NLS-1$
@@ -194,7 +200,7 @@
     public static final String WIZARD_EXPORT_EXCEL = BrowserUIPlugin.getDefault().getPluginProperties().getString(
         "ExportWizard_ExportExcelWizard_id" ); //$NON-NLS-1$
     public static final String WIZARD_EXPORT_ODF = BrowserUIPlugin.getDefault().getPluginProperties().getString(
-    "ExportWizard_ExportOdfWizard_id" ); //$NON-NLS-1$
+        "ExportWizard_ExportOdfWizard_id" ); //$NON-NLS-1$
     public static final String WIZARD_EXPORT_LDIF = BrowserUIPlugin.getDefault().getPluginProperties().getString(
         "ExportWizard_ExportLdifWizard_id" ); //$NON-NLS-1$
     public static final String WIZARD_IMPORT_CONNECTIONS = BrowserUIPlugin.getDefault().getPluginProperties()

Modified: directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIPreferencesInitializer.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIPreferencesInitializer.java?rev=803927&r1=803926&r2=803927&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIPreferencesInitializer.java (original)
+++ directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/BrowserUIPreferencesInitializer.java Thu Aug 13 15:20:12 2009
@@ -46,6 +46,10 @@
         // Search Result Editor
         store.setDefault( BrowserUIConstants.PREFERENCE_SEARCHRESULTEDITOR_SHOW_DN, true );
         store.setDefault( BrowserUIConstants.PREFERENCE_SEARCHRESULTEDITOR_SHOW_LINKS, true );
+
+        // Entry Editors
+        store.setDefault( BrowserUIConstants.PREFERENCE_ENTRYEDITORS_USE_USER_PRIORITIES, false );
+        store.setDefault( BrowserUIConstants.PREFERENCE_ENTRYEDITORS_USER_PRIORITIES, "" );
     }
 
 }

Modified: directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/preferences/EntryEditorsPreferencePage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/preferences/EntryEditorsPreferencePage.java?rev=803927&r1=803926&r2=803927&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/preferences/EntryEditorsPreferencePage.java (original)
+++ directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/preferences/EntryEditorsPreferencePage.java Thu Aug 13 15:20:12 2009
@@ -20,7 +20,18 @@
 package org.apache.directory.studio.ldapbrowser.ui.dialogs.preferences;
 
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
+import org.apache.directory.studio.connection.ui.widgets.BaseWidgetUtils;
 import org.apache.directory.studio.entryeditors.EntryEditorExtension;
+import org.apache.directory.studio.ldapbrowser.ui.BrowserUIConstants;
 import org.apache.directory.studio.ldapbrowser.ui.BrowserUIPlugin;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -30,13 +41,14 @@
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Image;
 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.Control;
-import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
@@ -51,6 +63,57 @@
  */
 public class EntryEditorsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage
 {
+    /** The priorities separator */
+    private static final String PRIORITIES_SEPARATOR = ",";
+
+    /** A flag indicating whether or not to use the user's priority for entry editors */
+    private boolean useUserPriority = false;
+
+    /** The ordered list of entry editors */
+    private List<EntryEditorExtension> sortedEntryEditorsList;
+
+    /** */
+    private Comparator<EntryEditorExtension> entryEditorComparator = new Comparator<EntryEditorExtension>()
+    {
+        public int compare( EntryEditorExtension o1, EntryEditorExtension o2 )
+        {
+            if ( o1 == null )
+            {
+                return ( o2 == null ) ? 0 : -1;
+            }
+
+            if ( o2 == null )
+            {
+                return 1;
+            }
+
+            // Getting priorities
+            int o1Priority = o1.getPriority();
+            int o2Priority = o2.getPriority();
+
+            if ( o1Priority != o2Priority )
+            {
+                return ( o1Priority > o2Priority ) ? -1 : 1;
+            }
+
+            // Getting names
+            String o1Name = o1.getName();
+            String o2Name = o2.getName();
+
+            if ( o1Name == null )
+            {
+                return ( o2Name == null ) ? 0 : -1;
+            }
+
+            if ( o2 == null )
+            {
+                return 1;
+            }
+
+            return o1Name.compareTo( o2Name );
+        }
+    };
+
     // UI fields
     private TableViewer entryEditorsTableViewer;
     private Button upButton;
@@ -73,6 +136,8 @@
      */
     public void init( IWorkbench workbench )
     {
+        useUserPriority = ConnectionCorePlugin.getDefault().getPluginPreferences().getBoolean(
+            BrowserUIConstants.PREFERENCE_ENTRYEDITORS_USE_USER_PRIORITIES );
     }
 
 
@@ -86,8 +151,7 @@
         composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
 
         // Entry Editors Label
-        Label entryEditorsLabel = new Label( composite, SWT.NONE );
-        entryEditorsLabel.setText( "Entry Editors:" );
+        BaseWidgetUtils.createLabel( composite, "Entry Editors:", 1 );
 
         // Entry Editors Composite
         Composite entryEditorsComposite = new Composite( composite, SWT.NONE );
@@ -120,21 +184,35 @@
             .getEntryEditorExtensions() );
 
         // Up Button
-        upButton = new Button( entryEditorsComposite, SWT.PUSH );
-        upButton.setText( "Up" );
+        upButton = BaseWidgetUtils.createButton( entryEditorsComposite, "Up", 1 );
         upButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        upButton.setEnabled( false );
+        upButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                moveSelectedEntryEditor( MoveEntryEditorDirectionEnum.UP );
+            }
+        } );
 
         // Down Button
-        downButton = new Button( entryEditorsComposite, SWT.PUSH );
-        downButton.setText( "Down" );
+        downButton = BaseWidgetUtils.createButton( entryEditorsComposite, "Down", 1 );
         downButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        downButton.setEnabled( false );
+        downButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                moveSelectedEntryEditor( MoveEntryEditorDirectionEnum.DOWN );
+            }
+        } );
 
         // Description Label
-        Label descriptionLabel = new Label( composite, SWT.NONE );
-        descriptionLabel.setText( "Description:" );
+        BaseWidgetUtils.createLabel( composite, "Description:", 1 );
 
         // Description Text
         final Text descriptionText = new Text( composite, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY );
+        descriptionText.setEditable( false );
         gridData = new GridData( SWT.FILL, SWT.NONE, true, false );
         gridData.heightHint = 27;
         descriptionText.setLayoutData( gridData );
@@ -143,25 +221,250 @@
         {
             public void selectionChanged( SelectionChangedEvent event )
             {
-                EntryEditorExtension schemaConnector = ( EntryEditorExtension ) ( ( StructuredSelection ) entryEditorsTableViewer
+                // Getting the selected entry editor
+                EntryEditorExtension entryEditor = ( EntryEditorExtension ) ( ( StructuredSelection ) entryEditorsTableViewer
                     .getSelection() ).getFirstElement();
-
-                if ( schemaConnector != null )
+                if ( entryEditor != null )
                 {
-                    descriptionText.setText( schemaConnector.getDescription() );
+                    // Updating the description text field
+                    descriptionText.setText( entryEditor.getDescription() );
+
+                    // Updating the state of the buttons
+                    updateButtonsState( entryEditor );
                 }
             }
         } );
 
+        if ( useUserPriority )
+        {
+            sortEntryEditorsByUserPriority();
+        }
+        else
+        {
+            sortEntryEditorsByDefaultPriority();
+        }
+
         return parent;
     }
 
 
     /**
+     * Sorts the entry editors using the user's priority.
+     */
+    private void sortEntryEditorsByUserPriority()
+    {
+        // Getting the user's priorities
+        String userPriorities = ConnectionCorePlugin.getDefault().getPluginPreferences().getString(
+            BrowserUIConstants.PREFERENCE_ENTRYEDITORS_USER_PRIORITIES );
+        if ( ( userPriorities != null ) && ( !"".equals( userPriorities ) ) )
+        {
+            // Getting all entry editors
+            Collection<EntryEditorExtension> entryEditorExtensions = BrowserUIPlugin.getDefault()
+                .getEntryEditorManager().getEntryEditorExtensions();
+
+            String[] splittedUserPriorities = userPriorities.split( PRIORITIES_SEPARATOR );
+            if ( ( splittedUserPriorities != null ) && ( splittedUserPriorities.length > 0 ) )
+            {
+
+                // Creating a map where entry editors are accessible via their ID
+                Map<String, EntryEditorExtension> entryEditorsMap = new HashMap<String, EntryEditorExtension>();
+                for ( EntryEditorExtension entryEditorExtension : entryEditorExtensions )
+                {
+                    entryEditorsMap.put( entryEditorExtension.getId(), entryEditorExtension );
+                }
+
+                // Creating the sorted entry editors list
+                sortedEntryEditorsList = new ArrayList<EntryEditorExtension>( entryEditorExtensions.size() );
+
+                // Adding the entry editors according to the user's priority
+                for ( String entryEditorId : splittedUserPriorities )
+                {
+                    // Verifying the entry editor is present in the map
+                    if ( entryEditorsMap.containsKey( entryEditorId ) )
+                    {
+                        // Adding it to the sorted list
+                        sortedEntryEditorsList.add( entryEditorsMap.get( entryEditorId ) );
+                    }
+                }
+            }
+
+            // If some new plugins have been added recently, their new 
+            // entry editors may not be present in the string stored in 
+            // the preferences.
+            // We are then adding them at the end of the sorted list.
+
+            // Creating a list of remaining entry editors
+            List<EntryEditorExtension> remainingEntryEditors = new ArrayList<EntryEditorExtension>();
+            for ( EntryEditorExtension entryEditorExtension : entryEditorExtensions )
+            {
+                // Verifying the entry editor is present in the sorted list
+                if ( !sortedEntryEditorsList.contains( entryEditorExtension ) )
+                {
+                    // Adding it to the remaining list
+                    remainingEntryEditors.add( entryEditorExtension );
+                }
+            }
+
+            // Sorting the remaining entry editors based on their priority
+            Collections.sort( remainingEntryEditors, entryEditorComparator );
+
+            // Adding the remaining entry editors
+            for ( EntryEditorExtension entryEditorExtension : remainingEntryEditors )
+            {
+                sortedEntryEditorsList.add( entryEditorExtension );
+            }
+
+            // Assigning the sorted editors to the viewer
+            entryEditorsTableViewer.setInput( sortedEntryEditorsList );
+        }
+    }
+
+
+    /**
+     * Sorts the entry editors using the default priority.
+     */
+    private void sortEntryEditorsByDefaultPriority()
+    {
+        // Getting all entry editors
+        Collection<EntryEditorExtension> entryEditorExtensions = BrowserUIPlugin.getDefault().getEntryEditorManager()
+            .getEntryEditorExtensions();
+
+        // Creating the sorted entry editors list
+        sortedEntryEditorsList = new ArrayList<EntryEditorExtension>( entryEditorExtensions.size() );
+
+        // Adding the remaining entry editors
+        for ( EntryEditorExtension entryEditorExtension : entryEditorExtensions )
+        {
+            sortedEntryEditorsList.add( entryEditorExtension );
+        }
+
+        // Sorting the remaining entry editors based on their priority
+        Collections.sort( sortedEntryEditorsList, entryEditorComparator );
+
+        // Assigning the sorted editors to the viewer
+        entryEditorsTableViewer.setInput( sortedEntryEditorsList );
+    }
+
+
+    /**
+     * Moves the currently selected entry editor.
+     *
+     * @param direction
+     *      the direction (up or down)
+     */
+    private void moveSelectedEntryEditor( MoveEntryEditorDirectionEnum direction )
+    {
+        StructuredSelection selection = ( StructuredSelection ) entryEditorsTableViewer.getSelection();
+        if ( selection.size() == 1 )
+        {
+            EntryEditorExtension entryEditor = ( EntryEditorExtension ) selection.getFirstElement();
+            if ( sortedEntryEditorsList.contains( entryEditor ) )
+            {
+                int oldIndex = sortedEntryEditorsList.indexOf( entryEditor );
+                int newIndex = 0;
+
+                // Determining the new index number
+                switch ( direction )
+                {
+                    case UP:
+                        newIndex = oldIndex - 1;
+                        break;
+                    case DOWN:
+                        newIndex = oldIndex + 1;
+                        break;
+                }
+
+                // Checking bounds
+                if ( ( newIndex >= 0 ) && ( newIndex < sortedEntryEditorsList.size() ) )
+                {
+                    // Switching the two entry editors
+                    EntryEditorExtension newIndexEntryEditorBackup = sortedEntryEditorsList.set( newIndex, entryEditor );
+                    sortedEntryEditorsList.set( oldIndex, newIndexEntryEditorBackup );
+
+                    // Reloading the viewer
+                    entryEditorsTableViewer.refresh();
+
+                    // Updating the state of the buttons
+                    updateButtonsState( entryEditor );
+
+                    // Setting the "Use User Priority" to true
+                    useUserPriority = true;
+                }
+            }
+        }
+    }
+
+
+    /**
+     * Updates the state of the buttons.
+     *
+     * @param entryEditor
+     *      the selected entry editor
+     */
+    private void updateButtonsState( EntryEditorExtension entryEditor )
+    {
+        // Getting the index of the entry editor in the list
+        int index = sortedEntryEditorsList.indexOf( entryEditor );
+
+        // Updating up button state
+        if ( index > 0 )
+        {
+            upButton.setEnabled( true );
+        }
+        else
+        {
+            upButton.setEnabled( false );
+        }
+
+        // Updating down button state
+        if ( index <= sortedEntryEditorsList.size() - 2 )
+        {
+            downButton.setEnabled( true );
+        }
+        else
+        {
+            downButton.setEnabled( false );
+        }
+    }
+
+    /**
+     * This enum is used to determine in which direction the entry editor
+     * should be moved.
+     *
+     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+     * @version $Rev$, $Date$
+     */
+    private enum MoveEntryEditorDirectionEnum
+    {
+        UP, DOWN
+    }
+
+
+    /**
      * {@inheritDoc}
      */
     public boolean performOk()
     {
+        ConnectionCorePlugin.getDefault().getPluginPreferences().setValue(
+            BrowserUIConstants.PREFERENCE_ENTRYEDITORS_USE_USER_PRIORITIES, useUserPriority );
+
+        if ( useUserPriority )
+        {
+            StringBuilder sb = new StringBuilder();
+            for ( EntryEditorExtension entryEditor : sortedEntryEditorsList )
+            {
+                sb.append( entryEditor.getId() + PRIORITIES_SEPARATOR );
+            }
+
+            if ( sb.length() > 0 )
+            {
+                sb.deleteCharAt( sb.length() - 1 );
+            }
+
+            ConnectionCorePlugin.getDefault().getPluginPreferences().setValue(
+                BrowserUIConstants.PREFERENCE_ENTRYEDITORS_USER_PRIORITIES, sb.toString() );
+        }
+
         return true;
     }
 
@@ -171,6 +474,18 @@
      */
     protected void performDefaults()
     {
+        useUserPriority = ConnectionCorePlugin.getDefault().getPluginPreferences().getDefaultBoolean(
+            BrowserUIConstants.PREFERENCE_ENTRYEDITORS_USE_USER_PRIORITIES );
+
+        if ( useUserPriority )
+        {
+            sortEntryEditorsByUserPriority();
+        }
+        else
+        {
+            sortEntryEditorsByDefaultPriority();
+        }
+
         super.performDefaults();
     }
 }
\ No newline at end of file