view org.eclipse.equinox.common/src/org/eclipse/core/runtime/Status.d @ 105:bbe49769ec18

...
author Frank Benoit <benoit@tionex.de>
date Sun, 08 Nov 2009 12:42:30 +0100
parents 6f068362a363
children
line wrap: on
line source

/*******************************************************************************
 * 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 org.eclipse.core.runtimeStatus;

import java.lang.all;

import org.eclipse.core.runtimeAssert; // packageimport
import org.eclipse.core.runtimeIStatus; // packageimport

import org.eclipse.core.internal.runtime.IRuntimeConstants;
import org.eclipse.core.internal.runtime.LocalizationUtils;

/**
 * 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 final IStatus OK_STATUS = new Status(OK, IRuntimeConstants.PI_RUNTIME, OK, LocalizationUtils.safeLocalize("ok"), null); //$NON-NLS-1$
    /**
     * A standard CANCEL status with no message.
     * 
     * @since 3.0
     */
    public static final IStatus 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 Throwable exception = null;

    /** Constant to avoid generating garbage.
     */
    private static final IStatus[] theEmptyStatusArray = new IStatus[0];

    /**
     * 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, Throwable 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 org.eclipse.equinox.common 3.3
     */
    public this(int severity, String pluginId, String message, Throwable exception) {
        setSeverity(severity);
        setPlugin(pluginId);
        setMessage(message);
        setException(exception);
        setCodecast(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 org.eclipse.equinox.common 3.3
     */
    public this(int severity, String pluginId, String message) {
        setSeverity(severity);
        setPlugin(pluginId);
        setMessage(message);
        setCodecast(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 Throwable 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(Throwable 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() {
        StringBuffer buf = new StringBuffer();
        buf.append("Status "); //$NON-NLS-1$
        if (severity is OK) {
            buf.append("OK"); //$NON-NLS-1$
        } else if (severity is ERROR) {
            buf.append("ERROR"); //$NON-NLS-1$
        } else if (severity is WARNING) {
            buf.append("WARNING"); //$NON-NLS-1$
        } else if (severity is INFO) {
            buf.append("INFO"); //$NON-NLS-1$
        } else if (severity is CANCEL) {
            buf.append("CANCEL"); //$NON-NLS-1$
        } else {
            buf.append("severity="); //$NON-NLS-1$
            buf.append(severity);
        }
        buf.append(": "); //$NON-NLS-1$
        buf.append(pluginId);
        buf.append(" code="); //$NON-NLS-1$
        buf.append(code);
        buf.append(' ');
        buf.append(message);
        buf.append(' ');
        buf.append(exception);
        return buf.toString();
    }
}