All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.landawn.abacus.util.LockMode Maven / Gradle / Ivy

Go to download

A general programming library in Java/Android. It's easy to learn and simple to use with concise and powerful APIs.

There is a newer version: 5.3.16
Show newest version
/*
 * Copyright (C) 2015 HaiYang Li
 *
 * Licensed 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 com.landawn.abacus.util;

/**
 * R --- Read; A --- Add; U --- Update; D --- Delete.
 *
 * @author Haiyang Li
 * @since 0.8
 */
public enum LockMode {
    /**
     * Others can't read by entity id (but can query by condition) if lock on this level.
     */
    R(1),
    /**
     * Others can't add(insert) if lock on this level.
     *
     * @deprecated not supported at present.
     */
    A(2),
    /**
     * Others can't modify(update) if lock on this level.
     */
    U(4),
    /**
     * Others can't delete if lock on this level.
     */
    D(8),
    /**
     * Others can't read by entity id (but can query by condition) and add(insert) if lock on this level.
     *
     * @deprecated not supported at present.
     */
    RA(R.intValue + A.intValue),
    /**
     * Others can't read by entity id (but can query by condition) and modify(update) if lock on this level.
     */
    RU(R.intValue + U.intValue),
    /**
     * Others can't read by entity id (but can query by condition) and delete if lock on this level.
     */
    RD(R.intValue + D.intValue),
    /**
     * Others can't add(insert) and modify(update) if lock on this level.
     *
     * @deprecated not supported at present.
     */
    AU(A.intValue + U.intValue),
    /**
     * Others can't add(insert) and delete if lock on this level.
     *
     * @deprecated not supported at present.
     */
    AD(A.intValue + D.intValue),
    /**
     * Others can't modify(update) and delete if lock on this level.
     */
    UD(U.intValue + D.intValue),
    /**
     * Others can't read by entity id (but can query by condition), add(insert) and modify(update) if lock on this
     * level.
     *
     * @deprecated not supported at present.
     */
    RAU(R.intValue + A.intValue + U.intValue),
    /**
     * Others can't read by entity id (but can query by condition), add(insert) and delete if lock on this level.
     *
     * @deprecated not supported at present.
     */
    RAD(R.intValue + A.intValue + D.intValue),
    /**
     * Others can't read by entity id (but can query by condition), modify(update) and delete if lock on this level.
     */
    RUD(R.intValue + U.intValue + D.intValue),
    /**
     * Others can't add(insert), modify(update) and delete if lock on this level.
     *
     * @deprecated not supported at present.
     */
    AUD(A.intValue + U.intValue + D.intValue),

    /**
     * Others read by entity id (but can query by condition), add(insert), modify(update) and delete if lock on this
     * level.
     *
     * @deprecated not supported at present.
     */
    RAUD(R.intValue + A.intValue + U.intValue + D.intValue);

    private final int intValue;

    /**
     *
     * @param value
     */
    LockMode(int value) {
        intValue = value;
    }

    /**
     *
     * @return int
     */
    public int intValue() {
        return intValue;
    }

    /**
     *
     * @param intValue
     * @return LockMode
     */
    public static LockMode valueOf(int intValue) {
        switch (intValue) {
            case 1:
                return R;

            case 2:
                return A;

            case 4:
                return U;

            case 8:
                return D;

            case 3:
                return RA;

            case 5:
                return RU;

            case 9:
                return RD;

            case 6:
                return AU;

            case 10:
                return AD;

            case 12:
                return UD;

            case 7:
                return RAU;

            case 11:
                return RAD;

            case 13:
                return RUD;

            case 14:
                return AUD;

            case 15:
                return RAUD;

            default:
                throw new IllegalArgumentException("Invalid lock mode value[" + intValue + "]. ");
        }
    }

    /**
     * Check if this {@code LockMode} is locked by the specified {@code byLockMode}.
     *
     * @param lockMode
     * @return boolean
     */
    public boolean isXLockOf(LockMode lockMode) {
        return (intValue & lockMode.intValue) > 0;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy