/*
 * Copyright (C) 2005 Alfresco, Inc.
 *
 * Licensed under the Mozilla Public License version 1.1 
 * with a permitted attribution clause. You may obtain a
 * copy of the License at
 *
 *   http://www.alfresco.org/legal/license.txt
 *
 * 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.alfresco.filesys.smb;

/**
 * LockingAndX SMB Constants Class
 */
public class LockingAndX
{

    // Lock type flags

    public static final int SharedLock =    0x0001;
    public static final int OplockBreak =   0x0002;
    public static final int ChangeType =    0x0004;
    public static final int Cancel =        0x0008;
    public static final int LargeFiles =    0x0010;

    /**
     * Check if this is a normal lock/unlock, ie. no flags except the LargeFiles flag may be set
     * 
     * @param flags
     * @return boolean
     */
    public final static boolean isNormalLockUnlock(int flags)
    {
        return (flags & 0x000F) == 0 ? true : false;
    }

    /**
     * Check if the large files flag is set
     * 
     * @param flags int
     * @return boolean
     */
    public final static boolean hasLargeFiles(int flags)
    {
        return (flags & LargeFiles) != 0 ? true : false;
    }

    /**
     * Check if the shared lock flag is set
     * 
     * @param flags int
     * @return boolean
     */
    public final static boolean hasSharedLock(int flags)
    {
        return (flags & SharedLock) != 0 ? true : false;
    }

    /**
     * Check if the oplock break flag is set
     * 
     * @param flags int
     * @return boolean
     */
    public final static boolean hasOplockBreak(int flags)
    {
        return (flags & OplockBreak) != 0 ? true : false;
    }

    /**
     * Check if the change type flag is set
     * 
     * @param flags int
     * @return boolean
     */
    public final static boolean hasChangeType(int flags)
    {
        return (flags & ChangeType) != 0 ? true : false;
    }

    /**
     * Check if the cancel flag is set
     * 
     * @param flags int
     * @return boolean
     */
    public final static boolean hasCancel(int flags)
    {
        return (flags & Cancel) != 0 ? true : false;
    }
}
