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    import java.util.Set;
034    
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 a name form defined in the server schema.
044     */
045    @NotExtensible()
046    @ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE)
047    public interface NameForm
048    {
049      /**
050       * Retrieves the numeric OID for this name form.
051       *
052       * @return  The numeric OID for this name form.
053       */
054      String getOID();
055    
056    
057    
058      /**
059       * Retrieves the list of names for this name form, if any.
060       *
061       * @return  The list of names for this name form, 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 name form, or the numeric OID if no
070       * names are defined.
071       *
072       * @return The primary name or OID for this name form.
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 name form.
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 name form, or {@code false} if not.
086       */
087      boolean hasNameOrOID(final String name);
088    
089    
090    
091      /**
092       * Retrieves the description for this name form, if any.
093       *
094       * @return  The description for this name form, or {@code null} if it does not
095       *          have a description.
096       */
097      String getDescription();
098    
099    
100    
101      /**
102       * Retrieves the structural object class for this name form.
103       *
104       * @return  The structural object class for this name form.
105       */
106      ObjectClass getStructuralClass();
107    
108    
109    
110      /**
111       * Retrieves the set of required attributes for this name form.
112       *
113       * @return  The set of required attributes for this name form.
114       */
115      Set<AttributeType> getRequiredAttributes();
116    
117    
118    
119      /**
120       * Indicates whether the provided attribute type is required by this name
121       * form.
122       *
123       * @param  t  The attribute type for which to make the determination.
124       *
125       * @return  {@code true} if the provided attribute type is required by this
126       *          name form, or {@code false} if not.
127       */
128      boolean isRequired(final AttributeType t);
129    
130    
131    
132      /**
133       * Retrieves the set of optional attributes for this name form, if any.
134       *
135       * @return  The set of optional attributes for this name form, or an empty set
136       *          if there are no optional attributes.
137       */
138      Set<AttributeType> getOptionalAttributes();
139    
140    
141    
142      /**
143       * Indicates whether the provided attribute type is optional for this name
144       * form.
145       *
146       * @param  t  The attribute type for which to make the determination.
147       *
148       * @return  {@code true} if the provided attribute type is optional for this
149       *          name form, or {@code false} if not.
150       */
151      boolean isOptional(final AttributeType t);
152    
153    
154    
155      /**
156       * Indicates whether the provided attribute type is allowed for use with this
157       * name form as either a required or optional type.
158       *
159       * @param  t  The attribute type for which to make the determination.
160       *
161       * @return  {@code true} if the provided attribute type is allowed for use
162       *          with this name form, or {@code false} if not.
163       */
164      boolean isRequiredOrOptional(final AttributeType t);
165    
166    
167    
168      /**
169       * Indicates whether this name form is declared obsolete in the server schema.
170       *
171       * @return  {@code true} if this name form is declared obsolete in the server
172       *          schema, or {@code false} if not.
173       */
174      boolean isObsolete();
175    
176    
177    
178      /**
179       * Retrieves a map of all defined extensions for this name form.
180       *
181       * @return  A map of all defined extensions for this name form.
182       */
183      Map<String,List<String>> getExtensions();
184    
185    
186    
187      /**
188       * Retrieves the name of the schema file in which this name form is defined.
189       *
190       * @return  The name of the schema file in which this name form is defined.
191       */
192      String getSchemaFileName();
193    
194    
195    
196      /**
197       * Indicates whether the provided object is equal to this name form.
198       *
199       * @param  o  The object for which to make the determination.
200       *
201       * @return  {@code true} if the provided object is equal to this name form, or
202       *          {@code false} if not.
203       */
204      boolean equals(final Object o);
205    
206    
207    
208      /**
209       * Retrieves a hash code for this name form.
210       *
211       * @return  A hash code for this name form.
212       */
213      int hashCode();
214    
215    
216    
217      /**
218       * Retrieves a string representation of this name form definition.
219       *
220       * @return  A string representation of this name form definition.
221       */
222      String toString();
223    }