/*
 *   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.fortress.core.example;

public class EErrIds
{
    public static final int EXAMPLE_SEARCH_FAILED = 19000;
    public static final int EXAMPLE_READ_FAILED = 19001;
    public static final int EXAMPLE_ADD_FAILED = 19002;
    public static final int EXAMPLE_UPDATE_FAILED = 19003;
    public static final int EXAMPLE_DELETE_FAILED = 19004;
    public static final int EXAMPLE_NOT_UNIQUE = 19006;
    public static final int EXAMPLE_INVLD_LEN = 19007;
    public static final int EXAMPLE_NOT_FOUND = 19008;
    public static final int EXAMPLE_ID_NULL = 19009;
    public static final int EXAMPLE_ID_DUPLICATE = 19010;
    public static final int EXAMPLE_NULL = 19011;
}

