/*
 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package javax.naming.ldap;

import java.io.IOException;
import javax.naming.*;
import javax.naming.directory.*;
import com.sun.jndi.ldap.Ber;
import com.sun.jndi.ldap.BerDecoder;
import com.sun.jndi.ldap.LdapCtx;

Indicates whether the requested sort of search results was successful or not. When the result code indicates success then the results have been sorted as requested. Otherwise the sort was unsuccessful and additional details regarding the cause of the error may have been provided by the server.

The code sample in SortControl shows how this class may be used.

This class implements the LDAPv3 Response Control for server-side sorting as defined in RFC 2891. The control's value has the following ASN.1 definition:

    SortResult ::= SEQUENCE {
       sortResult  ENUMERATED {
           success                   (0), -- results are sorted
           operationsError           (1), -- server internal failure
           timeLimitExceeded         (3), -- timelimit reached before
                                          -- sorting was completed
           strongAuthRequired        (8), -- refused to return sorted
                                          -- results via insecure
                                          -- protocol
           adminLimitExceeded       (11), -- too many matching entries
                                          -- for the server to sort
           noSuchAttribute          (16), -- unrecognized attribute
                                          -- type in sort key
           inappropriateMatching    (18), -- unrecognized or inappro-
                                          -- priate matching rule in
                                          -- sort key
           insufficientAccessRights (50), -- refused to return sorted
                                          -- results to this client
           busy                     (51), -- too busy to process
           unwillingToPerform       (53), -- unable to sort
           other                    (80)
           },
     attributeType [0] AttributeType OPTIONAL }
Author:Vincent Ryan
See Also:
Since:1.5
/** * Indicates whether the requested sort of search results was successful or not. * When the result code indicates success then the results have been sorted as * requested. Otherwise the sort was unsuccessful and additional details * regarding the cause of the error may have been provided by the server. * <p> * The code sample in {@link SortControl} shows how this class may be used. * <p> * This class implements the LDAPv3 Response Control for server-side sorting * as defined in * <a href="http://www.ietf.org/rfc/rfc2891.txt">RFC 2891</a>. * * The control's value has the following ASN.1 definition: * <pre> * * SortResult ::= SEQUENCE { * sortResult ENUMERATED { * success (0), -- results are sorted * operationsError (1), -- server internal failure * timeLimitExceeded (3), -- timelimit reached before * -- sorting was completed * strongAuthRequired (8), -- refused to return sorted * -- results via insecure * -- protocol * adminLimitExceeded (11), -- too many matching entries * -- for the server to sort * noSuchAttribute (16), -- unrecognized attribute * -- type in sort key * inappropriateMatching (18), -- unrecognized or inappro- * -- priate matching rule in * -- sort key * insufficientAccessRights (50), -- refused to return sorted * -- results to this client * busy (51), -- too busy to process * unwillingToPerform (53), -- unable to sort * other (80) * }, * attributeType [0] AttributeType OPTIONAL } * * </pre> * * @since 1.5 * @see SortControl * @author Vincent Ryan */
final public class SortResponseControl extends BasicControl {
The server-side sort response control's assigned object identifier is 1.2.840.113556.1.4.474.
/** * The server-side sort response control's assigned object identifier * is 1.2.840.113556.1.4.474. */
public static final String OID = "1.2.840.113556.1.4.474"; private static final long serialVersionUID = 5142939176006310877L;
The sort result code.
@serial
/** * The sort result code. * * @serial */
private int resultCode = 0;
The ID of the attribute that caused the sort to fail.
@serial
/** * The ID of the attribute that caused the sort to fail. * * @serial */
private String badAttrId = null;
Constructs a control to indicate the outcome of a sort request.
Params:
  • id – The control's object identifier string.
  • criticality – The control's criticality.
  • value – The control's ASN.1 BER encoded value. It is not cloned - any changes to value will affect the contents of the control.
Throws:
  • IOException – if an error is encountered while decoding the control's value.
/** * Constructs a control to indicate the outcome of a sort request. * * @param id The control's object identifier string. * @param criticality The control's criticality. * @param value The control's ASN.1 BER encoded value. * It is not cloned - any changes to value * will affect the contents of the control. * @exception IOException if an error is encountered * while decoding the control's value. */
public SortResponseControl(String id, boolean criticality, byte[] value) throws IOException { super(id, criticality, value); // decode value BerDecoder ber = new BerDecoder(value, 0, value.length); ber.parseSeq(null); resultCode = ber.parseEnumeration(); if ((ber.bytesLeft() > 0) && (ber.peekByte() == Ber.ASN_CONTEXT)) { badAttrId = ber.parseStringWithTag(Ber.ASN_CONTEXT, true, null); } }
Determines if the search results have been successfully sorted. If an error occurred during sorting a NamingException is thrown.
Returns: true if the search results have been sorted.
/** * Determines if the search results have been successfully sorted. * If an error occurred during sorting a NamingException is thrown. * * @return true if the search results have been sorted. */
public boolean isSorted() { return (resultCode == 0); // a result code of zero indicates success }
Retrieves the LDAP result code of the sort operation.
Returns: The result code. A zero value indicates success.
/** * Retrieves the LDAP result code of the sort operation. * * @return The result code. A zero value indicates success. */
public int getResultCode() { return resultCode; }
Retrieves the ID of the attribute that caused the sort to fail. Returns null if no ID was returned by the server.
Returns:The possibly null ID of the bad attribute.
/** * Retrieves the ID of the attribute that caused the sort to fail. * Returns null if no ID was returned by the server. * * @return The possibly null ID of the bad attribute. */
public String getAttributeID() { return badAttrId; }
Retrieves the NamingException appropriate for the result code.
Returns:A NamingException or null if the result code indicates success.
/** * Retrieves the NamingException appropriate for the result code. * * @return A NamingException or null if the result code indicates * success. */
public NamingException getException() { return LdapCtx.mapErrorCode(resultCode, null); } }