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 2007/04/04 00:47:14 UTC

svn commit: r525316 - in /directory/ldapstudio/trunk: ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/ ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ ldapstudio...

Author: seelmann
Date: Tue Apr  3 15:47:13 2007
New Revision: 525316

URL: http://svn.apache.org/viewvc?view=rev&rev=525316
Log:
DIRSTUDIO-74: 
- Added handling for empty DN in namingContexts
- Empty DN could be used as base DN
- Restructured browser widget, the RootDSE is now the root of the tree
- Added search support for the empty DN

Modified:
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/BaseDNEntry.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/Connection.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/FetchBaseDNsJob.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/InitializeChildrenJob.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/DN.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/IConnection.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/actions/SelectionUtils.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/properties/RootDSEPropertyPage.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/views/browser/BrowserViewUniversalListener.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserContentProvider.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserLabelProvider.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/connection/ConnectionPageWrapper.java
    directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/search/EntryWidget.java

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/BaseDNEntry.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/BaseDNEntry.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/BaseDNEntry.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/BaseDNEntry.java Tue Apr  3 15:47:13 2007
@@ -53,9 +53,6 @@
         {
             throw new ModelModificationException( BrowserCoreMessages.model__empty_dn );
         }
-        if ( "".equals( baseDn.toString() ) ) { //$NON-NLS-1$
-            throw new ModelModificationException( BrowserCoreMessages.model__empty_dn );
-        }
         if ( connection == null )
         {
             throw new ModelModificationException( BrowserCoreMessages.model__empty_connection );
@@ -76,7 +73,7 @@
 
     public IEntry getParententry()
     {
-        return null;
+        return getConnection().getRootDSE();
     }
 
 

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/Connection.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/Connection.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/Connection.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/Connection.java Tue Apr  3 15:47:13 2007
@@ -26,8 +26,10 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.directory.ldapstudio.browser.core.BookmarkManager;
 import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
@@ -67,10 +69,6 @@
 
     private ConnectionParameter connectionParameter;
 
-    private IEntry[] baseDNEntries;
-
-    private IEntry[] metadataEntries;
-
     private IRootDSE rootDSE;
 
     private Schema schema;
@@ -124,8 +122,6 @@
         this.connectionParameter.setBindPrincipal( bindPrincipal );
         this.connectionParameter.setBindPassword( bindPassword );
 
-        this.baseDNEntries = new IEntry[0];
-        this.metadataEntries = new IEntry[0];
         this.rootDSE = null;
 
         this.schema = Schema.DEFAULT_SCHEMA;
@@ -248,8 +244,6 @@
 
     public void fetchRootDSE( ExtendedProgressMonitor monitor )
     {
-        this.bind( monitor );
-
         if ( this.connectionProvider != null )
         {
             try
@@ -269,36 +263,14 @@
 
     public void open( ExtendedProgressMonitor monitor )
     {
+        this.bind( monitor );
+        
         this.fetchRootDSE( monitor );
 
         if ( this.connectionProvider != null && this.rootDSE != null )
         {
             try
             {
-                monitor.reportProgress( BrowserCoreMessages.model__setting_base_dn );
-                if ( !this.connectionParameter.isFetchBaseDNs() )
-                {
-                    this.baseDNEntries = new BaseDNEntry[1];
-                    this.baseDNEntries[0] = new BaseDNEntry( new DN( this.connectionParameter.getBaseDN() ), this );
-                    this.cacheEntry( this.baseDNEntries[0] );
-                }
-            }
-            catch ( ModelModificationException mme )
-            {
-                monitor.reportError( BrowserCoreMessages.model__error_setting_base_dn, mme );
-            }
-
-            try
-            {
-                this.loadDirectoryMetadataEntries();
-            }
-            catch ( ModelModificationException mme )
-            {
-                monitor.reportError( BrowserCoreMessages.model__error_setting_metadata, mme );
-            }
-
-            try
-            {
                 monitor.reportProgress( BrowserCoreMessages.model__loading_schema );
 
                 // check if schema is cached
@@ -415,15 +387,6 @@
                 this.connectionProvider = null;
             }
 
-            if ( this.baseDNEntries != null )
-            {
-                this.baseDNEntries = new BaseDNEntry[0];
-            }
-            if ( this.metadataEntries != null )
-            {
-                this.metadataEntries = new IEntry[0];
-            }
-
             for ( int i = 0; i < this.getSearchManager().getSearchCount(); i++ )
             {
                 this.getSearchManager().getSearches()[i].setSearchResults( null );
@@ -446,87 +409,96 @@
 
     private void loadRootDSE( ExtendedProgressMonitor monitor ) throws Exception
     {
-        this.rootDSE = new RootDSE( this );
-        this.cacheEntry( this.rootDSE );
-
-        // First get ALL attributes
-        ISearch search = new Search( null, this, new DN(), ISearch.FILTER_TRUE, null, ISearch.SCOPE_OBJECT, 0, 0,
-            IConnection.DEREFERENCE_ALIASES_NEVER, IConnection.HANDLE_REFERRALS_IGNORE, false, false, null );
-        this.search( search, monitor );
+        if(rootDSE == null)
+        {
+            rootDSE = new RootDSE( this );
+            cacheEntry( rootDSE );
+        }
 
-        // Second get well-known root DSE attributes
-        search = new Search( null, this, new DN(), ISearch.FILTER_TRUE, ROOT_DSE_ATTRIBUTES, ISearch.SCOPE_OBJECT, 0,
+        // get well-known root DSE attributes, includes + and *
+        ISearch search = new Search( null, this, new DN(), ISearch.FILTER_TRUE, ROOT_DSE_ATTRIBUTES, ISearch.SCOPE_OBJECT, 0,
             0, IConnection.DEREFERENCE_ALIASES_NEVER, IConnection.HANDLE_REFERRALS_IGNORE, false, false, null );
-        this.search( search, monitor );
+        search( search, monitor );
 
-        // Set base DNs from root DSE
-        if ( this.rootDSE != null )
+        // get base DNs
+        if( !isFetchBaseDNs() && getBaseDN() != null && !"".equals( getBaseDN().toString() ))
         {
-            try
+            // only add the specified base DN
+            IEntry entry = new BaseDNEntry( new DN( getBaseDN() ), this );
+            rootDSE.addChild( entry );
+            cacheEntry( entry );
+        }
+        else
+        {
+            // get naming contexts 
+            Set<String> namingContextSet = new HashSet<String>();
+            IAttribute attribute = rootDSE.getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_NAMINGCONTEXTS );
+            if ( attribute != null )
             {
-                List baseDnEntryList = new ArrayList();
-                String[] baseDnAttributeNames = new String[]
-                    { IRootDSE.ROOTDSE_ATTRIBUTE_NAMINGCONTEXTS };
-                for ( int x = 0; x < baseDnAttributeNames.length; x++ )
+                String[] values = attribute.getStringValues();
+                for ( int i = 0; i < values.length; i++ )
                 {
-                    IAttribute attribute = this.rootDSE.getAttribute( baseDnAttributeNames[x] );
-                    if ( attribute != null )
+                    namingContextSet.add( values[i] );
+                }
+            }
+            for ( String namingContext : namingContextSet )
+            {
+                if ( !"".equals( namingContext ) ) { //$NON-NLS-1$
+                    try
                     {
-                        String[] values = attribute.getStringValues();
-                        for ( int i = 0; i < values.length; i++ )
-                        {
-                            if ( !"".equals( values[i] ) ) { //$NON-NLS-1$
-                                baseDnEntryList.add( values[i] );
-                            }
-                        }
+                        IEntry entry = new BaseDNEntry( new DN( namingContext ), this );
+                        rootDSE.addChild( entry );
+                        cacheEntry( entry );
+                    }
+                    catch ( Exception e )
+                    {
+                        monitor.reportError( BrowserCoreMessages.model__error_setting_base_dn, e );
                     }
                 }
-                this.baseDNEntries = new BaseDNEntry[baseDnEntryList.size()];
-                for ( int i = 0; i < this.baseDNEntries.length; i++ )
+                else
                 {
-                    this.baseDNEntries[i] = new BaseDNEntry( new DN( ( String ) baseDnEntryList.get( i ) ), this );
-                    this.cacheEntry( this.baseDNEntries[i] );
+                    // special handling of empty namingContext: perform a one-level search and add all result DNs to the set
+                    search = new Search( null, this, new DN(), ISearch.FILTER_TRUE, ISearch.NO_ATTRIBUTES, ISearch.SCOPE_ONELEVEL, 0,
+                        0, IConnection.DEREFERENCE_ALIASES_NEVER, IConnection.HANDLE_REFERRALS_IGNORE, false, false, null );
+                    search( search, monitor );
+                    ISearchResult[] results = search.getSearchResults();
+                    for ( int k = 0; results != null && k < results.length; k++ )
+                    {
+                        ISearchResult result = results[k];
+                        IEntry entry = result.getEntry();
+                        rootDSE.addChild( entry );
+                    }
                 }
-
-                // this.loadDirectoryMetadataEntries();
-            }
-            catch ( Exception e )
-            {
-                monitor.reportError( BrowserCoreMessages.model__error_setting_base_dn, e );
             }
         }
-    }
-
-
-    private void loadDirectoryMetadataEntries() throws ModelModificationException
-    {
-
-        List metadataEntryList = new ArrayList();
 
-        // special case for schema entry
+        // get schema entry
         DirectoryMetadataEntry[] schemaEntries = getDirectoryMetadataEntries( IRootDSE.ROOTDSE_ATTRIBUTE_SUBSCHEMASUBENTRY );
         for ( int i = 0; i < schemaEntries.length; i++ )
         {
             schemaEntries[i].setSchemaEntry( true );
+            rootDSE.addChild( ( IEntry ) schemaEntries[i] );
         }
-        metadataEntryList.addAll( Arrays.asList( schemaEntries ) );
-
-        // other metadata entries
+        
+        // get other metadata entries
         String[] metadataAttributeNames = new String[]
             { IRootDSE.ROOTDSE_ATTRIBUTE_MONITORCONTEXT, IRootDSE.ROOTDSE_ATTRIBUTE_CONFIGCONTEXT,
                 IRootDSE.ROOTDSE_ATTRIBUTE_DSANAME };
         for ( int x = 0; x < metadataAttributeNames.length; x++ )
         {
             DirectoryMetadataEntry[] metadataEntries = getDirectoryMetadataEntries( metadataAttributeNames[x] );
-            metadataEntryList.addAll( Arrays.asList( metadataEntries ) );
-        }
-
-        this.metadataEntries = new IEntry[metadataEntryList.size()];
-        for ( int i = 0; i < metadataEntryList.size(); i++ )
-        {
-            this.metadataEntries[i] = ( IEntry ) metadataEntryList.get( i );
-            this.cacheEntry( this.metadataEntries[i] );
+            for ( int i = 0; i < metadataEntries.length; i++ )
+            {
+                rootDSE.addChild( ( IEntry ) metadataEntries[i] );
+            }
         }
+        
+        // set flags
+        rootDSE.setHasMoreChildren( false );
+        rootDSE.setAttributesInitialized( true );
+        rootDSE.setChildrenInitialized( true );
+        rootDSE.setHasChildrenHint( true );
+        rootDSE.setDirectoryEntry( true );
 
     }
 
@@ -556,6 +528,7 @@
         {
             metadataEntries[i] = new DirectoryMetadataEntry( ( DN ) metadataEntryList.get( i ), this );
             metadataEntries[i].setDirectoryEntry( true );
+            cacheEntry( metadataEntries[i] );
         }
         return metadataEntries;
     }
@@ -569,10 +542,6 @@
         try
         {
 
-            // System.out.println(this.rootDSE);
-            // System.out.println(Arrays.asList(this.rootDSE.getAttributes()));
-            // System.out.println(this.rootDSE.getAttribute(IRootDSE.ROOTDSE_ATTRIBUTE_SUBSCHEMASUBENTRY));
-
             if ( this.rootDSE.getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_SUBSCHEMASUBENTRY ) != null )
             {
                 SearchParameter sp = new SearchParameter();
@@ -641,28 +610,6 @@
         {
             return this.rootDSE;
         }
-        if ( this.baseDNEntries != null )
-        {
-            for ( int i = 0; i < this.baseDNEntries.length; i++ )
-            {
-                if ( this.baseDNEntries[i] != null && this.baseDNEntries[i].getDn() != null
-                    && this.baseDNEntries[i].getDn().equals( dn ) )
-                {
-                    return this.baseDNEntries[i];
-                }
-            }
-        }
-        if ( this.metadataEntries != null )
-        {
-            for ( int i = 0; i < this.metadataEntries.length; i++ )
-            {
-                if ( this.metadataEntries[i] != null && this.metadataEntries[i].getDn() != null
-                    && this.metadataEntries[i].getDn().equals( dn ) )
-                {
-                    return this.metadataEntries[i];
-                }
-            }
-        }
         return null;
     }
 
@@ -904,18 +851,6 @@
         this.connectionParameter.setConnectionProviderClassName( connectionProviderClassName );
         EventRegistry.fireConnectionUpdated( new ConnectionUpdateEvent( this,
             ConnectionUpdateEvent.CONNECTION_PARAMETER_UPDATED ), this );
-    }
-
-
-    public final IEntry[] getBaseDNEntries()
-    {
-        return this.baseDNEntries;
-    }
-
-
-    public final IEntry[] getMetadataEntries()
-    {
-        return this.metadataEntries;
     }
 
 

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java Tue Apr  3 15:47:13 2007
@@ -27,6 +27,7 @@
 
 import org.apache.directory.ldapstudio.browser.core.model.DN;
 import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
 import org.apache.directory.ldapstudio.browser.core.model.IRootDSE;
 import org.apache.directory.ldapstudio.browser.core.model.ModelModificationException;
 
@@ -63,31 +64,21 @@
 
     public RootDSE( IConnection connection ) throws ModelModificationException
     {
-        super();
-        this.setDirectoryEntry( true );
-        // this.connectionName = connection.getName();
-        this.connection = connection;
-        this.baseDn = new DN();
+        super( new DN(), connection );
     }
 
-
-    public boolean hasChildren()
-    {
-        return false;
-    }
-
-
-    public boolean isAttributesInitialized()
+    
+    public IEntry getParententry()
     {
-        return true;
+        return null;
     }
-
+    
 
     public String[] getSupportedExtensions()
     {
-        if ( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDEXTENSION ) != null )
+        if ( getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_SUPPORTEDEXTENSION ) != null )
         {
-            return get( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDEXTENSION ).getStringValues() );
+            return get( getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_SUPPORTEDEXTENSION ).getStringValues() );
         }
         else
         {
@@ -98,9 +89,9 @@
 
     public String[] getSupportedControls()
     {
-        if ( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDCONTROL ) != null )
+        if ( getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_SUPPORTEDCONTROL ) != null )
         {
-            return get( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDCONTROL ).getStringValues() );
+            return get( getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_SUPPORTEDCONTROL ).getStringValues() );
         }
         else
         {
@@ -111,9 +102,9 @@
 
     public String[] getSupportedFeatures()
     {
-        if ( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDFEATURES ) != null )
+        if ( getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_SUPPORTEDFEATURES ) != null )
         {
-            return get( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDFEATURES ).getStringValues() );
+            return get( getAttribute( IRootDSE.ROOTDSE_ATTRIBUTE_SUPPORTEDFEATURES ).getStringValues() );
         }
         else
         {

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/FetchBaseDNsJob.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/FetchBaseDNsJob.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/FetchBaseDNsJob.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/FetchBaseDNsJob.java Tue Apr  3 15:47:13 2007
@@ -65,9 +65,10 @@
         monitor.reportProgress( " " ); //$NON-NLS-1$
         monitor.worked( 1 );
 
+        connection.bind( monitor );
         connection.fetchRootDSE( monitor );
 
-        IEntry[] baseDNEntries = connection.getBaseDNEntries();
+        IEntry[] baseDNEntries = connection.getRootDSE().getChildren();
         baseDNs = new String[baseDNEntries.length];
         for ( int i = 0; i < baseDNs.length; i++ )
         {

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/InitializeChildrenJob.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/InitializeChildrenJob.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/InitializeChildrenJob.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/InitializeChildrenJob.java Tue Apr  3 15:47:13 2007
@@ -121,13 +121,6 @@
             new String[]
                 { parent.getDn().toString() } ) );
 
-        // root DSE has no children
-        if ( parent instanceof IRootDSE )
-        {
-            parent.setChildrenInitialized( true );
-            return;
-        }
-
         // clear old children
         IEntry[] oldChildren = parent.getChildren();
         for ( int i = 0; oldChildren != null && i < oldChildren.length; i++ )
@@ -139,111 +132,123 @@
         }
         parent.setChildrenInitialized( false );
 
-        // determine alias and referral handling
-        int scope = ISearch.SCOPE_ONELEVEL;
-        int derefAliasMethod = parent.getConnection().getAliasesDereferencingMethod();
-        int handleReferralsMethod = parent.getConnection().getReferralsHandlingMethod();
-        if ( BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
-            BrowserCoreConstants.PREFERENCE_SHOW_ALIAS_AND_REFERRAL_OBJECTS ) )
+        if ( parent instanceof IRootDSE )
         {
-            scope = ( parent.isAlias() || parent.isReferral() ) ? ISearch.SCOPE_OBJECT : ISearch.SCOPE_ONELEVEL;
-            derefAliasMethod = parent.isAlias() ? IConnection.DEREFERENCE_ALIASES_FINDING
-                : IConnection.DEREFERENCE_ALIASES_NEVER;
-            handleReferralsMethod = parent.isReferral() ? IConnection.HANDLE_REFERRALS_FOLLOW
-                : IConnection.HANDLE_REFERRALS_IGNORE;
+            // special handling for Root DSE 
+            //parent.setChildrenInitialized( true );
+            //return;
+            parent.getConnection().fetchRootDSE( monitor );
+            parent.setChildrenInitialized( true );
+            return;
         }
-
-        // get children,
-        ISearch search = new Search( null, parent.getConnection(), parent.getDn(), parent.getChildrenFilter(),
-            ISearch.NO_ATTRIBUTES, scope, parent.getConnection().getCountLimit(),
-            parent.getConnection().getTimeLimit(), derefAliasMethod, handleReferralsMethod, BrowserCorePlugin
-                .getDefault().getPluginPreferences().getBoolean( BrowserCoreConstants.PREFERENCE_CHECK_FOR_CHILDREN ),
-            BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
-                BrowserCoreConstants.PREFERENCE_SHOW_ALIAS_AND_REFERRAL_OBJECTS ), null );
-        parent.getConnection().search( search, monitor );
-        ISearchResult[] srs = search.getSearchResults();
-        monitor.reportProgress( BrowserCoreMessages.bind( BrowserCoreMessages.jobs__init_entries_progress_subcount,
-            new String[]
-                { srs == null ? Integer.toString( 0 ) : Integer.toString( srs.length ), parent.getDn().toString() } ) );
-
-        // fill children in search result
-        if ( srs != null && srs.length > 0 )
+        else
         {
-
-            /*
-             * clearing old children before filling new subenties is
-             * necessary to handle aliases and referrals.
-             */
-            IEntry[] connChildren = parent.getChildren();
-            for ( int i = 0; connChildren != null && i < connChildren.length; i++ )
+            // determine alias and referral handling
+            int scope = ISearch.SCOPE_ONELEVEL;
+            int derefAliasMethod = parent.getConnection().getAliasesDereferencingMethod();
+            int handleReferralsMethod = parent.getConnection().getReferralsHandlingMethod();
+            if ( BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
+                BrowserCoreConstants.PREFERENCE_SHOW_ALIAS_AND_REFERRAL_OBJECTS ) )
             {
-                if ( connChildren[i] != null )
-                {
-                    parent.deleteChild( connChildren[i] );
-                }
+                scope = ( parent.isAlias() || parent.isReferral() ) ? ISearch.SCOPE_OBJECT : ISearch.SCOPE_ONELEVEL;
+                derefAliasMethod = parent.isAlias() ? IConnection.DEREFERENCE_ALIASES_FINDING
+                    : IConnection.DEREFERENCE_ALIASES_NEVER;
+                handleReferralsMethod = parent.isReferral() ? IConnection.HANDLE_REFERRALS_FOLLOW
+                    : IConnection.HANDLE_REFERRALS_IGNORE;
             }
-            parent.setChildrenInitialized( false );
+    
+            // get children,
+            ISearch search = new Search( null, parent.getConnection(), parent.getDn(), parent.getChildrenFilter(),
+                ISearch.NO_ATTRIBUTES, scope, parent.getConnection().getCountLimit(),
+                parent.getConnection().getTimeLimit(), derefAliasMethod, handleReferralsMethod, BrowserCorePlugin
+                    .getDefault().getPluginPreferences().getBoolean( BrowserCoreConstants.PREFERENCE_CHECK_FOR_CHILDREN ),
+                BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
+                    BrowserCoreConstants.PREFERENCE_SHOW_ALIAS_AND_REFERRAL_OBJECTS ), null );
+            parent.getConnection().search( search, monitor );
+            ISearchResult[] srs = search.getSearchResults();
+            monitor.reportProgress( BrowserCoreMessages.bind( BrowserCoreMessages.jobs__init_entries_progress_subcount,
+                new String[]
+                    { srs == null ? Integer.toString( 0 ) : Integer.toString( srs.length ), parent.getDn().toString() } ) );
 
-            for ( int i = 0; srs != null && i < srs.length; i++ )
+            // fill children in search result
+            if ( srs != null && srs.length > 0 )
             {
-                if ( parent.isReferral() )
-                {
-                    ReferralBaseEntry referralBaseEntry = new ReferralBaseEntry( srs[i].getEntry().getConnection(),
-                        srs[i].getEntry().getDn() );
-                    parent.addChild( referralBaseEntry );
-                    // System.out.println("Ref: " +
-                    // referralBaseEntry.getUrl());
-                }
-                else if ( parent.isAlias() )
+    
+                /*
+                 * clearing old children before filling new subenties is
+                 * necessary to handle aliases and referrals.
+                 */
+                IEntry[] connChildren = parent.getChildren();
+                for ( int i = 0; connChildren != null && i < connChildren.length; i++ )
                 {
-                    AliasBaseEntry aliasBaseEntry = new AliasBaseEntry( srs[i].getEntry().getConnection(), srs[i]
-                        .getEntry().getDn() );
-                    parent.addChild( aliasBaseEntry );
-                    // System.out.println("Ali: " +
-                    // aliasBaseEntry.getUrl());
+                    if ( connChildren[i] != null )
+                    {
+                        parent.deleteChild( connChildren[i] );
+                    }
                 }
-                else
+                parent.setChildrenInitialized( false );
+    
+                for ( int i = 0; srs != null && i < srs.length; i++ )
                 {
-                    parent.addChild( srs[i].getEntry() );
+                    if ( parent.isReferral() )
+                    {
+                        ReferralBaseEntry referralBaseEntry = new ReferralBaseEntry( srs[i].getEntry().getConnection(),
+                            srs[i].getEntry().getDn() );
+                        parent.addChild( referralBaseEntry );
+                        // System.out.println("Ref: " +
+                        // referralBaseEntry.getUrl());
+                    }
+                    else if ( parent.isAlias() )
+                    {
+                        AliasBaseEntry aliasBaseEntry = new AliasBaseEntry( srs[i].getEntry().getConnection(), srs[i]
+                            .getEntry().getDn() );
+                        parent.addChild( aliasBaseEntry );
+                        // System.out.println("Ali: " +
+                        // aliasBaseEntry.getUrl());
+                    }
+                    else
+                    {
+                        parent.addChild( srs[i].getEntry() );
+                    }
                 }
             }
-        }
-        else
-        {
-            parent.setHasChildrenHint( false );
-        }
-
-        // get subentries
-        ISearch subSearch = new Search( null, parent.getConnection(), parent.getDn(), parent.getChildrenFilter(),
-            ISearch.NO_ATTRIBUTES, scope, parent.getConnection().getCountLimit(),
-            parent.getConnection().getTimeLimit(), derefAliasMethod, handleReferralsMethod, BrowserCorePlugin
-                .getDefault().getPluginPreferences().getBoolean( BrowserCoreConstants.PREFERENCE_CHECK_FOR_CHILDREN ),
-            BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
-                BrowserCoreConstants.PREFERENCE_SHOW_ALIAS_AND_REFERRAL_OBJECTS ), new Control[]
-                { Control.SUBENTRIES_CONTROL } );
-        if ( BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
-            BrowserCoreConstants.PREFERENCE_FETCH_SUBENTRIES ) )
-        {
-            parent.getConnection().search( subSearch, monitor );
-            ISearchResult[] subSrs = subSearch.getSearchResults();
-            monitor.reportProgress( BrowserCoreMessages.bind( BrowserCoreMessages.jobs__init_entries_progress_subcount,
-                new String[]
-                    { subSrs == null ? Integer.toString( 0 ) : Integer.toString( subSrs.length ),
-                        parent.getDn().toString() } ) );
-            // fill children in search result
-            if ( subSrs != null && subSrs.length > 0 )
+            else
             {
-
-                for ( int i = 0; subSrs != null && i < subSrs.length; i++ )
+                parent.setHasChildrenHint( false );
+            }
+    
+            // get subentries
+            ISearch subSearch = new Search( null, parent.getConnection(), parent.getDn(), parent.getChildrenFilter(),
+                ISearch.NO_ATTRIBUTES, scope, parent.getConnection().getCountLimit(),
+                parent.getConnection().getTimeLimit(), derefAliasMethod, handleReferralsMethod, BrowserCorePlugin
+                    .getDefault().getPluginPreferences().getBoolean( BrowserCoreConstants.PREFERENCE_CHECK_FOR_CHILDREN ),
+                BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
+                    BrowserCoreConstants.PREFERENCE_SHOW_ALIAS_AND_REFERRAL_OBJECTS ), new Control[]
+                    { Control.SUBENTRIES_CONTROL } );
+            if ( BrowserCorePlugin.getDefault().getPluginPreferences().getBoolean(
+                BrowserCoreConstants.PREFERENCE_FETCH_SUBENTRIES ) )
+            {
+                parent.getConnection().search( subSearch, monitor );
+                ISearchResult[] subSrs = subSearch.getSearchResults();
+                monitor.reportProgress( BrowserCoreMessages.bind( BrowserCoreMessages.jobs__init_entries_progress_subcount,
+                    new String[]
+                        { subSrs == null ? Integer.toString( 0 ) : Integer.toString( subSrs.length ),
+                            parent.getDn().toString() } ) );
+                // fill children in search result
+                if ( subSrs != null && subSrs.length > 0 )
                 {
-                    parent.addChild( subSrs[i].getEntry() );
+    
+                    for ( int i = 0; subSrs != null && i < subSrs.length; i++ )
+                    {
+                        parent.addChild( subSrs[i].getEntry() );
+                    }
                 }
             }
+            
+            // check exceeded limits / canceled
+            parent.setHasMoreChildren( search.isCountLimitExceeded() || subSearch.isCountLimitExceeded()
+                || monitor.isCanceled() );
         }
-
-        // check exceeded limits / canceled
-        parent.setHasMoreChildren( search.isCountLimitExceeded() || subSearch.isCountLimitExceeded()
-            || monitor.isCanceled() );
 
         // set initialized state
         parent.setChildrenInitialized( true );

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/DN.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/DN.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/DN.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/DN.java Tue Apr  3 15:47:13 2007
@@ -192,7 +192,7 @@
      */
     public DN getParentDn()
     {
-        if ( this.rdns.length < 2 )
+        if ( this.rdns.length < 1 )
         {
             return null;
         }

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/IConnection.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/IConnection.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/IConnection.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/model/IConnection.java Tue Apr  3 15:47:13 2007
@@ -152,12 +152,6 @@
     public void setAuthMethod( int authMethod );
 
 
-    public abstract IEntry[] getBaseDNEntries();
-
-
-    public abstract IEntry[] getMetadataEntries();
-
-
     public abstract IRootDSE getRootDSE();
 
 

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/actions/SelectionUtils.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/actions/SelectionUtils.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/actions/SelectionUtils.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/actions/SelectionUtils.java Tue Apr  3 15:47:13 2007
@@ -212,18 +212,26 @@
             {
                 IConnection connection = ( IConnection ) obj;
                 exampleSearch.setConnection( connection );
-                if ( connection.getBaseDNEntries().length > 0 )
+                if ( connection.getRootDSE().getChildrenCount() > 0 )
                 {
-                    exampleSearch.setSearchBase( connection.getBaseDNEntries()[0].getDn() );
+                    exampleSearch.setSearchBase( connection.getRootDSE().getChildren()[0].getDn() );
+                }
+                else
+                {
+                    exampleSearch.setSearchBase( connection.getRootDSE().getDn() );
                 }
             }
             else if ( obj instanceof BrowserCategory )
             {
                 BrowserCategory cat = ( BrowserCategory ) obj;
                 exampleSearch.setConnection( cat.getParent() );
-                if ( cat.getParent().getBaseDNEntries().length > 0 )
+                if ( cat.getParent().getRootDSE().getChildrenCount() > 0 )
+                {
+                    exampleSearch.setSearchBase( cat.getParent().getRootDSE().getChildren()[0].getDn() );
+                }
+                else
                 {
-                    exampleSearch.setSearchBase( cat.getParent().getBaseDNEntries()[0].getDn() );
+                    exampleSearch.setSearchBase( cat.getParent().getRootDSE().getDn() );
                 }
             }
 

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java Tue Apr  3 15:47:13 2007
@@ -144,7 +144,8 @@
         // create main widget
         this.mainWidget = new BrowserWidget( this.configuration, null );
         this.mainWidget.createWidget( composite );
-        this.mainWidget.setInput( this.connection.getBaseDNEntries() );
+        this.mainWidget.setInput( new IEntry[]
+            { this.connection.getRootDSE() } );
 
         // create actions and context menu (and register global actions)
         this.actionGroup = new BrowserActionGroup( this.mainWidget, this.configuration );
@@ -171,6 +172,7 @@
             }
         } );
 
+        this.mainWidget.getViewer().expandToLevel( 2 );
         if ( this.initialEntry != null )
         {
             IEntry entry = this.initialEntry;

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/properties/RootDSEPropertyPage.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/properties/RootDSEPropertyPage.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/properties/RootDSEPropertyPage.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/dialogs/properties/RootDSEPropertyPage.java Tue Apr  3 15:47:13 2007
@@ -25,6 +25,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.directory.ldapstudio.browser.core.internal.model.RootDSE;
 import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
 import org.apache.directory.ldapstudio.browser.core.model.IConnection;
 import org.apache.directory.ldapstudio.browser.core.model.IEntry;
@@ -250,7 +251,7 @@
         controlsViewer.setLabelProvider( new LabelProvider() );
         if ( connection != null && connection.getRootDSE() != null )
         {
-            controlsViewer.setInput( connection.getRootDSE().getSupportedControls() );
+            controlsViewer.setInput( ((RootDSE)connection.getRootDSE()).getSupportedControls() );
         }
         this.controlsTab = new TabItem( this.tabFolder, SWT.NONE );
         this.controlsTab.setText( "Controls" );
@@ -266,7 +267,7 @@
         extensionViewer.setLabelProvider( new LabelProvider() );
         if ( connection != null && connection.getRootDSE() != null )
         {
-            extensionViewer.setInput( connection.getRootDSE().getSupportedExtensions() );
+            extensionViewer.setInput( ((RootDSE)connection.getRootDSE()).getSupportedExtensions() );
         }
         this.extensionsTab = new TabItem( this.tabFolder, SWT.NONE );
         this.extensionsTab.setText( "Extensions" );
@@ -282,7 +283,7 @@
         featureViewer.setLabelProvider( new LabelProvider() );
         if ( connection != null && connection.getRootDSE() != null )
         {
-            featureViewer.setInput( connection.getRootDSE().getSupportedFeatures() );
+            featureViewer.setInput( ((RootDSE)connection.getRootDSE()).getSupportedFeatures() );
         }
         this.featuresTab = new TabItem( this.tabFolder, SWT.NONE );
         this.featuresTab.setText( "Features" );

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/views/browser/BrowserViewUniversalListener.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/views/browser/BrowserViewUniversalListener.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/views/browser/BrowserViewUniversalListener.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/views/browser/BrowserViewUniversalListener.java Tue Apr  3 15:47:13 2007
@@ -40,6 +40,7 @@
 import org.apache.directory.ldapstudio.browser.core.model.IBookmark;
 import org.apache.directory.ldapstudio.browser.core.model.IConnection;
 import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.IRootDSE;
 import org.apache.directory.ldapstudio.browser.core.model.ISearch;
 import org.apache.directory.ldapstudio.browser.core.model.ISearchResult;
 import org.apache.directory.ldapstudio.browser.ui.actions.SelectionUtils;
@@ -48,7 +49,6 @@
 import org.apache.directory.ldapstudio.browser.ui.editors.searchresult.SearchResultEditor;
 import org.apache.directory.ldapstudio.browser.ui.editors.searchresult.SearchResultEditorInput;
 import org.apache.directory.ldapstudio.browser.ui.views.connection.ConnectionView;
-import org.apache.directory.ldapstudio.browser.ui.widgets.browser.BrowserCategory;
 import org.apache.directory.ldapstudio.browser.ui.widgets.browser.BrowserUniversalListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -399,24 +399,18 @@
     {
         if ( connectionUpdateEvent.getDetail() == ConnectionUpdateEvent.CONNECTION_OPENED )
         {
+            // expand viewer
             viewer.refresh( connectionUpdateEvent.getConnection() );
             viewer.expandToLevel( 2 );
+            
+            // expand root DSE to show base entries
+            IRootDSE rootDSE = connectionUpdateEvent.getConnection().getRootDSE();
+            viewer.expandToLevel( rootDSE, 1 );
 
+            // expand base entries, if requested
             if ( view.getConfiguration().getPreferences().isExpandBaseEntries() )
             {
-                Object[] expandedElements = viewer.getExpandedElements();
-                for ( int i = 0; i < expandedElements.length; i++ )
-                {
-                    Object object = expandedElements[i];
-                    if ( object instanceof BrowserCategory )
-                    {
-                        BrowserCategory bc = ( BrowserCategory ) object;
-                        if ( bc.getType() == BrowserCategory.TYPE_DIT )
-                        {
-                            viewer.expandToLevel( bc, 3 );
-                        }
-                    }
-                }
+                viewer.expandToLevel( rootDSE, 2 );
             }
         }
         else if ( connectionUpdateEvent.getDetail() == ConnectionUpdateEvent.CONNECTION_CLOSED )

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserContentProvider.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserContentProvider.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserContentProvider.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserContentProvider.java Tue Apr  3 15:47:13 2007
@@ -31,13 +31,13 @@
 import org.apache.directory.ldapstudio.browser.core.BrowserCoreConstants;
 import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
 import org.apache.directory.ldapstudio.browser.core.internal.model.DirectoryMetadataEntry;
-import org.apache.directory.ldapstudio.browser.core.internal.model.RootDSE;
 import org.apache.directory.ldapstudio.browser.core.jobs.InitializeChildrenJob;
 import org.apache.directory.ldapstudio.browser.core.jobs.OpenConnectionsJob;
 import org.apache.directory.ldapstudio.browser.core.jobs.SearchJob;
 import org.apache.directory.ldapstudio.browser.core.model.IBookmark;
 import org.apache.directory.ldapstudio.browser.core.model.IConnection;
 import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.IRootDSE;
 import org.apache.directory.ldapstudio.browser.core.model.ISearch;
 import org.apache.directory.ldapstudio.browser.core.model.ISearchResult;
 import org.eclipse.jface.viewers.ITreeContentProvider;
@@ -268,9 +268,37 @@
                 return objects;
             }
         }
-        else if ( parent instanceof IEntry )
+        else if ( parent instanceof IRootDSE )
         {
-            final IEntry parentEntry = ( IEntry ) parent;
+            final IRootDSE rootDSE = ( IRootDSE ) parent;
+
+            if ( !rootDSE.isChildrenInitialized() && rootDSE.isDirectoryEntry() )
+            {
+                new InitializeChildrenJob( new IEntry[]
+                    { rootDSE } ).execute();
+                return new String[]
+                    { "Fetching Entries..." };
+            }
+
+            // get base entries
+            List<IEntry> entryList = new ArrayList<IEntry>();
+            entryList.addAll( Arrays.asList( rootDSE.getChildren() ) );
+
+            // remove non-visible entries
+            for ( Iterator<IEntry> it = entryList.iterator(); it.hasNext(); )
+            {
+                Object o = it.next();
+                if ( !preferences.isShowDirectoryMetaEntries() && ( o instanceof DirectoryMetadataEntry ) )
+                {
+                    it.remove();
+                }
+            }
+
+            return entryList.toArray();
+        }
+        else if ( parent instanceof IEntry )
+            {
+                final IEntry parentEntry = ( IEntry ) parent;
 
             if ( !parentEntry.isChildrenInitialized() && parentEntry.isDirectoryEntry() )
             {
@@ -392,30 +420,11 @@
                     {
                         new OpenConnectionsJob( connection ).execute();
                         return new String[]
-                            { "Fetching Entries..." };
-                    }
-
-                    // get base entries
-                    List<IEntry> entryList = new ArrayList<IEntry>();
-                    if ( connection.isOpened() )
-                    {
-                        entryList.addAll( Arrays.asList( connection.getBaseDNEntries() ) );
-                        entryList.add( connection.getRootDSE() );
-                        entryList.addAll( Arrays.asList( connection.getMetadataEntries() ) );
-                    }
-
-                    // remove non-visible entries
-                    for ( Iterator<IEntry> it = entryList.iterator(); it.hasNext(); )
-                    {
-                        Object o = it.next();
-                        if ( !preferences.isShowDirectoryMetaEntries()
-                            && ( o instanceof DirectoryMetadataEntry || o instanceof RootDSE ) )
-                        {
-                            it.remove();
-                        }
+                            { "Opening Connection..." };
                     }
 
-                    return entryList.toArray();
+                    return new Object[]
+                        { connection.getRootDSE() };
                 }
 
                 case BrowserCategory.TYPE_SEARCHES:

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserLabelProvider.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserLabelProvider.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserLabelProvider.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/browser/BrowserLabelProvider.java Tue Apr  3 15:47:13 2007
@@ -22,6 +22,7 @@
 
 
 import org.apache.directory.ldapstudio.browser.core.internal.model.AliasBaseEntry;
+import org.apache.directory.ldapstudio.browser.core.internal.model.BaseDNEntry;
 import org.apache.directory.ldapstudio.browser.core.internal.model.DirectoryMetadataEntry;
 import org.apache.directory.ldapstudio.browser.core.internal.model.ReferralBaseEntry;
 import org.apache.directory.ldapstudio.browser.core.model.IBookmark;
@@ -108,6 +109,10 @@
             {
                 return entry.getDn().toString() + " " + append.toString();
             }
+            else if ( entry instanceof BaseDNEntry )
+            {
+                return entry.getDn().toString() + " " + append.toString();
+            }
             else if ( entry.hasParententry() )
             {
 
@@ -179,10 +184,14 @@
             {
                 return sr.getEntry().getUrl().toString();
             }
-            else if ( sr.getEntry().hasParententry() )
+            else if ( sr.getEntry().hasParententry() || sr.getEntry() instanceof IRootDSE )
             {
                 String label = "";
-                if ( preferences.getSearchResultLabel() == BrowserUIConstants.SHOW_DN )
+                if ( sr.getEntry() instanceof IRootDSE )
+                {
+                    label = "Root DSE";
+                }
+                else if ( preferences.getSearchResultLabel() == BrowserUIConstants.SHOW_DN )
                 {
                     label = sr.getEntry().getDn().toString();
                 }

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/connection/ConnectionPageWrapper.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/connection/ConnectionPageWrapper.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/connection/ConnectionPageWrapper.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/connection/ConnectionPageWrapper.java Tue Apr  3 15:47:13 2007
@@ -812,20 +812,13 @@
 
         if ( baseDNCombo != null && baseDNCombo.isVisible() )
         {
-            if ( !autoFetchBaseDnsButton.getSelection() && "".equals( baseDNCombo.getText() ) )
+            try
             {
-                message = "Please enter a base DN. You can use the 'Fetch base DN' button to fetch valid base DNs from directory.";
+                new DN( baseDNCombo.getText() );
             }
-            else
+            catch ( NameException e )
             {
-                try
-                {
-                    new DN( baseDNCombo.getText() );
-                }
-                catch ( NameException e )
-                {
-                    message = "Please enter a valid base DN.";
-                }
+                message = "Please enter a valid base DN.";
             }
         }
         if ( simpleAuthBindPasswordText != null && simpleAuthSelected && simpleAuthBindPasswordText.isVisible() )

Modified: directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/search/EntryWidget.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/search/EntryWidget.java?view=diff&rev=525316&r1=525315&r2=525316
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/search/EntryWidget.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-ui/src/main/java/org/apache/directory/ldapstudio/browser/ui/widgets/search/EntryWidget.java Tue Apr  3 15:47:13 2007
@@ -122,18 +122,11 @@
         {
             public void modifyText( ModifyEvent e )
             {
-                if ( dnCombo.getText().length() > 0 )
+                try
                 {
-                    try
-                    {
-                        dn = new DN( dnCombo.getText() );
-                    }
-                    catch ( NameException e1 )
-                    {
-                        dn = null;
-                    }
+                    dn = new DN( dnCombo.getText() );
                 }
-                else
+                catch ( NameException e1 )
                 {
                     dn = null;
                 }
@@ -181,10 +174,9 @@
                             entry = job.getReadEntry();
                         }
                     }
-                    if ( entry == null && connection.getBaseDNEntries() != null
-                        && connection.getBaseDNEntries().length > 0 )
+                    else
                     {
-                        entry = connection.getBaseDNEntries()[0];
+                        entry = connection.getRootDSE();
                     }
 
                     if ( entry != null )