/*******************************************************************************
 * Copyright (c) 2007, 2008 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
 *******************************************************************************/
package org.eclipse.equinox.internal.provisional.p2.core;

import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.core.Activator;

/**
 * A checked exception indicating a recoverable error occurred while provisioning.
 * The status provides a further description of the problem.
 * <p>
 * This exception class is not intended to be subclassed by clients.
 * </p>
 */
public class ProvisionException extends CoreException {
	private static final long serialVersionUID = 1L;

	//General and core status codes [0-1000]
	/**
	 * Status code constant (value 1) for an uncategorized error.
	 */
	public static final int INTERNAL_ERROR = 1;

	//Repository status codes [1000-1999]
	//General repository codes [1000-1099]
	/** 
	 * Status code constant (value 1000) indicating a repository
	 * unexpectedly does not exist.
	 */
	public static final int REPOSITORY_NOT_FOUND = 1000;

	/** 
	 * Status code constant (value 1001) indicating a repository
	 * unexpectedly exists.
	 */
	public static final int REPOSITORY_EXISTS = 1001;

	/** 
	 * Status code constant (value 1002) indicating a repository
	 * could not be read
	 */
	public static final int REPOSITORY_FAILED_READ = 1002;

	/** 
	 * Status code constant (value 1003) indicating a failure occurred
	 * while writing to a repository.
	 */
	public static final int REPOSITORY_FAILED_WRITE = 1003;

	/** 
	 * Status code constant (value 1004) indicating a repository
	 * could not be written because it is a read-only repository.
	 */
	public static final int REPOSITORY_READ_ONLY = 1004;

	/** 
	 * Status code constant (value 1005) indicating an attempt was
	 * made to create or access a repository of unknown type.
	 */
	public static final int REPOSITORY_UNKNOWN_TYPE = 1005;
	/** 
	 * Status code constant (value 1006) indicating that a specified
	 * repository location is not valid.
	 */
	public static final int REPOSITORY_INVALID_LOCATION = 1006;

	//Metadata repository codes [1100-1199]

	//Artifact repository codes [1200-1299]

	/** 
	 * Status code constant (value 1200) indicating an artifact unexpectedly
	 * does not exist.
	 */
	public static final int ARTIFACT_NOT_FOUND = 1200;

	/** 
	 * Status code constant (value 1201) indicating an artifact unexpectedly
	 * already exists.
	 */
	public static final int ARTIFACT_EXISTS = 1201;

	/**
	 * 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 ProvisionException(IStatus status) {
		super(status);
	}

	/**
	 * Creates a new exception with the given message and a severity of 
	 * {@link IStatus#ERROR}.
	 *
	 * @param message The human-readable problem message
	 */
	public ProvisionException(String message) {
		super(new Status(IStatus.ERROR, Activator.ID, message));
	}

	/**
	 * Creates a new exception with the given message and cause, and
	 * a severity of {@link IStatus#ERROR}.
	 *
	 * @param message The human-readable problem message
	 * @param cause The underlying cause of the exception
	 */
	public ProvisionException(String message, Throwable cause) {
		super(new Status(IStatus.ERROR, Activator.ID, message, cause));
	}

}
