package org.limewire.core.api.download; import java.io.File; import java.io.IOException; /** * IOException which can be thrown from when setting the save location on a * downloader. */ public class DownloadException extends IOException { public static enum ErrorCode { /** * Attempt to change save location that violates security rules, such as * attempting directory traversal . */ SECURITY_VIOLATION, /** Attempt to change save location too late to save file in new place. */ FILE_ALREADY_SAVED, /** * Attempt to change save location to a directory where files cannot be * created. */ DIRECTORY_NOT_WRITEABLE, /** Attempt to change save location to a non-existent directory. */ DIRECTORY_DOES_NOT_EXIST, /** Attempt to change save location to a File that already exists. */ FILE_ALREADY_EXISTS, /** * Attempt to change save location to a file which is already reserved * by another download. */ FILE_IS_ALREADY_DOWNLOADED_TO, /** * Attempt to change save location to a pre-existing file that isn't a * regular file (such as a directory or device file). */ FILE_NOT_REGULAR, /** * Attempt to change save directory to a "directory" that exists, but is * not a directory. */ NOT_A_DIRECTORY, /** IOException or other file system error while setting save location. */ FILESYSTEM_ERROR, /** * Attempt to download the exact same file (urn, filename, size) while * it is already being downloaded. */ FILE_ALREADY_DOWNLOADING, /** * Thrown when the directory to save in already exceeds the maximum path * name on the OS. */ PATH_NAME_TOO_LONG, /** * Thrown when trying to open a torrent file that is too large. */ TORRENT_FILE_TOO_LARGE, /** * Throw when trying to register a torrent if the torrent manager * is not loaded. */ NO_TORRENT_MANAGER, /** * Throw when trying to start a new download before resume downloaders have finished running. */ FILES_STILL_RESUMING, /** * Thrown when trying to escape the add download logic because the user cancelled the download. */ DOWNLOAD_CANCELLED, /** * Thrown when the user tries to download an already uploading torrent file. */ FILE_ALREADY_UPLOADING } /** * The error code of this exception. */ private final ErrorCode errorCode; /** * Handle to the file that caused the exception. */ private final File file; /** * Constructs a DownloadException with the specified cause and file. */ public DownloadException(IOException cause, File file) { super(cause); this.errorCode = ErrorCode.FILESYSTEM_ERROR; this.file = file; } public DownloadException(ErrorCode errorCode, File file) { super("error code " + errorCode + ", file " + file); this.errorCode = errorCode; this.file = file; } /** * Constructs a DownloadException for the specified error code. * * @param message optional more detailed message for debugging purposes */ public DownloadException(ErrorCode errorCode, File file, String message) { super(message); this.errorCode = errorCode; this.file = file; } /** * Returns the error code of this exception. * * @return */ public ErrorCode getErrorCode() { return errorCode; } public File getFile() { return file; } }