blob: 6ebd56c1c228aee99f5bcfa07f42f659c964c6dd [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.common.serviceability;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.epf.common.plugin.AbstractPlugin;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
/**
* A message dialog used for displaying error, warning, confirmation or
* informational messages.
*
* @author Kelvin Low
* @since 1.0
*/
public class MsgDialog {
// The plug-in instance.
private AbstractPlugin plugin;
// The plug-in ID.
private String pluginId;
// The plug-in logger.
private Logger logger;
/**
* Create a new instance given the plug-in instance.
*
* @param plugin
* The plugin instance.
*/
public MsgDialog(AbstractPlugin plugin) {
this.plugin = plugin;
this.pluginId = plugin.getId();
this.logger = plugin.getLogger();
}
/**
* Displays the given error message in an error dialog without the error
* reason and Details button.
* <p>
* Note: The error message will be written to the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
*/
public void displayError(String title, String msg) {
display(IStatus.ERROR, title, msg, null, null, null);
}
/**
* Displays the given error message in an error dialog without the error
* reason and Details button.
* <p>
* Note: The error message and the exception stack trace will be written to
* the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param ex
* The exception associated with the error.
*/
public void displayError(String title, String msg, Throwable ex) {
display(IStatus.ERROR, title, msg, null, null, ex);
}
/**
* Displays the given error message in an error dialog without the Details
* button.
* <p>
* Note: The error message will be written to the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param reason
* The reason for the error.
*/
public void displayError(String title, String msg, String reason) {
display(IStatus.ERROR, title, msg, reason, null, null);
}
/**
* Displays the given error message in an error dialog without the Details
* button.
* <p>
* Note: The error message and the exception stack trace will be written to
* the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param reason
* The reason for the error.
* @param ex
* The exception associated with the error.
*/
public void displayError(String title, String msg, String reason,
Throwable ex) {
display(IStatus.ERROR, title, msg, reason, null, ex);
}
/**
* Displays the given error message in an error dialog. The Details button
* will be displayed if the <code>details</code> parameter it not null or
* empty.
* <p>
* Note: The error message will be written to the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param reason
* The reason for the error.
* @param details
* The error details.
*/
public void displayError(String title, String msg, String reason,
String details) {
display(IStatus.ERROR, title, msg, reason, details, null);
}
/**
* Displays the given error message in an error dialog. The Details button
* will be displayed if the <code>details</code> parameter it not null or
* empty.
* <p>
* Note: The error message and the exception stack trace will be written to
* the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param reason
* The reason for the error.
* @param details
* The error details.
* @param ex
* The exception associated with the error.
*/
public void displayError(String title, String msg, String reason,
String details, Throwable ex) {
display(IStatus.ERROR, title, msg, reason, details, ex);
}
/**
* Displays the given error status in an error dialog.
* <p>
* Note: The error message and the exception stack trace will be written to
* the log file.
*
* @param title
* The title for the error dialog.
* @param status
* The error status.
*/
public int displayError(String title, IStatus status) {
return display(title, null, status);
}
/**
* Displays the given error status in an error dialog.
* <p>
* Note: The error message and the exception stack trace will be written to
* the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param status
* The error status.
*/
public int displayError(String title, String msg, IStatus status) {
return display(title, msg, status);
}
/**
* Displays the given warning message in a warning dialog without the
* warning reason and Details button.
* <p>
* Note: The waning message will be written to the log file.
*
* @param title
* The title for the warning dialog.
* @param msg
* The warning message.
*/
public void displayWarning(String title, String msg) {
display(IStatus.WARNING, title, msg, null, null, null);
}
/**
* Displays the given warning message in a warning dialog without the
* warning reason and Details button.
* <p>
* Note: The warning message and the exception stack trace will be written
* to the log file.
*
* @param title
* The title for the warning dialog.
* @param msg
* The warning message.
* @param ex
* The exception associated with the warning.
*/
public void displayWarning(String title, String msg, Throwable ex) {
display(IStatus.WARNING, title, msg, null, null, ex);
}
/**
* Displays the given warning message in a warning dialog without the
* warning reason and Details button.
* <p>
* Note: The waning message will be written to the log file.
*
* @param title
* The title for the warning dialog.
* @param msg
* The warning message.
* @param reason
* The reason for the warning.
*/
public void displayWarning(String title, String msg, String reason) {
display(IStatus.WARNING, title, msg, reason, null, null);
}
/**
* Displays the given warning message in a warning dialog without the
* warning reason and Details button.
* <p>
* Note: The warning message and the exception stack trace will be written
* to the log file.
*
* @param title
* The title for the warning dialog.
* @param msg
* The warning message.
* @param reason
* The reason for the warning.
* @param ex
* The exception associated with the warning.
*/
public void displayWarning(String title, String msg, String reason,
Throwable ex) {
display(IStatus.WARNING, title, msg, reason, null, ex);
}
/**
* Displays the given warning message in a warning dialog. The Details
* button will be displayed if the <code>details</code> parameter it not
* null or empty.
* <p>
* Note: The waning message will be written to the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The warning message.
* @param reason
* The reason for the warning.
* @param details
* The warning details.
*/
public void displayWarning(String title, String msg, String reason,
String details) {
display(IStatus.WARNING, title, msg, reason, details, null);
}
/**
* Displays the given warning message in a warning dialog. The Details
* button will be displayed if the <code>details</code> parameter it not
* null or empty.
* <p>
* Note: The warning message and the exception stack trace will be written
* to the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The warning message.
* @param reason
* The reason for the warning.
* @param details
* The warning details.
* @param ex
* The exception associated with the warning.
*/
public void displayWarning(String title, String msg, String reason,
String details, Throwable ex) {
display(IStatus.WARNING, title, msg, reason, details, ex);
}
/**
* Displays the given warning status in an error dialog.
* <p>
* Note: The warning message and the exception stack trace will be written
* to the log file.
*
* @param title
* The title for the error dialog.
* @param status
* The error status.
*/
public void displayWarning(String title, IStatus status) {
display(title, null, status);
}
/**
* Displays the given warning status in an error dialog.
* <p>
* Note: The warning message and the exception stack trace will be written
* to the log file.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param status
* The error status.
*/
public void displayWarning(String title, String msg, IStatus status) {
display(title, msg, status);
}
/**
* Displays the given error or warning message in an error or warning
* dialog. The Details button will be displayed if the <code>details</code>
* parameter it not null or empty.
*
* @param severity
* The severity, either IStatus.ERROR or IStatus.WARNING.
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param reason
* The reason for the error.
* @param details
* The error details.
* @param ex
* The exception associated with the error.
*/
public synchronized void display(int severity, String title, String msg,
String reason, String details, Throwable ex) {
if (msg == null && ex != null) {
msg = ex.getMessage();
}
if (msg == null) {
msg = ""; //$NON-NLS-1$
}
if (severity == IStatus.ERROR || severity == IStatus.WARNING) {
logger.logMsg(severity, msg, ex);
} else {
throw new IllegalArgumentException(
"severity argument must be IStatus.ERROR or IStatus.WARNING"); //$NON-NLS-1$
}
Image oldImage = org.eclipse.jface.dialogs.ErrorDialog
.getDefaultImage();
Image shellImage = getShellImage();
if (shellImage != null) {
ErrorDialog.setDefaultImage(shellImage);
}
Shell shell = plugin.getWorkbench().getDisplay().getActiveShell();
if (details != null && details.length() > 0) {
MultiStatus mStatus = new MultiStatus(pluginId, IStatus.OK, reason,
ex);
Status status = new Status(severity, pluginId, IStatus.OK, details,
ex);
mStatus.add(status);
org.eclipse.jface.dialogs.ErrorDialog.openError(shell, title, msg,
mStatus);
} else if (reason != null && reason.length() > 0) {
Status status = new Status(severity, pluginId, IStatus.OK, reason,
ex);
org.eclipse.jface.dialogs.ErrorDialog.openError(shell, title, msg,
status);
} else {
if (severity == IStatus.ERROR) {
WrappedMessageDialog.openError(shell, title, msg);
} else if (severity == IStatus.WARNING) {
WrappedMessageDialog.openWarning(shell, title, msg);
}
}
if (shellImage != null) {
ErrorDialog.setDefaultImage(oldImage);
}
}
/**
* Displays the given error or warning message in an error or warning
* dialog. The Details button will be displayed if the <code>details</code>
* parameter it not null or empty.
*
* @param title
* The title for the error dialog.
* @param status
* The error status.
*/
public synchronized int display(String title, IStatus status) {
return display(title, null, status);
}
/**
* Displays the given error or warning message in an error or warning
* dialog. The Details button will be displayed if the <code>details</code>
* parameter it not null or empty.
*
* @param title
* The title for the error dialog.
* @param msg
* The error message.
* @param status
* The error status.
*/
public synchronized int display(String title, String msg, IStatus status) {
if (status == null) {
throw new IllegalArgumentException("status argument cannot be null"); //$NON-NLS-1$
}
if (msg == null) {
msg = status.getMessage();
}
if (msg == null) {
msg = ""; //$NON-NLS-1$
}
int severity = status.getSeverity();
if (severity == IStatus.ERROR || severity == IStatus.WARNING) {
logger.logMsg(severity, msg, status.getException());
}
Image oldImage = org.eclipse.jface.dialogs.ErrorDialog
.getDefaultImage();
Image shellImage = getShellImage();
if (shellImage != null) {
ErrorDialog.setDefaultImage(shellImage);
}
Shell shell = plugin.getWorkbench().getDisplay().getActiveShell();
int rc = org.eclipse.jface.dialogs.ErrorDialog.openError(shell, title,
msg, status);
if (shellImage != null) {
ErrorDialog.setDefaultImage(oldImage);
}
return rc;
}
/**
* Displays the given message in a informational dialog with an "OK" button.
*
* @param title
* The title for the information dialog.
* @param msg
* The message to display.
*/
public void displayInfo(String title, String msg) {
if (msg == null) {
msg = ""; //$NON-NLS-1$
}
Image oldImage = WrappedMessageDialog.getDefaultImage();
Image shellImage = getShellImage();
if (shellImage != null) {
WrappedMessageDialog.setDefaultImage(shellImage);
}
Shell shell = plugin.getWorkbench().getDisplay().getActiveShell();
WrappedMessageDialog.openInformation(shell, title, msg);
if (shellImage != null) {
WrappedMessageDialog.setDefaultImage(oldImage);
}
}
/**
* Displays the given message in a question dialog with a "Yes" and "No"
* button.
*
* @param title
* The title for the information dialog.
* @param msg
* The message to display.
*/
public boolean displayPrompt(String title, String msg) {
if (msg == null) {
msg = ""; //$NON-NLS-1$
}
Image oldImage = WrappedMessageDialog.getDefaultImage();
Image shellImage = getShellImage();
if (shellImage != null) {
WrappedMessageDialog.setDefaultImage(shellImage);
}
Shell shell = plugin.getWorkbench().getDisplay().getActiveShell();
boolean result = WrappedMessageDialog.openQuestion(shell, title, msg);
if (shellImage != null) {
WrappedMessageDialog.setDefaultImage(oldImage);
}
return result;
}
/**
* Displays the given message in a confirmation dialog with a "Yes" and
* "Cancel" button.
*
* @param title
* The title for the information dialog.
* @param msg
* The message to display.
*/
public boolean displayConfirmation(String title, String msg) {
if (msg == null) {
msg = ""; //$NON-NLS-1$
}
Image oldImage = WrappedMessageDialog.getDefaultImage();
Image shellImage = getShellImage();
if (shellImage != null) {
WrappedMessageDialog.setDefaultImage(shellImage);
}
Shell shell = plugin.getWorkbench().getDisplay().getActiveShell();
boolean result = WrappedMessageDialog.openConfirm(shell, title, msg);
if (shellImage != null) {
WrappedMessageDialog.setDefaultImage(oldImage);
}
return result;
}
public int displayConfirmation(String title, String msg, IStatus status) {
if (status == null) {
throw new IllegalArgumentException("status argument cannot be null"); //$NON-NLS-1$
}
if (msg == null) {
msg = status.getMessage();
}
if (msg == null) {
msg = ""; //$NON-NLS-1$
}
Image shellImage = getShellImage();
if (shellImage != null) {
ErrorDialogNoReason.setDefaultImage(shellImage);
}
Shell shell = plugin.getWorkbench().getDisplay().getActiveShell();
int rc = ErrorDialogNoReason.openError(shell, title, msg, status);
return rc;
}
/**
* Returns the image for the current shell.
*
* @return The current shell image.
*/
private Image getShellImage() {
IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench != null) {
IWorkbenchWindow workbenchWindow = workbench
.getActiveWorkbenchWindow();
if (workbenchWindow != null) {
Shell shell = workbenchWindow.getShell();
if (shell != null) {
return shell.getImage();
}
}
}
return null;
}
}