in src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java [567:657]
Set<SDSet> search( Set<String> roles, SDSet sdSet ) throws FinderException
{
Set<SDSet> sdList = new HashSet<>();
LdapConnection ld = null;
String ssdRoot = getSdRoot( sdSet.getContextId() );
String objectClass = SSD_OBJECT_CLASS_NM;
if ( sdSet.getType() == SDSet.SDType.DYNAMIC )
{
objectClass = DSD_OBJECT_CLASS_NM;
}
try
{
if ( CollectionUtils.isNotEmpty( roles ) )
{
StringBuilder filterbuf = new StringBuilder();
filterbuf.append( GlobalIds.FILTER_PREFIX );
filterbuf.append( objectClass );
filterbuf.append( ")(|" );
for ( String rle : roles )
{
filterbuf.append( "(" );
filterbuf.append( ROLES );
filterbuf.append( "=" );
filterbuf.append( rle );
filterbuf.append( ")" );
}
filterbuf.append( "))" );
ld = getAdminConnection();
try ( SearchCursor searchResults = search( ld, ssdRoot,
SearchScope.SUBTREE, filterbuf.toString(), SD_SET_ATRS, false, Config.getInstance().getInt(GlobalIds.CONFIG_LDAP_MAX_BATCH_SIZE, GlobalIds.BATCH_SIZE ) ) )
{
long sequence = 0;
while ( searchResults.next() )
{
sdList.add( unloadLdapEntry( searchResults.getEntry(), sequence++ ) );
}
}
catch ( IOException e )
{
String error = "search type [" + sdSet.getType() + "] caught IOException=" + e.getMessage();
int errCode;
if ( sdSet.getType() == SDSet.SDType.DYNAMIC )
{
errCode = GlobalErrIds.DSD_SEARCH_FAILED;
}
else
{
errCode = GlobalErrIds.SSD_SEARCH_FAILED;
}
throw new FinderException( errCode, error, e );
}
catch ( CursorException e )
{
String error = "search type [" + sdSet.getType() + "] caught CursorException=" + e.getMessage();
int errCode;
if ( sdSet.getType() == SDSet.SDType.DYNAMIC )
{
errCode = GlobalErrIds.DSD_SEARCH_FAILED;
}
else
{
errCode = GlobalErrIds.SSD_SEARCH_FAILED;
}
throw new FinderException( errCode, error, e );
}
}
}
catch ( LdapException e )
{
String error = "search type [" + sdSet.getType() + "] caught LdapException=" + e;
int errCode;
if ( sdSet.getType() == SDSet.SDType.DYNAMIC )
{
errCode = GlobalErrIds.DSD_SEARCH_FAILED;
}
else
{
errCode = GlobalErrIds.SSD_SEARCH_FAILED;
}
throw new FinderException( errCode, error, e );
}
finally
{
closeAdminConnection( ld );
}
return sdList;
}