Mercurial > projects > dwt-addons
diff dwtx/core/runtime/Status.d @ 3:6518c18a01f7
eclipse.core package without osgi dependencies
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 26 Mar 2008 00:57:19 +0100 |
parents | |
children | ea8ff534f622 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtx/core/runtime/Status.d Wed Mar 26 00:57:19 2008 +0100 @@ -0,0 +1,282 @@ +/******************************************************************************* + * Copyright (c) 2000, 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 API and implementation + * Port to the D programming language: + * Frank Benoit <benoit@tionex.de> + *******************************************************************************/ +module dwtx.core.runtime.Status; + +import dwtx.core.internal.runtime.IRuntimeConstants; +import dwtx.core.internal.runtime.LocalizationUtils; +import dwtx.core.runtime.IStatus; +import dwtx.core.runtime.Assert; + +import dwt.dwthelper.utils; +import tango.text.convert.Format; + +/** + * A concrete status implementation, suitable either for + * instantiating or subclassing. + * <p> + * This class can be used without OSGi running. + * </p> + */ +public class Status : IStatus { + + /** + * A standard OK status with an "ok" message. + * + * @since 3.0 + */ + public static const IStatus OK_STATUS; + /** + * A standard CANCEL status with no message. + * + * @since 3.0 + */ + public static const IStatus CANCEL_STATUS; + + static this(){ + OK_STATUS = new Status(OK, IRuntimeConstants.PI_RUNTIME, OK, LocalizationUtils.safeLocalize("ok"), null); //$NON-NLS-1$ + CANCEL_STATUS = new Status(CANCEL, IRuntimeConstants.PI_RUNTIME, 1, "", null); //$NON-NLS-1$ + } + + /** + * The severity. One of + * <ul> + * <li><code>CANCEL</code></li> + * <li><code>ERROR</code></li> + * <li><code>WARNING</code></li> + * <li><code>INFO</code></li> + * <li>or <code>OK</code> (0)</li> + * </ul> + */ + private int severity = OK; + + /** Unique identifier of plug-in. + */ + private String pluginId; + + /** Plug-in-specific status code. + */ + private int code; + + /** Message, localized to the current locale. + */ + private String message; + + /** Wrapped exception, or <code>null</code> if none. + */ + private Exception exception = null; + + /** Constant to avoid generating garbage. + */ + private static const IStatus[] theEmptyStatusArray = null; + + /** + * Creates a new status object. The created status has no children. + * + * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, + * <code>INFO</code>, <code>WARNING</code>, or <code>CANCEL</code> + * @param pluginId the unique identifier of the relevant plug-in + * @param code the plug-in-specific status code, or <code>OK</code> + * @param message a human-readable message, localized to the + * current locale + * @param exception a low-level exception, or <code>null</code> if not + * applicable + */ + public this(int severity, String pluginId, int code, String message, Exception exception) { + setSeverity(severity); + setPlugin(pluginId); + setCode(code); + setMessage(message); + setException(exception); + } + + /** + * Simplified constructor of a new status object; assumes that code is <code>OK</code>. + * The created status has no children. + * + * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, + * <code>INFO</code>, <code>WARNING</code>, or <code>CANCEL</code> + * @param pluginId the unique identifier of the relevant plug-in + * @param message a human-readable message, localized to the + * current locale + * @param exception a low-level exception, or <code>null</code> if not + * applicable + * + * @since dwtx.equinox.common 3.3 + */ + public this(int severity, String pluginId, String message, Exception exception) { + setSeverity(severity); + setPlugin(pluginId); + setMessage(message); + setException(exception); + setCode(OK); + } + + /** + * Simplified constructor of a new status object; assumes that code is <code>OK</code> and + * exception is <code>null</code>. The created status has no children. + * + * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, + * <code>INFO</code>, <code>WARNING</code>, or <code>CANCEL</code> + * @param pluginId the unique identifier of the relevant plug-in + * @param message a human-readable message, localized to the + * current locale + * + * @since dwtx.equinox.common 3.3 + */ + public this(int severity, String pluginId, String message) { + setSeverity(severity); + setPlugin(pluginId); + setMessage(message); + setCode(OK); + setException(null); + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public IStatus[] getChildren() { + return theEmptyStatusArray; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public int getCode() { + return code; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public Exception getException() { + return exception; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public String getMessage() { + return message; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public String getPlugin() { + return pluginId; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public int getSeverity() { + return severity; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public bool isMultiStatus() { + return false; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public bool isOK() { + return severity is OK; + } + + /* (Intentionally not javadoc'd) + * Implements the corresponding method on <code>IStatus</code>. + */ + public bool matches(int severityMask) { + return (severity & severityMask) !is 0; + } + + /** + * Sets the status code. + * + * @param code the plug-in-specific status code, or <code>OK</code> + */ + protected void setCode(int code) { + this.code = code; + } + + /** + * Sets the exception. + * + * @param exception a low-level exception, or <code>null</code> if not + * applicable + */ + protected void setException(Exception exception) { + this.exception = exception; + } + + /** + * Sets the message. If null is passed, message is set to an empty + * string. + * + * @param message a human-readable message, localized to the + * current locale + */ + protected void setMessage(String message) { + if (message is null) + this.message = ""; //$NON-NLS-1$ + else + this.message = message; + } + + /** + * Sets the plug-in id. + * + * @param pluginId the unique identifier of the relevant plug-in + */ + protected void setPlugin(String pluginId) { + Assert.isLegal(pluginId !is null && pluginId.length > 0); + this.pluginId = pluginId; + } + + /** + * Sets the severity. + * + * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, + * <code>INFO</code>, <code>WARNING</code>, or <code>CANCEL</code> + */ + protected void setSeverity(int severity) { + Assert.isLegal(severity is OK || severity is ERROR || severity is WARNING || severity is INFO || severity is CANCEL); + this.severity = severity; + } + + /** + * Returns a string representation of the status, suitable + * for debugging purposes only. + */ + public String toString() { + String sev; + if (severity is OK) { + sev="OK"; //$NON-NLS-1$ + } else if (severity is ERROR) { + sev="ERROR"; //$NON-NLS-1$ + } else if (severity is WARNING) { + sev="WARNING"; //$NON-NLS-1$ + } else if (severity is INFO) { + sev="INFO"; //$NON-NLS-1$ + } else if (severity is CANCEL) { + sev="CANCEL"; //$NON-NLS-1$ + } else { + sev=Format( "severity={}", severity); + } + return Format("Status {}: {} code={} {} {}", sev, pluginId, code, message, exception.toString ); + } +}