001/* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * docs/licenses/cddl.txt 011 * or http://www.opensource.org/licenses/cddl1.php. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * docs/licenses/cddl.txt. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Portions Copyright 2010-2023 Ping Identity Corporation 026 */ 027package com.unboundid.directory.sdk.common.schema; 028 029 030 031import com.unboundid.directory.sdk.common.types.ConditionResult; 032import com.unboundid.ldap.sdk.LDAPException; 033import com.unboundid.util.ByteString; 034import com.unboundid.util.NotExtensible; 035import com.unboundid.util.ThreadSafety; 036import com.unboundid.util.ThreadSafetyLevel; 037 038 039 040/** 041 * This interface provides an API for interacting with matching rules, which 042 * can be used to perform matching-related operations against data. 043 */ 044@NotExtensible() 045@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE) 046public interface MatchingRule 047{ 048 /** 049 * Retrieves the numeric OID for this matching rule. 050 * 051 * @return The numeric OID for this matching rule. 052 */ 053 String getOID(); 054 055 056 057 /** 058 * Retrieves the name for this matching rule, if any. 059 * 060 * @return The name for this matching rule, or {@code null} if it does not 061 * have a name. 062 */ 063 String getName(); 064 065 066 067 /** 068 * Retrieves the name for this matching rule, or the numeric OID if it does 069 * not have a name. 070 * 071 * @return The name for this matching rule, or the numeric OID if it does not 072 * have a name. 073 */ 074 String getNameOrOID(); 075 076 077 078 /** 079 * Indicates whether the provided string matches the name or numeric OID for 080 * this matching rule. 081 * 082 * @param name The name for which to make the determination. 083 * 084 * @return {@code true} if the provided string matches the name or numeric 085 * OID for this matching rule, or {@code false} if not. 086 */ 087 boolean hasNameOrOID(final String name); 088 089 090 091 /** 092 * Retrieves the description for this matching rule, if any. 093 * 094 * @return The description for this matching rule, or {@code null} if it does 095 * not have a description. 096 */ 097 String getDescription(); 098 099 100 101 /** 102 * Retrieves the OID of the attribute syntax with which this matching rule is 103 * most closely associated. 104 * 105 * @return The OID of the attribute syntax with which this matching rule is 106 * most closely associated. 107 */ 108 String getSyntaxOID(); 109 110 111 112 /** 113 * Indicates whether this matching rule is declared obsolete in the server 114 * schema. 115 * 116 * @return {@code true} if this matching rule is declared obsolete, or 117 * {@code false} if not. 118 */ 119 boolean isObsolete(); 120 121 122 123 /** 124 * Retrieves the normalized form of the provided value. 125 * 126 * @param value The value to be normalized. 127 * 128 * @return The normalized form of the provided value. 129 * 130 * @throws LDAPException If an error occurs while attempting to normalize 131 * the provided value (e.g., it does not conform to 132 * the appropriate syntax). 133 */ 134 ByteString normalizeValue(final ByteString value) 135 throws LDAPException; 136 137 138 139 /** 140 * Retrieves the normalized form of the provided value. 141 * 142 * @param type The associated attribute type. 143 * @param value The value to be normalized. 144 * 145 * @return The normalized form of the provided value. 146 * 147 * @throws LDAPException If an error occurs while attempting to normalize 148 * the provided value (e.g., it does not conform to 149 * the appropriate syntax). 150 */ 151 ByteString normalizeValue(final AttributeType type, final ByteString value) 152 throws LDAPException; 153 154 155 156 /** 157 * Indicates whether the provided attribute value may be considered logically 158 * equivalent to the provided assertion value according to the constraints of 159 * this matching rule.. 160 * 161 * @param normAttributeValue The normalized form of the attribute value to 162 * be compared. 163 * @param normAssertionValue The normalized form of the assertion value to 164 * be compared. 165 * 166 * @return {@code TRUE} if the values are considered equal, 167 * {@code FALSE} if the values are considered different, or 168 * {@code UNDEFINED} if the result is not defined for this matching 169 * rule. 170 */ 171 ConditionResult valuesMatch(final ByteString normAttributeValue, 172 final ByteString normAssertionValue); 173 174 175 176 /** 177 * Retrieves the hash code for this matching rule. 178 * 179 * @return The hash code for this matching rule. 180 */ 181 int hashCode(); 182 183 184 185 /** 186 * Indicates whether the provided object is equal to this matching rule. 187 * 188 * @param o The object for which to make the determination. 189 * 190 * @return {@code true} if the provided object is equal to this matching 191 * rule, or {@code false} if not. 192 */ 193 boolean equals(final Object o); 194 195 196 197 /** 198 * Retrieves a string representation of this matching rule. 199 * 200 * @return A string representation of this matching rule. 201 */ 202 String toString(); 203}