Set search()

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;
    }