/**
* 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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;
/**
* @author Maxence Bernard
* @see UnsupportedFileOperationException
* @see AbstractFile
*/
public enum FileOperation {
/**
* Represents a 'read' operation, as specified by {@link AbstractFile#getInputStream()}.
*
* @see AbstractFile#getInputStream()
**/
READ_FILE,
/**
* Represents a 'random read' operation, as specified by {@link AbstractFile#getRandomAccessInputStream()}.
*
* @see AbstractFile#getRandomAccessInputStream()
**/
RANDOM_READ_FILE,
/**
* Represents a 'write' operation, as specified by {@link AbstractFile#getOutputStream()}.
*
* @see AbstractFile#getOutputStream()
**/
WRITE_FILE,
/**
* Represents an 'append' operation, as specified by {@link AbstractFile#getAppendOutputStream()}.
*
* @see AbstractFile#getAppendOutputStream()
**/
APPEND_FILE,
/**
* Represents a 'random write' operation, as specified by {@link AbstractFile#getRandomAccessOutputStream()}.
*
* @see AbstractFile#getRandomAccessOutputStream()
**/
RANDOM_WRITE_FILE,
/**
* Represents an 'mkdir' operation, as specified by {@link AbstractFile#mkdir()}.
*
* @see AbstractFile#mkdir()
**/
CREATE_DIRECTORY,
/**
* Represents an 'ls' operation, as specified by {@link AbstractFile#ls()}.
*
* @see AbstractFile#ls()
**/
LIST_CHILDREN,
/**
* Represents a 'delete' operation, as specified by {@link AbstractFile#delete()}.
*
* @see AbstractFile#delete()
**/
DELETE,
/**
* Represents a 'remove copy' operation, as specified by {@link AbstractFile#copyRemotelyTo(AbstractFile)}.
*/
COPY_REMOTELY,
/**
* Represents a 'rename' operation, as specified by {@link AbstractFile#renameTo(AbstractFile)}.
*/
RENAME,
/**
* Represents a 'change date' operation, as specified by {@link AbstractFile#changeDate(long)}.
*
* @see AbstractFile#changeDate(long)
**/
CHANGE_DATE,
/**
* Represents a 'change permission' operation, as specified by {@link AbstractFile#changePermission(int, int, boolean)}.
*/
CHANGE_PERMISSION,
/**
* Represents a 'get free space' operation, as specified by {@link AbstractFile#getFreeSpace()}.
*/
GET_FREE_SPACE,
/**
* Represents a 'get total space' operation, as specified by {@link AbstractFile#getTotalSpace()}.
*/
GET_TOTAL_SPACE;
private static final Logger LOGGER = LoggerFactory.getLogger(FileOperation.class);
/**
* Returns the {@link AbstractFile} method corresponding to this file operation.
*
* @param c the AbstractFile class for which to return a <code>Method</code> object.
* @return the {@link AbstractFile} method corresponding to this file operation.
*/
public Method getCorrespondingMethod(Class<? extends AbstractFile> c) {
try {
switch(this) {
case READ_FILE:
return c.getMethod("getInputStream");
case RANDOM_READ_FILE:
return c.getMethod("getRandomAccessInputStream");
case WRITE_FILE:
return c.getMethod("getOutputStream");
case APPEND_FILE:
return c.getMethod("getAppendOutputStream");
case RANDOM_WRITE_FILE:
return c.getMethod("getRandomAccessOutputStream");
case CREATE_DIRECTORY:
return c.getMethod("mkdir");
case LIST_CHILDREN:
return c.getMethod("ls");
case CHANGE_DATE:
return c.getMethod("changeDate", Long.TYPE);
case CHANGE_PERMISSION:
return c.getMethod("changePermission", PermissionAccess.class, PermissionType.class, Boolean.TYPE);
case DELETE:
return c.getMethod("delete");
case RENAME:
return c.getMethod("renameTo", AbstractFile.class);
case COPY_REMOTELY:
return c.getMethod("copyRemotelyTo", AbstractFile.class);
case GET_FREE_SPACE:
return c.getMethod("getFreeSpace");
case GET_TOTAL_SPACE:
return c.getMethod("getTotalSpace");
default:
// This should never be reached, unless method signatures have changed and this method hasn't been updated.
LOGGER.warn("this line should not have been executed");
return null;
}
}
catch(Exception e) {
// Should never happen, unless method signatures have changed and this method hasn't been updated.
LOGGER.warn("this line should not have been executed", e);
return null;
}
}
}