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