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 * Copyright 2010-2012 UnboundID Corp.
026 */
027 package com.unboundid.directory.sdk.common.schema;
028
029
030
031 import java.util.List;
032 import java.util.Map;
033 import java.util.Set;
034
035 import com.unboundid.ldap.sdk.schema.ObjectClassType;
036 import com.unboundid.util.NotExtensible;
037 import com.unboundid.util.ThreadSafety;
038 import 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)
048 public 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 }