blob: 49ed9ba9dec4282a82394706da04cb8c3dda69fa [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.shared.ldap.schema;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.apache.directory.shared.ldap.exception.LdapException;
import org.apache.directory.shared.ldap.schema.registries.Registries;
/**
* Most schema objects have some common attributes. This class
* contains the minimum set of properties exposed by a SchemaObject.<br>
* We have 11 types of SchemaObjects :
* <li> AttributeType
* <li> DitCOntentRule
* <li> DitStructureRule
* <li> LdapComparator (specific to ADS)
* <li> LdapSyntaxe
* <li> MatchingRule
* <li> MatchingRuleUse
* <li> NameForm
* <li> Normalizer (specific to ADS)
* <li> ObjectClass
* <li> SyntaxChecker (specific to ADS)
* <br>
* <br>
* This class provides accessors and setters for the following attributes,
* which are common to all those SchemaObjects :
* <li>oid : The numeric OID
* <li>description : The SchemaObject description
* <li>obsolete : Tells if the schema object is obsolete
* <li>extensions : The extensions, a key/Values map
* <li>schemaObjectType : The SchemaObject type (see upper)
* <li>schema : The schema the SchemaObject is associated with (it's an extension).
* Can be null
* <li>isEnabled : The SchemaObject status (it's related to the schema status)
* <li>isReadOnly : Tells if the SchemaObject can be modified or not
* <br><br>
* Some of those attributes are not used by some Schema elements, even if they should
* have been used. Here is the list :
* <b>name</b> : LdapSyntax, Comparator, Normalizer, SyntaxChecker
* <b>numericOid</b> : DitStructureRule,
* <b>obsolete</b> : LdapSyntax, Comparator, Normalizer, SyntaxChecker
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public interface SchemaObject extends Serializable
{
/**
* Gets usually what is the numeric object identifier assigned to this
* SchemaObject. All schema objects except for MatchingRuleUses have an OID
* assigned specifically to then. A MatchingRuleUse's OID really is the OID
* of it's MatchingRule and not specific to the MatchingRuleUse. This
* effects how MatchingRuleUse objects are maintained by the system.
*
* @return an OID for this SchemaObject or its MatchingRule if this
* SchemaObject is a MatchingRuleUse object
*/
String getOid();
/**
* A special method used when renaming an SchemaObject: we may have to
* change it's OID
* @param oid The new OID
*/
void setOid( String oid );
/**
* Gets short names for this SchemaObject if any exists for it, otherwise,
* returns an empty list.
*
* @return the names for this SchemaObject
*/
List<String> getNames();
/**
* Gets the first name in the set of short names for this SchemaObject if
* any exists for it.
*
* @return the first of the names for this SchemaObject or the oid
* if one does not exist
*/
String getName();
/**
* Inject this SchemaObject into the given registries, updating the references to
* other SchemaObject
*
* @param errors The errors we got
* @param registries The Registries
*/
void addToRegistries( List<Throwable> errors, Registries registries ) throws LdapException;
/**
* Remove this SchemaObject from the given registries, updating the references to
* other SchemaObject
*
* @param errors The errors we got
* @param registries The Registries
*/
void removeFromRegistries( List<Throwable> errors, Registries registries ) throws LdapException;
/**
* Add a new name to the list of names for this SchemaObject. The name
* is lowercased and trimmed.
*
* @param names The names to add
*/
void addName( String... names );
/**
* Sets the list of names for this SchemaObject. The names are
* lowercased and trimmed.
*
* @param names The list of names. Can be empty
*/
void setNames( List<String> names );
/**
* Gets a short description about this SchemaObject.
*
* @return a short description about this SchemaObject
*/
public String getDescription();
/**
* Sets the SchemaObject's description
*
* @param description The SchemaObject's description
*/
public void setDescription( String description );
/**
* Gets the SchemaObject specification.
*
* @return the SchemaObject specification
*/
public String getSpecification();
/**
* Sets the SchemaObject's specification
*
* @param specification The SchemaObject's specification
*/
void setSpecification( String specification );
/**
* Tells if this SchemaObject is enabled.
*
* @return true if the SchemaObject is enabled, or if it depends on
* an enabled schema
*/
boolean isEnabled();
/**
* Tells if this SchemaObject is disabled.
*
* @return true if the SchemaObject is disabled
*/
boolean isDisabled();
/**
* Sets the SchemaObject state, either enabled or disabled.
*
* @param enabled The current SchemaObject state
*/
void setEnabled( boolean enabled );
/**
* Tells if this SchemaObject is ReadOnly.
*
* @return true if the SchemaObject is not modifiable
*/
boolean isReadOnly();
/**
* Sets the SchemaObject readOnly flag
*
* @param isReadOnly The current SchemaObject ReadOnly status
*/
void setReadOnly( boolean isReadOnly );
/**
* Gets whether or not this SchemaObject has been inactivated. All
* SchemaObjects except Syntaxes allow for this parameter within their
* definition. For Syntaxes this property should always return false in
* which case it is never included in the description.
*
* @return true if inactive, false if active
*/
boolean isObsolete();
/**
* Sets the Obsolete flag.
*
* @param obsolete The Obsolete flag state
*/
void setObsolete( boolean obsolete );
/**
* @return The SchemaObject extensions, as a Map of [extension, values]
*/
Map<String, List<String>> getExtensions();
/**
* Add an extension with its values
* @param key The extension key
* @param values The associated values
*/
void addExtension( String key, List<String> values );
/**
* Add an extensions with their values. (Actually do a copy)
*
* @param extensions The extensions map
*/
void setExtensions( Map<String, List<String>> extensions );
/**
* The SchemaObject type :
* <li> AttributeType
* <li> DitCOntentRule
* <li> DitStructureRule
* <li> LdapComparator (specific to ADS)
* <li> LdapSyntaxe
* <li> MatchingRule
* <li> MatchingRuleUse
* <li> NameForm
* <li> Normalizer (specific to ADS)
* <li> ObjectClass
* <li> SyntaxChecker (specific to ADS)
*
* @return the SchemaObject type
*/
SchemaObjectType getObjectType();
/**
* Gets the name of the schema this SchemaObject is associated with.
*
* @return the name of the schema associated with this schemaObject
*/
String getSchemaName();
/**
* Sets the name of the schema this SchemaObject is associated with.
*
* @param schemaName the new schema name
*/
void setSchemaName( String schemaName );
/**
* @see Object#hashCode()
*/
int hashCode();
/**
* @see Object#equals(Object)
*/
boolean equals( Object o1 );
/**
* Register the given SchemaObject into the given registries' globalOidRegistry
*
* @param schemaObject the SchemaObject we want to register
* @param registries The registries in which we want it to be stored
* @throws LdapException If the OID is invalid
*/
void registerOid( SchemaObject schemaObject, Registries registries ) throws LdapException;
/**
* Copy the current SchemaObject on place
*
* @return The copied SchemaObject
*/
SchemaObject copy();
/**
* Copy a SchemaObject.
*
* @return A copy of the current SchemaObject
*/
SchemaObject copy( SchemaObject original );
/**
* Clear the current SchemaObject : remove all the references to other objects,
* and all the Maps.
*/
void clear();
/**
* Inject the Registries into the SchemaObject
*
* @param registries The Registries
*/
void setRegistries( Registries registries );
/**
* Transform the SchemaObject to an immutable object
* TODO locked.
*
*/
void lock();
}