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.util.NotExtensible;
036import com.unboundid.util.ThreadSafety;
037import 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 DIT structure rule defined in the server schema.
044 */
045@NotExtensible()
046@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE)
047public interface DITStructureRule
048{
049  /**
050   * Retrieves the rule ID for this DIT structure rule.
051   *
052   * @return  The rule ID for this DIT structure rule.
053   */
054  int getRuleID();
055
056
057
058  /**
059   * Retrieves the list of names for this DIT structure rule, if any.
060   *
061   * @return  The list of names for this DIT structure rule, 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 DIT structure rule, or the rule ID if
070   * no names are defined.
071   *
072   * @return The primary name or rule ID for this DIT structure rule.
073   */
074  String getNameOrRuleID();
075
076
077
078  /**
079   * Indicates whether the provided string is equal to any of the defined names
080   * or the rule ID for this DIT structure rule.
081   *
082   * @param  name  The name for which to make the determination.
083   *
084   * @return  {@code true} if the provided string matches one of the names or
085   *          the rule ID for this DIT structure rule, or {@code false} if not.
086   */
087  boolean hasNameOrRuleID(final String name);
088
089
090
091  /**
092   * Retrieves the description for this DIT content rule, if any.
093   *
094   * @return  The description for this DIT content rule, or {@code null} if it
095   *          does not have a description.
096   */
097  String getDescription();
098
099
100
101  /**
102   * Retrieves the name form for this DIT structure rule.
103   *
104   * @return  The name form for this DIT structure rule.
105   */
106  NameForm getNameForm();
107
108
109
110  /**
111   * Retrieves the structural object class for this DIT content rule.
112   *
113   * @return  The structural object class for this DIT content rule.
114   */
115  ObjectClass getStructuralClass();
116
117
118
119  /**
120   * Retrieves the set of superior DIT structure rules for this rule, if any.
121   *
122   * @return  The set of superior DIT structure rules, or an empty set if there
123   *          are no superior rules.
124   */
125  Set<DITStructureRule> getSuperiorRules();
126
127
128
129  /**
130   * Indicates whether this DIT structure rule is declared obsolete in the
131   * server schema.
132   *
133   * @return  {@code true} if this DIT structure rule is declared obsolete in
134   *          the server schema, or {@code false} if not.
135   */
136  boolean isObsolete();
137
138
139
140  /**
141   * Retrieves a map of all defined extensions for this DIT structure rule.
142   *
143   * @return  A map of all defined extensions for this DIT structure rule.
144   */
145  Map<String,List<String>> getExtensions();
146
147
148
149  /**
150   * Retrieves the name of the schema file in which this DIT structure rule is
151   * defined.
152   *
153   * @return  The name of the schema file in which this DIT structure rule is
154   *          defined.
155   */
156  String getSchemaFileName();
157
158
159
160  /**
161   * Indicates whether the provided object is equal to this DIT structure rule.
162   *
163   * @param  o  The object for which to make the determination.
164   *
165   * @return  {@code true} if the provided object is equal to this DIT structure
166   *          rule, or {@code false} if not.
167   */
168  boolean equals(final Object o);
169
170
171
172  /**
173   * Retrieves a hash code for this DIT structure rule.
174   *
175   * @return  A hash code for this DIT structure rule.
176   */
177  int hashCode();
178
179
180
181  /**
182   * Retrieves a string representation of this DIT structure rule definition.
183   *
184   * @return  A string representation of this DIT structure rule definition.
185   */
186  String toString();
187}