List search()

in src/main/java/org/apache/directory/fortress/core/impl/SdDAO.java [446:558]


    List<SDSet> search( Role role, SDSet.SDType type ) throws FinderException
    {
        List<SDSet> sdList = new ArrayList<>();
        LdapConnection ld = null;
        String ssdRoot = getSdRoot( role.getContextId() );
        String objectClass = SSD_OBJECT_CLASS_NM;
        if ( type == SDSet.SDType.DYNAMIC )
        {
            objectClass = DSD_OBJECT_CLASS_NM;
        }
        try
        {
            String roleVal = encodeSafeText( role.getName(), GlobalIds.ROLE_LEN );
            StringBuilder filterbuf = new StringBuilder();
            filterbuf.append( GlobalIds.FILTER_PREFIX );
            filterbuf.append( objectClass );
            filterbuf.append( ")(" );

            // Include any parents target role may have:
            Set<String> roles = RoleUtil.getInstance().getAscendants( role.getName(), role.getContextId() );

            if ( CollectionUtils.isNotEmpty( roles ) )
            {
                filterbuf.append( "|(" );
                filterbuf.append( ROLES );
                filterbuf.append( "=" );
                filterbuf.append( roleVal );
                filterbuf.append( ")" );

                for ( String uRole : roles )
                {
                    filterbuf.append( "(" );
                    filterbuf.append( ROLES );
                    filterbuf.append( "=" );
                    filterbuf.append( uRole );
                    filterbuf.append( ")" );
                }
                filterbuf.append( ")" );

            }
            else
            {
                filterbuf.append( ROLES );
                filterbuf.append( "=" );
                filterbuf.append( roleVal );
                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 role [" + role.getName() + "] type [" + type + "] caught IOException="
                        + e.getMessage();
                int errCode;
                if ( type == 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 role [" + role.getName() + "] type [" + type + "] caught CursorException="
                        + e.getMessage();
                int errCode;
                if ( type == 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 role [" + role.getName() + "] type [" + type + "] caught LdapException="
                + e;
            int errCode;
            if ( type == 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;
    }