/*******************************************************************************
 * Copyright (c) 2008 Versant Corp.
 * 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:
 *     Markus Kuppe (mkuppe <at> versant <dot> com) - initial API and implementation
 ******************************************************************************/

package org.eclipse.ecf.core.util;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ecf.internal.core.identity.Activator;

/**
 * @since 3.0
 */
public class ECFRuntimeException extends RuntimeException {

	private static final long serialVersionUID = 456677468837349011L;
	/** Status object. */
	private IStatus status;

	public ECFRuntimeException() {
		super();
	}

	/**
	 * @param message
	 *            message associated with exception
	 */
	public ECFRuntimeException(String message) {
		this(message, null);
	}

	/**
	 * @param cause
	 *            the cause of the new exception
	 */
	public ECFRuntimeException(Throwable cause) {
		this(cause.getMessage(), cause);
	}

	/**
	 * @param message
	 * @param cause
	 */
	public ECFRuntimeException(String message, Throwable cause) {
		this(new Status(IStatus.ERROR, Activator.PLUGIN_ID, 0, ((message == null) ? "" : message), cause)); //$NON-NLS-1$
	}

	/**
	 * Creates a new exception with the given status object.  The message
	 * of the given status is used as the exception message.
	 *
	 * @param status the status object to be associated with this exception
	 */
	public ECFRuntimeException(IStatus status) {
		super(status.getMessage());
		this.status = status;
	}

	/**
	 * Returns the status object for this exception.
	 * <p>
	 *   <b>IMPORTANT:</b><br>
	 *   The result must NOT be used to log a <code>CoreException</code>
	 *   (e.g., using <code>yourPlugin.getLog().log(status);</code>),
	 *   since that code pattern hides the original stacktrace.
	 *   Instead, create a new {@link Status} with your plug-in ID and
	 *   this <code>CoreException</code>, and log that new status.
	 * </p>
	 *
	 * @return a status object
	 */
	public IStatus getStatus() {
		return status;
	}
}
