/* * 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 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.desktop; import com.mucommander.commons.file.AbstractFile; /** * AbstractTrash is an abstract representation of a file trash, i.e. a temporary place where deleted files are stored * before the trash is emptied. A trash implementation provides methods to access basic trash operations: move files * to the trash, empty the trash, ... * * <p>Since AbstractTrash implementations are system-dependent, they should not be instantiated directly. * Use {@link DesktopManager#getTrash()} to retrieve an instance of a trash implementation that can * be used on the current platform.<br> * Also, some AbstractTrash subclasses may not be able to provide working implementations for all trash operations; * probe methods are provided to find out if a particular operation is available.</p> * * @see TrashProvider * @see DesktopManager#getTrash() * @author Maxence Bernard */ public abstract class AbstractTrash { /** * Returns <code>true</code> if the specified file is eligible for being moved to the trash. This doesn't mean that * a call to {@link #moveToTrash(com.mucommander.commons.file.AbstractFile)} will necessarily succeed, but it should at least ensure that basic * prerequisites are met. * * @param file the file to test * @return true if the given file can be moved to the trash */ public abstract boolean canMoveToTrash(AbstractFile file); /** * Attempts to move the given file to the trash and returns <code>true</code> if the file could be moved successfully. * * @param file the file to move to the trash * @return true if the file could successfully be moved to the trash */ public abstract boolean moveToTrash(AbstractFile file); /** * Returns <code>true</code> if this trash can be emptied. * * @return true if the trash can be emptied. */ public abstract boolean canEmpty(); /** * Attempts to empty this trash and returns <code>true</code> if it was successfully emptied. * * @return true if the trash was successfully emptied */ public abstract boolean empty(); /** * Returns <code>true</code> if the given file is a trash folder, or one of its children. * For example, if <code>/home/someuser/.Trash</code> is a trash folder, calling this method with: * <ul> * <li><code>/home/someuser/.Trash</code> will return <code>true</code> * <li><code>/home/someuser/.Trash/somefolder/somefile</code> will return <code>true</code> * <li><code>/home/someuser/Desktop</code> will return <code>false</code> * </ul> * * <p>Note that this method does not check the existence of the given file, the test is solely based on the * file's path. * * @param file the file to test * @return true if the given file is a trash folder, or one of its children. */ public abstract boolean isTrashFile(AbstractFile file); /** * Returns the number of items that currently are in this trash, <code>-1</code> if this information is not available. * * @return the number of items that currently are in this trash, <code>-1</code> if this information is not available */ public abstract int getItemCount(); /** * Opens the trash in the default file manager of the current OS/Desktop manager. */ public abstract void open(); /** * Returns <code>true</code> if this trash can be opened in the default file manager of the current OS/Desktop manager * by calling {@link #open()}. * * @return true if this trash can be opened in the default file manager of the current OS/Desktop manager. */ public abstract boolean canOpen(); /** * Waits (locks the caller thread) until all pending trash operations are completed. * This method can be useful since some <code>AbstractTrash</code> implementations are asynchroneous, i.e. perform * operations in separate threads. */ public abstract void waitForPendingOperations(); }