package com.limegroup.gnutella.gui.util;
import java.text.MessageFormat;
import com.limegroup.gnutella.SaveLocationException;
import com.limegroup.gnutella.gui.GUIMediator;
/**
* Static helper class that handles exceptions from the core by creating
* localized error messages and presenting those to the user via
* {@link MessageService}.
*/
public class CoreExceptionHandler {
/**
* Handles {@link SaveLocationException} by presenting an error dialog to
* the user.
* @param sle the exception to handle
* @throws IllegalArgumentException if the error code is not handled
*/
public static void handleSaveLocationError(SaveLocationException sle) {
GUIMediator.showTranslatedError(getSaveLocationErrorString(sle));
}
/**
* Returs a localized string summing up the details of the exception
* depending on its error code.
*/
public static String getShortSaveLocationErrorString(SaveLocationException sle) {
switch (sle.getErrorCode()) {
case SaveLocationException.SECURITY_VIOLATION:
return GUIMediator.getStringResource
("SAVE_LOCATION_SECURITY_VIOLATION_SHORT_ERROR");
case SaveLocationException.FILE_ALREADY_SAVED:
return GUIMediator.getStringResource
("SAVE_LOCATION_ALREADY_SAVED_SHORT_ERROR");
case SaveLocationException.DIRECTORY_NOT_WRITEABLE:
return GUIMediator.getStringResource
("SAVE_LOCATION_DIRECTORY_NOT_WRITEABLE_SHORT_ERROR");
case SaveLocationException.DIRECTORY_DOES_NOT_EXIST:
return GUIMediator.getStringResource
("SAVE_LOCATION_DIRECTORY_DOES_NOT_EXIST_SHORT_ERROR");
case SaveLocationException.FILE_ALREADY_EXISTS:
return GUIMediator.getStringResource
("SAVE_LOCATION_ALREADY_EXISTS_SHORT_ERROR");
case SaveLocationException.FILE_IS_ALREADY_DOWNLOADED_TO:
return GUIMediator.getStringResource
("SAVE_LOCATION_IS_ALREADY_DOWNLOADED_TO_SHORT_ERROR");
case SaveLocationException.NOT_A_DIRECTORY:
return GUIMediator.getStringResource
("SAVE_LOCATION_NOT_A_DIRECOTRY_SHORT_ERROR");
case SaveLocationException.FILE_NOT_REGULAR:
return GUIMediator.getStringResource
("SAVE_LOCATION_FILE_NOT_REGULAR_SHORT_ERROR");
case SaveLocationException.FILESYSTEM_ERROR:
return GUIMediator.getStringResource
("SAVE_LOCATION_FILESYSTEM_SHORT_ERROR");
case SaveLocationException.FILE_ALREADY_DOWNLOADING:
return GUIMediator.getStringResource
("SAVE_LOCATION_ALREADY_DOWNLOADING_SHORT_ERROR");
default:
throw new IllegalArgumentException("Unhandled error code: "
+ sle.getErrorCode());
}
}
/**
* Returns a localized string that explains in detail the exception
* depending on its error code.
*/
public static String getSaveLocationErrorString(SaveLocationException sle) {
switch (sle.getErrorCode()) {
case SaveLocationException.SECURITY_VIOLATION:
return MessageFormat.format
(GUIMediator.getStringResource("SAVE_LOCATION_SECURITY_VIOLATION_ERROR"),
new Object[] { sle.getFile() });
case SaveLocationException.FILE_ALREADY_SAVED:
return GUIMediator.getStringResource("SAVE_LOCATION_ALREADY_SAVED_ERROR");
case SaveLocationException.DIRECTORY_NOT_WRITEABLE:
return MessageFormat.format
(GUIMediator.getStringResource("SAVE_LOCATION_DIRECTORY_NOT_WRITEABLE_ERROR"),
new Object[] { sle.getFile() });
case SaveLocationException.DIRECTORY_DOES_NOT_EXIST:
return MessageFormat.format
(GUIMediator.getStringResource("SAVE_LOCATION_DIRECTORY_DOES_NOT_EXIST_ERROR"),
new Object[] { sle.getFile() });
case SaveLocationException.FILE_ALREADY_EXISTS:
return MessageFormat.format
(GUIMediator.getStringResource("SAVE_LOCATION_ALREADY_EXISTS_ERROR"),
new Object[] { sle.getFile() });
case SaveLocationException.FILE_IS_ALREADY_DOWNLOADED_TO:
return MessageFormat.format
(GUIMediator.getStringResource("SAVE_LOCATION_IS_ALREADY_DOWNLOADED_TO_ERROR"),
new Object[] { sle.getFile() });
case SaveLocationException.NOT_A_DIRECTORY:
return MessageFormat.format
(GUIMediator.getStringResource("SAVE_LOCATION_NOT_A_DIRECOTRY_ERROR"),
new Object[] { sle.getFile() });
case SaveLocationException.FILE_NOT_REGULAR:
return MessageFormat.format
(GUIMediator.getStringResource("SAVE_LOCATION_FILE_NOT_REGULAR_ERROR"),
new Object[] { sle.getFile() });
case SaveLocationException.FILESYSTEM_ERROR:
return GUIMediator.getStringResource("SAVE_LOCATION_FILESYSTEM_ERROR");
case SaveLocationException.FILE_ALREADY_DOWNLOADING:
return GUIMediator.getStringResource("SAVE_LOCATION_ALREADY_DOWNLOADING_ERROR");
default:
throw new IllegalArgumentException("Unhandled error code: "
+ sle.getErrorCode());
}
}
}