/*-
* Copyright (C) 2008 Erik Larsson
*
* This program 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.
*
* This program 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 org.catacombae.hfsexplorer;
import java.io.File;
import java.util.LinkedList;
import org.catacombae.hfs.ProgressMonitor;
/**
* @author <a href="http://www.catacombae.org/" target="_top">Erik Larsson</a>
*/
public interface ExtractProgressMonitor extends ProgressMonitor {
public void updateCalculateDir(String dirname);
public void updateTotalProgress(double fraction, String message);
public void updateCurrentDir(String dirname);
public void updateCurrentFile(String filename, long fileSize);
public void setDataSize(long totalSize);
//public boolean confirmOverwriteDirectory(File dir);
//public boolean confirmSkipDirectory(String... messageLines);
public CreateDirectoryFailedAction createDirectoryFailed(String dirname, File parentDirectory);
public CreateFileFailedAction createFileFailed(String filename, File parentDirectory);
public DirectoryExistsAction directoryExists(File directory);
public FileExistsAction fileExists(File file);
public UnhandledExceptionAction unhandledException(String filename,
Throwable t);
public String displayRenamePrompt(String currentName, File outDir);
public ExtractProperties getExtractProperties();
public static interface ExtractPropertiesListener {
public void propertyChanged(Object changedProperty);
}
public static class ExtractProperties {
private final LinkedList<ExtractPropertiesListener> listeners =
new LinkedList<ExtractPropertiesListener>();
private volatile CreateDirectoryFailedAction createDirAction = CreateDirectoryFailedAction.PROMPT_USER;
private volatile CreateFileFailedAction createFileAction = CreateFileFailedAction.PROMPT_USER;
private volatile DirectoryExistsAction dirExistsAction = DirectoryExistsAction.PROMPT_USER;
private volatile FileExistsAction fileExistsAction = FileExistsAction.PROMPT_USER;
private volatile UnhandledExceptionAction unhandledExceptionAction =
UnhandledExceptionAction.PROMPT_USER;
public CreateDirectoryFailedAction getCreateDirectoryFailedAction() {
return createDirAction;
}
public CreateFileFailedAction getCreateFileFailedAction() {
return createFileAction;
}
public DirectoryExistsAction getDirectoryExistsAction() {
return dirExistsAction;
}
public FileExistsAction getFileExistsAction() {
return fileExistsAction;
}
public UnhandledExceptionAction getUnhandledExceptionAction() {
return unhandledExceptionAction;
}
public void setCreateDirectoryFailedAction(CreateDirectoryFailedAction action) {
createDirAction = action;
notifyListeners(action);
}
public void setCreateFileFailedAction(CreateFileFailedAction action) {
createFileAction = action;
notifyListeners(action);
}
public void setDirectoryExistsAction(DirectoryExistsAction action) {
dirExistsAction = action;
notifyListeners(action);
}
public void setFileExistsAction(FileExistsAction action) {
fileExistsAction = action;
notifyListeners(action);
}
public void setUnhandledExceptionAction(UnhandledExceptionAction action)
{
unhandledExceptionAction = action;
notifyListeners(action);
}
public void addListener(ExtractPropertiesListener listener) {
listeners.addLast(listener);
}
private void notifyListeners(Object changedProperty) {
for(ExtractPropertiesListener listener : listeners) {
try {
listener.propertyChanged(changedProperty);
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
public static enum CreateDirectoryFailedAction { PROMPT_USER, SKIP_DIRECTORY, RENAME, AUTO_RENAME, CANCEL }
public static enum CreateFileFailedAction { PROMPT_USER, SKIP_FILE, SKIP_DIRECTORY, RENAME, AUTO_RENAME, CANCEL }
public static enum DirectoryExistsAction {
PROMPT_USER,
CONTINUE,
ALWAYS_CONTINUE,
SKIP_DIRECTORY,
RENAME,
AUTO_RENAME,
CANCEL,
}
public static enum FileExistsAction { PROMPT_USER, SKIP_FILE, SKIP_DIRECTORY, OVERWRITE, OVERWRITE_ALL, RENAME, AUTO_RENAME, CANCEL }
public static enum UnhandledExceptionAction {
PROMPT_USER,
CONTINUE,
ALWAYS_CONTINUE,
ABORT,
}
}