You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2008/08/27 17:04:23 UTC

svn commit: r689496 - in /directory/studio/trunk: connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/

Author: seelmann
Date: Wed Aug 27 08:04:22 2008
New Revision: 689496

URL: http://svn.apache.org/viewvc?rev=689496&view=rev
Log:
Fix for DIRSTUDIO-107 (Enable Select/Copy in Property page of RootDSE in order to copy and paste detected OIDs)

Modified:
    directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java

Modified: directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java?rev=689496&r1=689495&r2=689496&view=diff
==============================================================================
--- directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java (original)
+++ directory/studio/trunk/connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java Wed Aug 27 08:04:22 2008
@@ -245,6 +245,31 @@
      * The created text control behaves like a label: it has no border, 
      * a grayed background and is not modifyable. 
      * But the text is selectable and could be copied.
+     *
+     * @param parent the parent
+     * @param text the initial text
+     * @param span the horizontal span
+     * @return the created text
+     */
+    public static Text createLabeledText( Composite parent, String text, int span, int widthHint )
+    {
+        Text t = new Text( parent, SWT.NONE );
+        GridData gd = new GridData( SWT.FILL, SWT.NONE, true, false );
+        gd.horizontalSpan = span;
+        gd.widthHint = widthHint;
+        t.setLayoutData( gd );
+        t.setEditable( false );
+        t.setBackground( parent.getBackground() );
+        t.setText( text );
+        return t;
+    }
+
+
+    /**
+     * Creates a SWT {@link Text} under the given parent.
+     * The created text control behaves like a label: it has no border, 
+     * a grayed background and is not modifyable. 
+     * But the text is selectable and could be copied.
      * The label is created with the SWT.WRAP style to enable line wrapping.
      *
      * @param parent the parent

Modified: directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java?rev=689496&r1=689495&r2=689496&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java (original)
+++ directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java Wed Aug 27 08:04:22 2008
@@ -21,114 +21,111 @@
 package org.apache.directory.studio.ldapbrowser.ui.dialogs.properties;
 
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
+import org.apache.commons.lang.StringUtils;
 import org.apache.directory.studio.connection.core.Connection;
-import org.apache.directory.studio.ldapbrowser.common.actions.CopyAction;
-import org.apache.directory.studio.ldapbrowser.common.actions.proxy.EntryEditorActionProxy;
-import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils;
-import org.apache.directory.studio.ldapbrowser.common.widgets.entryeditor.EntryEditorWidgetTableMetadata;
+import org.apache.directory.studio.connection.ui.widgets.BaseWidgetUtils;
+import org.apache.directory.studio.ldapbrowser.core.BrowserCoreConstants;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin;
 import org.apache.directory.studio.ldapbrowser.core.model.IAttribute;
 import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
-import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
 import org.apache.directory.studio.ldapbrowser.core.model.IRootDSE;
-import org.apache.directory.studio.ldapbrowser.core.model.IValue;
-import org.apache.directory.studio.ldapbrowser.core.model.impl.RootDSE;
 import org.apache.directory.studio.ldapbrowser.core.utils.Utils;
-import org.apache.directory.studio.utils.ActionUtils;
 import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.layout.RowData;
 import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.TabFolder;
 import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IWorkbenchPropertyPage;
 import org.eclipse.ui.dialogs.PropertyPage;
 
 
+/**
+ * This page shows some info of the Root DSE.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
 public class RootDSEPropertyPage extends PropertyPage implements IWorkbenchPropertyPage
 {
 
+    /** The tab folder. */
     private TabFolder tabFolder;
 
-    private TabItem commonsTab;
+    /** The info tab. */
+    private TabItem infoTab;
 
+    /** The controls tab. */
     private TabItem controlsTab;
 
+    /** The extensions tab. */
     private TabItem extensionsTab;
 
+    /** The features tab. */
     private TabItem featuresTab;
 
-    private TabItem rawTab;
 
+    /**
+     * Creates a new instance of RootDSEPropertyPage.
+     */
     public RootDSEPropertyPage()
     {
         super();
         super.noDefaultAndApplyButton();
     }
 
-    
+
+    /**
+     * Gets the browser connection, or null if the given element
+     * isn't adaptable to a browser connection.
+     * 
+     * @param element the element
+     * 
+     * @return the browser connection
+     */
     static IBrowserConnection getConnection( Object element )
     {
         IBrowserConnection browserConnection = null;
         if ( element instanceof IAdaptable )
         {
             browserConnection = ( IBrowserConnection ) ( ( IAdaptable ) element ).getAdapter( IBrowserConnection.class );
-            if(browserConnection == null)
+            if ( browserConnection == null )
             {
                 Connection connection = ( Connection ) ( ( IAdaptable ) element ).getAdapter( Connection.class );
-                browserConnection = BrowserCorePlugin.getDefault().getConnectionManager().getBrowserConnection( connection );
+                browserConnection = BrowserCorePlugin.getDefault().getConnectionManager().getBrowserConnection(
+                    connection );
             }
         }
         return browserConnection;
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
     protected Control createContents( Composite parent )
     {
-
         final IBrowserConnection connection = getConnection( getElement() );
 
-        this.tabFolder = new TabFolder( parent, SWT.TOP );
+        tabFolder = new TabFolder( parent, SWT.TOP );
         RowLayout mainLayout = new RowLayout();
         mainLayout.fill = true;
         mainLayout.marginWidth = 0;
         mainLayout.marginHeight = 0;
-        this.tabFolder.setLayout( mainLayout );
+        tabFolder.setLayout( mainLayout );
 
-        Composite composite = new Composite( this.tabFolder, SWT.NONE );
+        // Info tab
+        Composite infoComposite = new Composite( tabFolder, SWT.NONE );
         GridLayout gl = new GridLayout( 2, false );
-        composite.setLayout( gl );
-        BaseWidgetUtils.createLabel( composite, "Directory Type:", 1 );
-        Text typeText = BaseWidgetUtils.createLabeledText( composite, "-", 1 );
+        infoComposite.setLayout( gl );
+        BaseWidgetUtils.createLabel( infoComposite, "Directory Type:", 1 );
+        Text typeText = BaseWidgetUtils.createLabeledText( infoComposite, "-", 1, 10 );
         if ( connection != null && connection.getRootDSE() != null )
         {
             // Try to detect LDAP server from RootDSE
-            //   
             IRootDSE rootDSE = connection.getRootDSE();
             String type = detectOpenLDAP( rootDSE );
             if ( type == null )
@@ -149,117 +146,52 @@
                 typeText.setText( type );
             }
         }
-        addInfo( connection, composite, "vendorName", "Vendor Name:" );
-        addInfo( connection, composite, "vendorVersion", "Vendor Version:" );
-        addInfo( connection, composite, "supportedLDAPVersion", "Supported LDAP Versions:" );
-        addInfo( connection, composite, "supportedSASLMechanisms", "Supported SASL Mechanisms:" );
-
-        this.commonsTab = new TabItem( this.tabFolder, SWT.NONE );
-        this.commonsTab.setText( "Info" );
-        this.commonsTab.setControl( composite );
-
-        // naming contexts
-        // alt servers
-        // schema DN
-        // ldap version
-
-        Composite controlsComposite = new Composite( this.tabFolder, SWT.NONE );
-        controlsComposite.setLayoutData( new RowData( 10, 10 ) );
-        GridLayout controlsLayout = new GridLayout();
-        controlsComposite.setLayout( controlsLayout );
-        ListViewer controlsViewer = new ListViewer( controlsComposite );
-        controlsViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) );
-        controlsViewer.setContentProvider( new ArrayContentProvider() );
-        controlsViewer.setLabelProvider( new LabelProvider() );
-        if ( connection != null && connection.getRootDSE() != null )
-        {
-            String[] supportedControls = ( ( RootDSE ) connection.getRootDSE() ).getSupportedControls();
-            addDescritionsToOIDs( supportedControls );
-            controlsViewer.setInput( supportedControls );
-        }
-        this.controlsTab = new TabItem( this.tabFolder, SWT.NONE );
-        this.controlsTab.setText( "Controls" );
-        this.controlsTab.setControl( controlsComposite );
-        
-        Composite extensionComposite = new Composite( this.tabFolder, SWT.NONE );
-        extensionComposite.setLayoutData( new RowData( 10, 10 ) );
-        GridLayout extensionLayout = new GridLayout();
-        extensionComposite.setLayout( extensionLayout );
-        ListViewer extensionViewer = new ListViewer( extensionComposite );
-        extensionViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) );
-        extensionViewer.setContentProvider( new ArrayContentProvider() );
-        extensionViewer.setLabelProvider( new LabelProvider() );
-        if ( connection != null && connection.getRootDSE() != null )
-        {
-            String[] supportedExtensions = ( ( RootDSE ) connection.getRootDSE() ).getSupportedExtensions();
-            addDescritionsToOIDs( supportedExtensions );
-            extensionViewer.setInput( supportedExtensions );
-        }
-        this.extensionsTab = new TabItem( this.tabFolder, SWT.NONE );
-        this.extensionsTab.setText( "Extensions" );
-        this.extensionsTab.setControl( extensionComposite );
-
-        Composite featureComposite = new Composite( this.tabFolder, SWT.NONE );
-        featureComposite.setLayoutData( new RowData( 10, 10 ) );
-        GridLayout featureLayout = new GridLayout();
-        featureComposite.setLayout( featureLayout );
-        ListViewer featureViewer = new ListViewer( featureComposite );
-        featureViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) );
-        featureViewer.setContentProvider( new ArrayContentProvider() );
-        featureViewer.setLabelProvider( new LabelProvider() );
-        if ( connection != null && connection.getRootDSE() != null )
-        {
-            String[] supportedFeatures = ( ( RootDSE ) connection.getRootDSE() ).getSupportedFeatures();
-            addDescritionsToOIDs( supportedFeatures );
-            featureViewer.setInput( supportedFeatures );
-        }
-        this.featuresTab = new TabItem( this.tabFolder, SWT.NONE );
-        this.featuresTab.setText( "Features" );
-        this.featuresTab.setControl( featureComposite );
-
-        Composite rawComposite = new Composite( this.tabFolder, SWT.NONE );
-        rawComposite.setLayoutData( new RowData( 10, 10 ) );
-        GridLayout rawLayout = new GridLayout();
-        rawComposite.setLayout( rawLayout );
-        Table table = new Table( rawComposite, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL
-            | SWT.FULL_SELECTION | SWT.HIDE_SELECTION );
-        GridData gridData = new GridData( GridData.FILL_BOTH );
-        table.setLayoutData( gridData );
-        table.setHeaderVisible( true );
-        table.setLinesVisible( true );
-        TableViewer viewer = new TableViewer( table );
-        for ( int i = 0; i < EntryEditorWidgetTableMetadata.COLUM_NAMES.length; i++ )
-        {
-            TableColumn column = new TableColumn( table, SWT.LEFT, i );
-            column.setText( EntryEditorWidgetTableMetadata.COLUM_NAMES[i] );
-            column.setWidth( 150 );
-            column.setResizable( true );
-        }
-        viewer.setColumnProperties( EntryEditorWidgetTableMetadata.COLUM_NAMES );
-        viewer.setSorter( new InnerViewerSorter() );
-        viewer.setContentProvider( new InnerContentProvider() );
-        viewer.setLabelProvider( new InnerLabelProvider() );
-        if ( connection != null )
-        {
-            IEntry entry = connection.getRootDSE();
-            viewer.setInput( entry );
-        }
-        this.rawTab = new TabItem( this.tabFolder, SWT.NONE );
-        this.rawTab.setText( "Raw" );
-        this.rawTab.setControl( rawComposite );
+        addInfo( connection, infoComposite, "vendorName", "Vendor Name:" );
+        addInfo( connection, infoComposite, "vendorVersion", "Vendor Version:" );
+        addInfo( connection, infoComposite, "supportedLDAPVersion", "Supported LDAP Versions:" );
+        addInfo( connection, infoComposite, "supportedSASLMechanisms", "Supported SASL Mechanisms:" );
+        infoTab = new TabItem( tabFolder, SWT.NONE );
+        infoTab.setText( "Info" );
+        infoTab.setControl( infoComposite );
+
+        // Controls tab 
+        Composite controlsComposite = new Composite( tabFolder, SWT.NONE );
+        controlsComposite.setLayout( new GridLayout() );
+        Composite controlsComposite2 = BaseWidgetUtils.createColumnContainer( controlsComposite, 2, 1 );
+        addOidInfo( connection, controlsComposite2, "supportedControl" );
+        controlsTab = new TabItem( tabFolder, SWT.NONE );
+        controlsTab.setText( "Controls" );
+        controlsTab.setControl( controlsComposite );
+
+        // Extensions tab
+        Composite extensionComposite = new Composite( tabFolder, SWT.NONE );
+        extensionComposite.setLayout( new GridLayout() );
+        Composite extensionComposite2 = BaseWidgetUtils.createColumnContainer( extensionComposite, 2, 1 );
+        addOidInfo( connection, extensionComposite2, "supportedExtension" );
+        extensionsTab = new TabItem( tabFolder, SWT.NONE );
+        extensionsTab.setText( "Extensions" );
+        extensionsTab.setControl( extensionComposite );
+
+        // Features tab
+        Composite featureComposite = new Composite( tabFolder, SWT.NONE );
+        featureComposite.setLayout( new GridLayout() );
+        Composite featureComposite2 = BaseWidgetUtils.createColumnContainer( featureComposite, 2, 1 );
+        addOidInfo( connection, featureComposite2, "supportedFeatures" );
+        featuresTab = new TabItem( tabFolder, SWT.NONE );
+        featuresTab.setText( "Features" );
+        featuresTab.setControl( featureComposite );
 
-        // setControl(composite);
-        return this.tabFolder;
+        return tabFolder;
     }
 
 
-    /** Check various LDAP servers via vendorName attribute.
+    /** 
+     * Check various LDAP servers via vendorName attribute.
      * 
      * @param rootDSE
      */
     private String detectByVendorName( IRootDSE rootDSE )
     {
-
         String result = null;
 
         IAttribute vnAttribute = rootDSE.getAttribute( "vendorName" );
@@ -307,7 +239,6 @@
      */
     private String detectActiveDirectory( IRootDSE rootDSE )
     {
-
         String result = null;
 
         // check active directory
@@ -337,7 +268,6 @@
      */
     private String detectSiemensDirX( IRootDSE rootDSE )
     {
-
         String result = null;
 
         IAttribute ssseAttribute = rootDSE.getAttribute( "subSchemaSubentry" );
@@ -364,7 +294,6 @@
      */
     private String detectOpenLDAP( IRootDSE rootDSE )
     {
-
         String result = null;
         boolean typeDetected = false;
 
@@ -444,113 +373,69 @@
 
 
     /**
-     * Add descriptions to OIDs, if known. uses the form "OID (description)". The array content is modified by this method.  
+     * Adds text fields to the composite. The text fields contain
+     * the OID values of the given attribute and the OID description.
      * 
-     * @param oids 
+     * @param browserConnection the browser connection
+     * @param composite the composite
+     * @param attributeType the attribute type
      */
-    private void addDescritionsToOIDs( String[] oids )
-    {
-        for ( int i = 0; i < oids.length; ++i )
-        {
-            String description = Utils.getOidDescription( oids[i] );
-            if ( description != null )
-            {
-                oids[i] = oids[i] + " (" + description + ")";
-            }
-        }
-    }
-
-
-    private void addInfo( final IBrowserConnection connection, Composite composite, String attributeName, String labelName )
+    private void addOidInfo( final IBrowserConnection browserConnection, Composite composite, String attributeType )
     {
-        Label label = new Label( composite, SWT.NONE );
-        label.setText( labelName );
-        Text text = new Text( composite, SWT.NONE );
-        text.setEditable( false );
-        text.setBackground( composite.getBackground() );
         try
         {
-            String[] versions = connection.getRootDSE().getAttribute( attributeName ).getStringValues();
-            String version = Arrays.asList( versions ).toString();
-            text.setText( version.substring( 1, version.length() - 1 ) );
-        }
-        catch ( Exception e )
-        {
-            text.setText( "-" );
-        }
-    }
-
-    class InnerContentProvider implements IStructuredContentProvider
-    {
-        public Object[] getElements( Object inputElement )
-        {
-            if ( inputElement instanceof IEntry )
+            String[] values = browserConnection.getRootDSE().getAttribute( attributeType ).getStringValues();
+            for ( String value : values )
             {
-                IEntry entry = ( IEntry ) inputElement;
-                if ( !entry.isAttributesInitialized() && entry.isDirectoryEntry() )
-                {
-                    return new Object[]
-                        {};
-                }
-                else
+                String description = Utils.getOidDescription( value );
+                if ( description == null )
                 {
-                    IAttribute[] attributes = entry.getAttributes();
-                    List valueList = new ArrayList();
-                    for ( int i = 0; attributes != null && i < attributes.length; i++ )
-                    {
-                        IValue[] values = attributes[i].getValues();
-                        for ( int j = 0; j < values.length; j++ )
-                        {
-                            valueList.add( values[j] );
-                        }
-                    }
-                    return valueList.toArray();
+                    description = StringUtils.EMPTY;
                 }
+                BaseWidgetUtils.createLabeledText( composite, value, 1, 10 );
+                BaseWidgetUtils.createLabeledText( composite, description, 1, 10 );
             }
-            return new Object[0];
-        }
-
-
-        public void dispose()
-        {
         }
-
-
-        public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
+        catch ( Exception e )
         {
         }
     }
 
-    class InnerLabelProvider extends LabelProvider implements ITableLabelProvider
+
+    /**
+     * Adds an text field to the composite. It contains the given label and
+     * the values of the given attribute.
+     * 
+     * @param browserConnection the browser connection
+     * @param composite the composite
+     * @param attributeType the attribute type
+     * @param labelName the label name
+     */
+    private void addInfo( final IBrowserConnection browserConnection, Composite composite, String attributeType,
+        String labelName )
     {
-        public String getColumnText( Object obj, int index )
+        StringBuffer sb = new StringBuffer();
+        try
         {
-            if ( obj != null && obj instanceof IValue )
+            String[] values = browserConnection.getRootDSE().getAttribute( attributeType ).getStringValues();
+            boolean isFirst = true;
+            for ( String value : values )
             {
-                IValue attributeValue = ( IValue ) obj;
-                switch ( index )
+                if ( !isFirst )
                 {
-                    case EntryEditorWidgetTableMetadata.KEY_COLUMN_INDEX:
-                        return attributeValue.getAttribute().getDescription();
-                    case EntryEditorWidgetTableMetadata.VALUE_COLUMN_INDEX:
-                        return attributeValue.getStringValue();
-                    default:
-                        return "";
+                    sb.append( BrowserCoreConstants.LINE_SEPARATOR );
                 }
+                sb.append( value );
+                isFirst = false;
             }
-            return "";
         }
-
-
-        public Image getColumnImage( Object obj, int index )
+        catch ( Exception e )
         {
-            return super.getImage( obj );
+            sb.append( "-" );
         }
-    }
-
-    class InnerViewerSorter extends ViewerSorter
-    {
 
+        BaseWidgetUtils.createLabel( composite, labelName, 1 );
+        BaseWidgetUtils.createWrappedLabeledText( composite, sb.toString(), 1 );
     }
 
 }