// 1st: add base DNs, either the specified or from the namingContexts attribute
if ( !browserConnection.isFetchBaseDNs() && browserConnection.getBaseDN() != null
&& !"".equals( browserConnection.getBaseDN().toString() ) )
{
// only add the specified base DN
LdapDN dn = browserConnection.getBaseDN();
IEntry entry = browserConnection.getEntryFromCache( dn );
if ( entry == null )
{
entry = new BaseDNEntry( ( LdapDN ) dn.clone(), browserConnection );
browserConnection.cacheEntry( entry );
}
rootDseEntries.put( dn, entry );
}
else
{
// get base DNs from namingContexts attribute
Set<String> namingContextSet = new HashSet<String>();
IAttribute attribute = browserConnection.getRootDSE().getAttribute( SchemaConstants.NAMING_CONTEXTS_AT );
if ( attribute != null )
{
String[] values = attribute.getStringValues();
for ( int i = 0; i < values.length; i++ )
{
namingContextSet.add( values[i] );
}
}
if ( !namingContextSet.isEmpty() )
{
for ( String namingContext : namingContextSet )
{
if ( namingContext.length() > 0 && namingContext.charAt( namingContext.length() - 1 ) == '\u0000' )
{
namingContext = namingContext.substring( 0, namingContext.length() - 1 );
}
if ( !"".equals( namingContext ) ) //$NON-NLS-1$
{
try
{
LdapDN dn = new LdapDN( namingContext );
IEntry entry = browserConnection.getEntryFromCache( dn );
if ( entry == null )
{
entry = new BaseDNEntry( dn, browserConnection );
browserConnection.cacheEntry( entry );