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.Map; 032 033import com.unboundid.util.NotExtensible; 034import com.unboundid.util.ThreadSafety; 035import com.unboundid.util.ThreadSafetyLevel; 036 037 038 039/** 040 * This interface provides a number of methods that may be used to interact with 041 * the server schema. 042 */ 043@NotExtensible() 044@ThreadSafety(level=ThreadSafetyLevel.INTERFACE_THREADSAFE) 045public interface Schema 046{ 047 /** 048 * Retrieves the set of attribute types defined in the server schema, mapped 049 * from lowercase name or OID to the attribute type definition. Each 050 * attribute type definition may be included in the map multiple times with 051 * each of its names as well as its OID. 052 * 053 * @return The set of attribute types defined in the server schema, mapped 054 * from lowercase name or OID to the attribute type definition. 055 */ 056 Map<String,AttributeType> getAttributeTypesByName(); 057 058 059 060 /** 061 * Retrieves the specified attribute type from the server schema, optionally 062 * creating a new attribute type with the specified name if none is defined. 063 * 064 * @param name The name or OID of the attribute type to retrieve. 065 * @param returnDefault Indicates whether to create a new attribute type 066 * with the given name and a default settings if no 067 * such attribute is defined in the server schema. 068 * 069 * @return The requested attribute type, or {@code null} if no such attribute 070 * is defined in the schema and a default type should not be 071 * returned. 072 */ 073 AttributeType getAttributeType(final String name, 074 final boolean returnDefault); 075 076 077 078 /** 079 * Retrieves the set of object classes defined in the server schema, mapped 080 * from lowercase name or OID to the object class definition. Each object 081 * class definition may be included in the map multiple times with each of its 082 * names as well as its OID. 083 * 084 * @return The set of object classes defined in the server schema, mapped 085 * from lowercase name or OID to the object class definition. 086 */ 087 Map<String,ObjectClass> getObjectClassesByName(); 088 089 090 091 /** 092 * Retrieves the specified object class from the server schema, optionally 093 * creating a new class with the specified name if none is defined. 094 * 095 * @param name The name or OID of the object class to retrieve. 096 * @param returnDefault Indicates whether to create a new object class 097 * with the given name and a default settings if no 098 * such object class is defined in the server schema. 099 * 100 * @return The requested object class, or {@code null} if no such object 101 * class is defined in the schema and a default class should not be 102 * returned. 103 */ 104 ObjectClass getObjectClass(final String name, final boolean returnDefault); 105 106 107 108 /** 109 * Retrieves the set of attribute syntaxes defined in the schema, mapped from 110 * OID to the corresponding attribute syntax. 111 * 112 * @return The set of attribute syntaxes defined in the server schema, mapped 113 * from OID to the attribute syntax definition. 114 */ 115 Map<String,AttributeSyntax> getAttributeSyntaxesByOID(); 116 117 118 119 /** 120 * Retrieves the attribute syntax with the specified OID, if available. 121 * 122 * @param oid The OID of the attribute syntax to retrieve. 123 * 124 * @return The requested attribute syntax, or {@code null} if there is no 125 * such syntax defined in the server. 126 */ 127 AttributeSyntax getAttributeSyntax(final String oid); 128 129 130 131 /** 132 * Retrieves the set of matching rules defined in the server schema, mapped 133 * from lowercase name or OID to the matching rule definition. Each 134 * matching rule definition may be included in the map multiple times with 135 * each of its names as well as its OID. 136 * 137 * @return The set of matching rules defined in the server schema, mapped 138 * from lowercase name or OID to the matching rule definition. 139 */ 140 Map<String,MatchingRule> getMatchingRulesByName(); 141 142 143 144 /** 145 * Retrieves the specified matching rule from the server schema. 146 * 147 * @param name The name or OID of the matching rule to retrieve. 148 * 149 * @return The requested matching rule, or {@code null} if no such matching 150 * rule is defined in the schema. 151 */ 152 MatchingRule getMatchingRule(final String name); 153 154 155 156 /** 157 * Retrieves the set of name forms defined in the server schema, mapped from 158 * structural object class to the corresponding name form definition. 159 * 160 * @return The set of name forms defined in the server schema, mapped from 161 * structural object class to the corresponding name form definition. 162 */ 163 Map<ObjectClass,NameForm> getNameFormsByStructuralClass(); 164 165 166 167 /** 168 * Retrieves the specified name form from the server schema. 169 * 170 * @param name The name or OID of the name form to retrieve. 171 * 172 * @return The requested name form, or {@code null} if there is no name form 173 * with the specified name or OID. 174 */ 175 NameForm getNameForm(final String name); 176 177 178 179 /** 180 * Retrieves the specified name form from the server schema. 181 * 182 * @param structuralClass The structural object class for which to retrieve 183 * the corresponding name form. 184 * 185 * @return The requested name form, or {@code null} if there is no name form 186 * associated with the specified structural object class. 187 */ 188 NameForm getNameForm(final ObjectClass structuralClass); 189 190 191 192 /** 193 * Retrieves the set of DIT content rules defined in the server schema, mapped 194 * from structural object class to the corresponding DIT structure rule 195 * definition. 196 * 197 * @return The set of DIT content rules defined in the server schema, mapped 198 * from structural object class to the corresponding DIT content 199 * rule definition. 200 */ 201 Map<ObjectClass,DITContentRule> getDITContentRulesByStructuralClass(); 202 203 204 205 /** 206 * Retrieves the specified DIT content rule from the server schema. 207 * 208 * @param structuralClass The structural object class for which to retrieve 209 * the corresponding DIT content rule. 210 * 211 * @return The requested DIT content rule, or {@code null} if no such DIT 212 * content rule is defined in the server schema. 213 */ 214 DITContentRule getDITContentRule(final ObjectClass structuralClass); 215 216 217 218 /** 219 * Retrieves the set of DIT structure rules defined in the server schema, 220 * mapped from rule ID to the corresponding DIT structure rule definition. 221 * 222 * @return The set of DIT structure rules defined in the server schema, 223 * mapped from rule ID to the corresponding DIT structure rule 224 * definition. 225 */ 226 Map<Integer,DITStructureRule> getDITStructureRulesByRuleID(); 227 228 229 230 /** 231 * Retrieves the specified DIT structure rule from the server schema. 232 * 233 * @param ruleID The rule ID for the DIT structure rule to retrieve. 234 * 235 * @return The requested DIT structure rule, or {@code null} if no such DIT 236 * structure rule is defined in the server schema. 237 */ 238 DITStructureRule getDITStructureRule(final int ruleID); 239 240 241 242 /** 243 * Retrieves the specified DIT structure rule from the server schema. 244 * 245 * @param nameForm The name form for which to retrieve the corresponding DIT 246 * structure rule. 247 * 248 * @return The requested DIT structure rule, or {@code null} if no such DIT 249 * structure rule is defined in the server schema. 250 */ 251 DITStructureRule getDITStructureRule(final NameForm nameForm); 252 253 254 255 /** 256 * Retrieves the set of matching rule uses defined in the server schema, 257 * mapped from matching rule to its corresponding matching rule use. 258 * 259 * @return The set of matching rule uses defined in the server schema, mapped 260 * from matching rule to its corresponding matching rule use. 261 */ 262 Map<MatchingRule,MatchingRuleUse> getMatchingRuleUsesByMatchingRule(); 263 264 265 266 /** 267 * Retrieves the specified matching rule use from the server schema. 268 * 269 * @param matchingRule The matching rule for which to retrieve the 270 * corresponding matching rule use. 271 * 272 * @return The requested matching rule use, or {@code null} if there is no 273 * matching rule use associated with the provided matching rule. 274 */ 275 MatchingRuleUse getMatchingRuleUse(final MatchingRule matchingRule); 276}