/**
 * DRIVER project 2006-2007
 * 
 * file		:	A2Error.java
 * package	: 	eu.dnetlib.enabling.aas.rmi
 * project	:	driver-aa
 * created	:	2006-09-04
 * author	:	jarwyp
 */
package eu.dnetlib.enabling.aas.rmi;

import java.io.Serializable;

/**
 * Response error abstraction.
 * FIXME currently doesn't extend Throwable because of the JAXB issue.
 * 
 * @author jarwyp
 *
 */
public class A2Error extends Throwable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1232760211022427031L;
	
	public final static String UNKNOWN_ERROR="UnknownError";
	public final static String CONTEXT_ID_INVALID="ContextIdInvalid";
	public final static String CONTEXT_ID_UNKNOWN="ContextIdUnknown";
	public final static String CONTEXT_ID_NOT_PROVIDED="ContextIdNotProvided";
	public final static String PROFILE_ID_UNKNOWN="ProfileIdUknown";
	public final static String PROFILE_ID_NOT_PROVIDED="ProfileIdNotProvided";
	public final static String REQUEST_PARAMS_ERROR="RequestParamsError";
	public final static String PROFILE_EXISTS="ProfileExists";
	public final static String PROFILE_NOT_EXISTS="ProfileNotExists";
	public final static String SYSTEM_ERROR="SystemError";
	public final static String PASSWORD_NOT_PRESENT="PasswordNotPresent";
	
	public final static String EVALUATION_ERROR="EvaluationError";
	
	public final static String DECISION_INDETERMINATE="DecisionIndeterminate";
	public final static String DECISION_NOT_APPLICABLE="DecisionNotApplicable";
	
	public final static String DECISION_NOT_AUTHENTICATED="DecisionNotAuthenticated";
	
	private String msg;
//	private Throwable throwable;
	private String errorId=UNKNOWN_ERROR;
	
	/**
	 * Default constructor.
	 */
	public A2Error(){
		
	}
	
	public A2Error(String id){
		this.errorId=id;
	}
	
	public A2Error(String id, String msg){
		this.msg=msg;
		this.errorId=id;
	}
	
	public A2Error(String id, Throwable throwable){
		super(throwable);
		this.errorId=id;
	}
	
	public A2Error(String id, String msg, Throwable throwable){
		super(throwable);
		this.msg=msg;
		this.errorId=id;
	}

	/* (non-Javadoc)
	 * @see java.lang.Throwable#getStackTrace()
	 */
//	@Override
//	@XmlTransient
//	public StackTraceElement[] getStackTrace() {
////		has to be declared as transient because JAXB cannot handle classes without no-arg default constructor
////		TODO this means stack trace will not be sent
//		return super.getStackTrace();
//	}

	/* (non-Javadoc)
	 * @see java.lang.Throwable#setStackTrace(java.lang.StackTraceElement[])
	 */
//	@Override
////	@XmlTransient
//	public void setStackTrace(StackTraceElement[] arg0) {
////		has to be declared as transient because JAXB cannot handle classes without no-arg default constructor
////		TODO this means stack trace will not be sent
//		super.setStackTrace(arg0);
//	}
	
	/**
	 * Returns error Id.
	 * @return error message
	 */
	public String getErrorId() {
		return errorId;
	}

	/**
	 * Returns error message.
	 * @return error message
	 */
	public String getMsg() {
		return msg;
	}

	/**
	 * Sets error message.
	 * @param msg
	 */
	public void setMsg(String msg) {
		this.msg = msg;
	}

	/**
	 * Sets error identifier.
	 * @param errorId
	 */
	public void setErrorId(String errorId) {
		this.errorId = errorId;
	}

	/**
	 * Returns throwable for error.
	 * @return throwable
	 */
//	public Throwable getThrowable() {
//		return throwable;
//	}

	/**
	 * Sets throwable for error.
	 * @param throwable
	 */
//	public void setThrowable(Throwable throwable) {
//		this.throwable = throwable;
//	}

}
