/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive.control; import org.ldaptive.LdapUtils; /** * Used by {@link SortRequestControl} to declare how sorting should occur. See RFC 3698 for the definition of * matchingRuleId. * * @author Middleware Services */ public class SortKey { /** hash code seed. */ private static final int HASH_CODE_SEED = 739; /** attribute description. */ private String attributeDescription; /** matching rule id. */ private String matchingRuleId; /** reverse order. */ private boolean reverseOrder; /** Default constructor. */ public SortKey() {} /** * Creates a new sort key. * * @param attrDescription attribute description */ public SortKey(final String attrDescription) { setAttributeDescription(attrDescription); } /** * Creates a new sort key. * * @param attrDescription attribute description * @param ruleId matching rule id */ public SortKey(final String attrDescription, final String ruleId) { setAttributeDescription(attrDescription); setMatchingRuleId(ruleId); } /** * Creates a new sort key. * * @param attrDescription attribute description * @param ruleId matching rule id * @param reverse reverse order */ public SortKey(final String attrDescription, final String ruleId, final boolean reverse) { setAttributeDescription(attrDescription); setMatchingRuleId(ruleId); setReverseOrder(reverse); } /** * Returns the attribute description. * * @return attribute description */ public String getAttributeDescription() { return attributeDescription; } /** * Sets the attribute description. * * @param s attribute description */ public void setAttributeDescription(final String s) { attributeDescription = s; } /** * Returns the matching rule id. * * @return matching rule id */ public String getMatchingRuleId() { return matchingRuleId; } /** * Sets the matching rule id. * * @param s matching rule id */ public void setMatchingRuleId(final String s) { matchingRuleId = s; } /** * Returns whether results should be in reverse sorted order. * * @return whether results should be in reverse sorted order */ public boolean getReverseOrder() { return reverseOrder; } /** * Sets whether results should be in reverse sorted order. * * @param b whether results should be in reverse sorted order */ public void setReverseOrder(final boolean b) { reverseOrder = b; } @Override public boolean equals(final Object o) { if (o == this) { return true; } if (o instanceof SortKey) { final SortKey v = (SortKey) o; return LdapUtils.areEqual(attributeDescription, v.attributeDescription) && LdapUtils.areEqual(matchingRuleId, v.matchingRuleId) && LdapUtils.areEqual(reverseOrder, v.reverseOrder); } return false; } @Override public int hashCode() { return LdapUtils.computeHashCode(HASH_CODE_SEED, attributeDescription, matchingRuleId, reverseOrder); } @Override public String toString() { return String.format( "[%s@%d::attributeDescription=%s, matchingRuleId=%s, reverseOrder=%s]", getClass().getName(), hashCode(), attributeDescription, matchingRuleId, reverseOrder); } }