All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ldaptive.control.SortRequestControl Maven / Gradle / Ivy

The newest version!
/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.control;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ldaptive.LdapUtils;
import org.ldaptive.asn1.ConstructedDEREncoder;
import org.ldaptive.asn1.ContextType;
import org.ldaptive.asn1.DEREncoder;
import org.ldaptive.asn1.OctetStringType;
import org.ldaptive.asn1.UniversalDERTag;

/**
 * Request control for server side sorting. See RFC 2891. Control is defined as:
 *
 * 
   SortKeyList ::= SEQUENCE OF SEQUENCE {
      attributeType   AttributeDescription,
      orderingRule    [0] MatchingRuleId OPTIONAL,
      reverseOrder    [1] BOOLEAN DEFAULT FALSE }
 * 
* * @author Middleware Services */ public class SortRequestControl extends AbstractControl implements RequestControl { /** OID of this control. */ public static final String OID = "1.2.840.113556.1.4.473"; /** hash code seed. */ private static final int HASH_CODE_SEED = 727; /** sort keys. */ private SortKey[] sortKeys; /** Default constructor. */ public SortRequestControl() { super(OID); } /** * Creates a new sort request control. * * @param keys sort keys */ public SortRequestControl(final SortKey[] keys) { super(OID); setSortKeys(keys); } /** * Creates a new sort request control. * * @param keys sort keys * @param critical whether this control is critical */ public SortRequestControl(final SortKey[] keys, final boolean critical) { super(OID, critical); setSortKeys(keys); } @Override public boolean hasValue() { return true; } /** * Returns the sort keys. * * @return sort keys */ public SortKey[] getSortKeys() { return sortKeys; } /** * Sets the sort keys. * * @param keys sort keys */ public void setSortKeys(final SortKey[] keys) { sortKeys = keys; } @Override public boolean equals(final Object o) { if (o == this) { return true; } if (o instanceof SortRequestControl && super.equals(o)) { final SortRequestControl v = (SortRequestControl) o; return LdapUtils.areEqual(sortKeys, v.sortKeys); } return false; } @Override public int hashCode() { return LdapUtils.computeHashCode(HASH_CODE_SEED, getOID(), getCriticality(), sortKeys); } @Override public String toString() { return "[" + getClass().getName() + "@" + hashCode() + "::" + "criticality=" + getCriticality() + ", " + "sortKeys=" + Arrays.toString(sortKeys) + "]"; } @Override public byte[] encode() { final DEREncoder[] keyEncoders = new DEREncoder[sortKeys.length]; for (int i = 0; i < sortKeys.length; i++) { final List l = new ArrayList<>(); l.add(new OctetStringType(sortKeys[i].getAttributeDescription())); if (sortKeys[i].getMatchingRuleId() != null) { l.add(new ContextType(0, sortKeys[i].getMatchingRuleId())); } if (sortKeys[i].getReverseOrder()) { l.add(new ContextType(1, sortKeys[i].getReverseOrder())); } keyEncoders[i] = new ConstructedDEREncoder(UniversalDERTag.SEQ, l.toArray(new DEREncoder[0])); } final ConstructedDEREncoder se = new ConstructedDEREncoder(UniversalDERTag.SEQ, keyEncoders); return se.encode(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy