1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
/* * @(#)SortResponseControl.java 1.4 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ 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. * <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. */ public static final String OID = "1.2.840.113556.1.4.474"; private static final long serialVersionUID = 5142939176006310877L; /** * The sort result code. * * @serial */ private int resultCode = 0; /** * 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. * * @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. * * @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. * * @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. * * @return The possibly null ID of the bad attribute. */ public String getAttributeID() { return badAttrId; } /** * 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); } }