Package org.apache.directory.api.ldap.model.message.controls

Examples of org.apache.directory.api.ldap.model.message.controls.SortResponseControl


                0x04, 0x02, 'c', 'n'
            } );
        buffer.flip();
       
        SortResponseDecorator decorator = new SortResponseDecorator( codec );
        SortResponseControl control = ( SortResponseControl ) decorator.decode( buffer.array() );
       
        assertEquals( SortResultCode.SUCCESS, control.getSortResult() );
        assertEquals( "cn", control.getAttributeName() );
       
        ByteBuffer encoded = ByteBuffer.allocate( buffer.capacity() );
        decorator.computeLength();
        decorator.encode( encoded );
        assertTrue( Arrays.equals( buffer.array(), encoded.array() ) );
View Full Code Here


                0x0A, 0x01, 0x10
            } );
        buffer.flip();
       
        SortResponseDecorator decorator = new SortResponseDecorator( codec );
        SortResponseControl control = ( SortResponseControl ) decorator.decode( buffer.array() );
       
        assertEquals( SortResultCode.NOSUCHATTRIBUTE, control.getSortResult() );
        assertNull( control.getAttributeName() );
       
        ByteBuffer encoded = ByteBuffer.allocate( buffer.capacity() );
        decorator.computeLength();
        decorator.encode( encoded );
        assertTrue( Arrays.equals( buffer.array(), encoded.array() ) );
View Full Code Here

        OperationManager operationManager = directoryService.getOperationManager();

        // Check if we received serverside sort Control
        SortRequestControl sortControl = ( SortRequestControl ) searchRequest.getControls().get( SortRequestControl.OID );
       
        SortResponseControl sortRespCtrl = null;
       
        SearchResultDone done = searchRequest.getResultResponse();
       
        LdapResult ldapResult = done.getLdapResult();
       
        if( sortControl != null )
        {
            sortRespCtrl = canSort( sortControl, ldapResult, getDirectoryService().getSchemaManager() );
           
            if ( sortControl.isCritical() && ( sortRespCtrl.getSortResult() != SortResultCode.SUCCESS ) )
            {
                ldapResult.setResultCode( ResultCodeEnum.UNAVAILABLE_CRITICAL_EXTENSION );
                done.addControl( sortRespCtrl );
               
                return new EmptyCursor<Entry>();
            }
        }

        Cursor<Entry> cursor = null;

        try
        {
            cursor = operationManager.search( searchContext );
           
            if ( ( sortRespCtrl != null ) && ( sortRespCtrl.getSortResult() == SortResultCode.SUCCESS ) )
            {
                cursor = sortResults( cursor, sortControl, getDirectoryService().getSchemaManager() );
            }

            // the below condition is to satisfy the scenario 6 in section 2 of rfc2891
View Full Code Here

     * @param session the current session
     * @return a sort response control
     */
    private SortResponseControl canSort( SortRequestControl sortControl, LdapResult ldapResult, SchemaManager schemaManager )
    {
        SortResponseControl resp = new SortResponseControlImpl();
       
        List<SortKey> keys = sortControl.getSortKeys();
       
        // only ONE key is supported by the server for now
        if( keys.size() > 1 )
        {
            ldapResult.setDiagnosticMessage( "Cannot sort results based on more than one attribute" );
            resp.setSortResult( SortResultCode.UNWILLINGTOPERFORM );
            return resp;
        }
       
        SortKey sk = keys.get( 0 );
       
        AttributeType at = schemaManager.getAttributeType( sk.getAttributeTypeDesc() );
       
        if ( at == null )
        {
           ldapResult.setDiagnosticMessage( "No attribute with the name " + sk.getAttributeTypeDesc() + " exists in the server's schema" );
           resp.setSortResult( SortResultCode.NOSUCHATTRIBUTE );
           resp.setAttributeName( sk.getAttributeTypeDesc() );
           return resp;
        }
       
        String mrOid = sk.getMatchingRuleId();
       
        if( mrOid != null )
        {
            MatchingRule mr = at.getOrdering();
           
            if( mr != null )
            {
                if( !mrOid.equals( mr.getOid() ) )
                {
                    ldapResult.setDiagnosticMessage( "Given matchingrule " + mrOid + " is not applicable for the attribute " + sk.getAttributeTypeDesc() );
                    resp.setSortResult( SortResultCode.INAPPROPRIATEMATCHING );
                    resp.setAttributeName( sk.getAttributeTypeDesc() );
                    return resp;       
                }
            }
           
            try
            {
                schemaManager.lookupComparatorRegistry( mrOid );
            }
            catch ( LdapException e )
            {
                ldapResult.setDiagnosticMessage( "Given matchingrule " + mrOid + " is not supported" );
                resp.setSortResult( SortResultCode.INAPPROPRIATEMATCHING );
                resp.setAttributeName( sk.getAttributeTypeDesc() );
                return resp;       
            }
        }
        else
        {
            MatchingRule mr = at.getOrdering();
           
            if( mr == null )
            {
                mr = at.getEquality();
            }
           
            ldapResult.setDiagnosticMessage( "Matchingrule is required for sorting by the attribute " + sk.getAttributeTypeDesc() );
            resp.setSortResult( SortResultCode.INAPPROPRIATEMATCHING );
            resp.setAttributeName( sk.getAttributeTypeDesc() );
           
            if( mr == null )
            {
                return resp;
            }
           
            try
            {
                schemaManager.lookupComparatorRegistry( mr.getOid() );
            }
            catch ( LdapException e )
            {
                return resp;       
            }
        }
       
        resp.setSortResult( SortResultCode.SUCCESS );
       
        return resp;
    }
View Full Code Here

TOP

Related Classes of org.apache.directory.api.ldap.model.message.controls.SortResponseControl

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.