/** * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * muCommander is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.commons.file; /** * This interface provides methods to access file permissions, for every combination of types and accesses defined * in {@link com.mucommander.commons.file.PermissionType} and {@link com.mucommander.commons.file.PermissionAccess} respectively. * This interface also defines constants for commonly used permission values. * * <p>Permission bits can be queried individually using {@link #getBitValue(int, int)} or be represented altogether * as a UNIX-style permission int, using {@link #getIntValue()}.</p> * * <p>Two implementations of this interface are provided: * <ul> * <li>{@link com.mucommander.commons.file.GroupedPermissionBits} (full implementation): implements this interface using a * given permission int.</li> * <li>{@link com.mucommander.commons.file.IndividualPermissionBits} (partial implementation): implements the * <code>getIntValue()</code> method by relying on <code>getBitValue()</code> and querying it sequentially for every * permission bit.</li> * </ul> * </p> * * @see com.mucommander.commons.file.GroupedPermissionBits * @see com.mucommander.commons.file.IndividualPermissionBits * @author Maxence Bernard */ public interface PermissionBits { /** read/write/execute permissions set for user/group/other (777 octal) */ public int FULL_PERMISSION_INT = 511; /** read/write/execute permissions set for user/group/other (777 octal) */ public PermissionBits FULL_PERMISSION_BITS = new GroupedPermissionBits(FULL_PERMISSION_INT); /** read/write/execute permissions cleared for user/group/other (0) */ public int EMPTY_PERMISSION_INT = 0; /** read/write/execute permissions cleared for user/group/other (0) */ public PermissionBits EMPTY_PERMISSION_BITS = new GroupedPermissionBits(EMPTY_PERMISSION_INT); ////////////////////// // Abstract methods // ////////////////////// /** * Returns the value of all the permission bits (9 in total) in a UNIX-style permission int. Each of the permission * bits can be isolated by comparing them against the values defined in {@link com.mucommander.commons.file.PermissionType} * and {@link com.mucommander.commons.file.PermissionAccess}. * * @return the value of all the permission bits (9 in total) in a UNIX-style permission int */ int getIntValue(); /** * Returns the value of a specific permission bit: <code>true</code> if the permission is set, <code>false</code> * if it isn't. * * @param access one of the values defined in {@link com.mucommander.commons.file.PermissionAccess} * @param type permission type * @return <code>true</code> if the permission is set, <code>false</code> if it isn't */ boolean getBitValue(PermissionAccess access, PermissionType type); }