public SearchResult next() throws NamingException
{
try
{
LdapUrl url = new LdapUrl( urls.remove( 0 ) );
SearchResult searchResult = new SearchResult( url.getDn().getName(), null,
new BasicAttributes(),
false );
searchResult.setNameInNamespace( url.getDn().getName() );
StudioSearchResult ssr = new StudioSearchResult( searchResult, null, false, url );
return ssr;
}
catch ( LdapURLEncodingException e )
{
throw new NamingException( e.getMessage() );
}
}
public boolean hasMore() throws NamingException
{
return !urls.isEmpty();
}
public void close() throws NamingException
{
urls.clear();
referralsInfo = null;
}
};
}
else if ( referralsHandlingMethod == ReferralHandlingMethod.FOLLOW )
{
Referral referral = referralsInfo.getNextReferral();
for ( IJndiLogger logger : ConnectionCorePlugin.getDefault().getJndiLoggers() )
{
logger.logSearchResultReference( connection, referral, referralsInfo, requestNum, null );
}
List<String> urls = new ArrayList<String>( referral.getLdapUrls() );
LdapUrl url = new LdapUrl( urls.get( 0 ) );
Connection referralConnection = ConnectionWrapperUtils.getReferralConnection( referral, monitor, this );
if ( referralConnection != null )
{
done = false;
String referralSearchBase = url.getDn() != null && !url.getDn().isEmpty() ? url.getDn().getName()
: searchBase;
String referralFilter = url.getFilter() != null && url.getFilter().length() == 0 ? url.getFilter()
: filter;
SearchControls referralSearchControls = new SearchControls();
referralSearchControls.setSearchScope( url.getScope().getScope() > -1 ? url.getScope().getScope()
: searchControls
.getSearchScope() );
referralSearchControls.setReturningAttributes( url.getAttributes() != null
&& url.getAttributes().size() > 0 ? url.getAttributes().toArray(
new String[url.getAttributes().size()] ) : searchControls.getReturningAttributes() );
referralSearchControls.setCountLimit( searchControls.getCountLimit() );
referralSearchControls.setTimeLimit( searchControls.getTimeLimit() );
referralSearchControls.setDerefLinkFlag( searchControls.getDerefLinkFlag() );
referralSearchControls.setReturningObjFlag( searchControls.getReturningObjFlag() );