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 java.util.List; 032import java.util.Map; 033import java.util.Set; 034 035import com.unboundid.ldap.sdk.schema.ObjectClassType; 036import com.unboundid.util.NotExtensible; 037import com.unboundid.util.ThreadSafety; 038import com.unboundid.util.ThreadSafetyLevel; 039 040 041 042/** 043 * This interface defines a set of methods that may be used to obtain 044 * information about an object class defined in the server schema. 045 */ 046@NotExtensible() 047@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE) 048public interface ObjectClass 049{ 050 /** 051 * Retrieves the numeric OID for this object class. 052 * 053 * @return The numeric OID for this object class. 054 */ 055 String getOID(); 056 057 058 059 /** 060 * Retrieves the list of names for this object class, if any. 061 * 062 * @return The list of names for this object class, or an empty list if 063 * there are no user-defined names. 064 */ 065 List<String> getNames(); 066 067 068 069 /** 070 * Retrieves the primary name for this object class, or the numeric OID if 071 * no names are defined. 072 * 073 * @return The primary name or OID for this object class. 074 */ 075 String getNameOrOID(); 076 077 078 079 /** 080 * Indicates whether the provided string is equal to the OID or any of the 081 * defined names for this object class. 082 * 083 * @param name The name for which to make the determination. 084 * 085 * @return {@code true} if the provided string matches the OID or one of the 086 * names for this object class, or {@code false} if not. 087 */ 088 boolean hasNameOrOID(final String name); 089 090 091 092 /** 093 * Retrieves the description for this object class, if any. 094 * 095 * @return The description for this object class, or {@code null} if it does 096 * not have a description. 097 */ 098 String getDescription(); 099 100 101 102 /** 103 * Retrieves the immediate superior classes for this object class, if any. 104 * 105 * @return The immediate superior classes for this object class, or an empty 106 * list if this object class does not have any superior classes. 107 */ 108 List<ObjectClass> getSuperiorClasses(); 109 110 111 112 /** 113 * Retrieves the set of required attributes for this object class. This set 114 * will only include the required attributes defined for this object class 115 * itself and not those of its superior classes. 116 * 117 * @return The set of required attributes for this object class, or an empty 118 * list if it does not have any required attributes. 119 */ 120 Set<AttributeType> getRequiredAttributes(); 121 122 123 124 /** 125 * Retrieves the set of required attributes for this object class and all of 126 * its superior classes. 127 * 128 * @return The set of required attributes for this object class and all of 129 * its superior classes, or an empty list if it does not have any 130 * required attributes. 131 */ 132 Set<AttributeType> getRequiredAttributeChain(); 133 134 135 136 /** 137 * Indicates whether the provided attribute type is required for use with this 138 * object class or any of its superior classes. 139 * 140 * @param t The attribute type for which to make the definition. 141 * 142 * @return {@code true} if the provided attribute type is required for use 143 * with this object class, or {@code false} if not. 144 */ 145 boolean isRequired(final AttributeType t); 146 147 148 149 /** 150 * Retrieves the set of optional attributes for this object class. This set 151 * will only include the optional attributes defined for this object class 152 * itself and not those of its superior classes. 153 * 154 * @return The set of optional attributes for this object class, or an empty 155 * list if it does not have any optional attributes. 156 */ 157 Set<AttributeType> getOptionalAttributes(); 158 159 160 161 /** 162 * Retrieves the set of optional attributes for this object class and all of 163 * its superior classes. 164 * 165 * @return The set of optional attributes for this object class and all of 166 * its superior classes, or an empty list if it does not have any 167 * optional attributes. 168 */ 169 Set<AttributeType> getOptionalAttributeChain(); 170 171 172 173 /** 174 * Indicates whether the provided attribute type is optional for use with this 175 * object class or any of its superior classes. 176 * 177 * @param t The attribute type for which to make the definition. 178 * 179 * @return {@code true} if the provided attribute type is optional for use 180 * with this object class, or {@code false} if not. 181 */ 182 boolean isOptional(final AttributeType t); 183 184 185 186 /** 187 * Indicates whether the provided attribute type is allowed for use with this 188 * object class or any of its superior classes, either as a required or 189 * optional type. 190 * 191 * @param t The attribute type for which to make the definition. 192 * 193 * @return {@code true} if the provided attribute type is allowed for use 194 * with this object class, or {@code false} if not. 195 */ 196 boolean isRequiredOrOptional(final AttributeType t); 197 198 199 200 /** 201 * Retrieves the object class type for this object class. 202 * 203 * @return The object class type for this object class. 204 */ 205 ObjectClassType getObjectClassType(); 206 207 208 209 /** 210 * Indicates whether this object class is declared obsolete in the server 211 * schema. 212 * 213 * @return {@code true} if this object class is declared obsolete in the 214 * server schema, or {@code false} if not. 215 */ 216 boolean isObsolete(); 217 218 219 220 /** 221 * Retrieves a map of all defined extensions for this object class. 222 * 223 * @return A map of all defined extensions for this object class. 224 */ 225 Map<String,List<String>> getExtensions(); 226 227 228 229 /** 230 * Retrieves the name of the schema file in which this object class is 231 * defined. 232 * 233 * @return The name of the schema file in which this object class is defined. 234 */ 235 String getSchemaFileName(); 236 237 238 239 /** 240 * Indicates whether the provided object is equal to this object class. 241 * 242 * @param o The object for which to make the determination. 243 * 244 * @return {@code true} if the provided object is equal to this object class, 245 * or {@code false} if not. 246 */ 247 boolean equals(final Object o); 248 249 250 251 /** 252 * Retrieves a hash code for this object class. 253 * 254 * @return A hash code for this object class. 255 */ 256 int hashCode(); 257 258 259 260 /** 261 * Retrieves a string representation of this object class definition. 262 * 263 * @return A string representation of this object class definition. 264 */ 265 String toString(); 266}