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    }