/*
 *  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
 *  
 *    https://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.exception;


/**
 * This enum contains all the various codes that can be used to report issues 
 * during the integrity check of the schema by the SchemaManager.
 * 
 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
 */
public enum LdapSchemaExceptionCodes
{
    // Codes for all Schema Objects

    /** Characterizing a SO with an OID being already registered */
    OID_ALREADY_REGISTERED,

    /** Characterizing a SO with a name being already registered */
    NAME_ALREADY_REGISTERED,

    /** Characterizing an SO with a nonexistent schema */
    NONEXISTENT_SCHEMA,

    // Codes for Attribute Type

    /** Characterizing an AT with a nonexistent superior */
    AT_NONEXISTENT_SUPERIOR,

    /** Characterizing an AT sub-typing a Collective AT  */
    AT_CANNOT_SUBTYPE_COLLECTIVE_AT,

    /** Characterizing an AT containing a cycle in its type hierarchy */
    AT_CYCLE_TYPE_HIERARCHY,

    /** Characterizing an AT with a nonexistent syntax */
    AT_NONEXISTENT_SYNTAX,

    /** Characterizing an AT has no syntax and no superior */
    AT_SYNTAX_OR_SUPERIOR_REQUIRED,

    /** Characterizing an AT with a nonexistent equality matching rule */
    AT_NONEXISTENT_EQUALITY_MATCHING_RULE,

    /** Characterizing an AT with a nonexistent ordering matching rule */
    AT_NONEXISTENT_ORDERING_MATCHING_RULE,

    /** Characterizing an AT with a nonexistent substring matching rule */
    AT_NONEXISTENT_SUBSTRING_MATCHING_RULE,

    /** Characterizing an AT which has a different usage than its superior */
    AT_MUST_HAVE_SAME_USAGE_THAN_SUPERIOR,

    /** Characterizing an AT which has a 'userApplications' usage but is not user modifiable */
    AT_USER_APPLICATIONS_USAGE_MUST_BE_USER_MODIFIABLE,

    /** Characterizing an AT which is collective but does not have a 'userApplications' usage */
    AT_COLLECTIVE_MUST_HAVE_USER_APPLICATIONS_USAGE,

    /** Characterizing an AT which is collective and is single-valued */
    AT_COLLECTIVE_CANNOT_BE_SINGLE_VALUED,

    // Codes for Object Class

    /** Characterizing an abstract OC which inherits from an OC not being abstract */
    OC_ABSTRACT_MUST_INHERIT_FROM_ABSTRACT_OC,

    /** Characterizing an auxiliary OC which inherits from a structural OC */
    OC_AUXILIARY_CANNOT_INHERIT_FROM_STRUCTURAL_OC,

    /** Characterizing a structural OC which inherits from an auxiliary OC */
    OC_STRUCTURAL_CANNOT_INHERIT_FROM_AUXILIARY_OC,

    /** Characterizing an OC with a nonexistent superior */
    OC_NONEXISTENT_SUPERIOR,

    /** Characterizing an OC containing a cycle in its class hierarchy */
    OC_CYCLE_CLASS_HIERARCHY,

    /** Characterizing an OC with a collective AT in its must ATs list */
    OC_COLLECTIVE_NOT_ALLOWED_IN_MUST,

    /** Characterizing an OC with a collective AT in its may ATs list */
    OC_COLLECTIVE_NOT_ALLOWED_IN_MAY,

    /** Characterizing an OC with a duplicated AT in its must ATs list */
    OC_DUPLICATE_AT_IN_MUST,

    /** Characterizing an OC with a duplicated AT in its may ATs list */
    OC_DUPLICATE_AT_IN_MAY,

    /** Characterizing an OC with a nonexistent AT in its must ATs list */
    OC_NONEXISTENT_MUST_AT,

    /** Characterizing an OC with a nonexistent AT in its may ATs list */
    OC_NONEXISTENT_MAY_AT,

    /** Characterizing an OC with a duplicated AT in its may and must ATs list */
    OC_DUPLICATE_AT_IN_MAY_AND_MUST,

    // Codes for Matching Rule

    /** Characterizing a MR with a nonexistent syntax */
    MR_NONEXISTENT_SYNTAX,
}
