blob: c42dd16fe9400b1cbc03a1b202075e7ab03de208 [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.api.ldap.model.schema;
import java.util.List;
import java.util.Map;
/**
* 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
{
/**
* 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();
/**
* Add a new name to the list of names for this SchemaObject. The name
* is lower cased and trimmed.
*
* @param names The names to add
*/
void addName( String... names );
/**
* Sets the list of names for this SchemaObject. The names are
* lower cased 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
*/
String getDescription();
/**
* Sets the SchemaObject's description
*
* @param description The SchemaObject's description
*/
void setDescription( String description );
/**
* Gets the SchemaObject specification.
*
* @return the SchemaObject specification
*/
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();
/**
* Check if a given extension is part of the SchemaObject. Extensions are case insensitive.
*
* @param extension The extension we are looking for.
* @return <code>true</code> if the extension is present.
*/
boolean hasExtension( String extension );
/**
* Get back the values associated with a given extension.
*
* @param extension The extension we are looking for.
* @return The list of values associated with the extension
*/
List<String> getExtension( String extension );
/**
* Add an extension with its values
* @param key The extension key
* @param values The associated values
*/
void addExtension( String key, String... values );
/**
* 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 );
/**
* {@inheritDoc}
*/
int hashCode();
/**
* {@inheritDoc}
*/
boolean equals( Object o1 );
/**
* Copy the current SchemaObject on place
*
* @return The copied SchemaObject
*/
SchemaObject copy();
/**
* Copies the given schema object into this schema object.
*
* @param original the original SchemaObject
* @return this
*/
SchemaObject copy( SchemaObject original );
/**
* Clear the current SchemaObject : remove all the references to other objects,
* and all the Maps.
*/
void clear();
/**
* Transform the SchemaObject to an immutable object
* TODO locked.
*
*/
void lock();
}