// Copyright 1997 The Open Group Research Institute.  All rights reserved.

package krb5.lib;

/**
 * Defines Kerberos Exception
 */
public class KrbException extends Exception {
    
    /**
	 * Return code
	 */
	private int returnCode;
	
	/**
	 * Error message
	 * @see java.lang.String
	 */	
	private String errorMessage;

	/**
	 * Class constructor specifying the error code, the message will be located using Krb5
	 *
	 * @param i is of type int
	 * @see krb5.lib.Krb5
	 */
	public KrbException(int i) {
		returnCode = i;
		errorMessage = (String)Krb5.errMsgList.get(new Integer(returnCode));
	}

	/**
	 * Class constructor specifying error code and message
	 *
	 * @param i is of type int
	 * @param s is of type String
	 * @see java.lang.String
	 */
	public KrbException(int i, String s) {
		returnCode = i;
		errorMessage = s;
	}


	/**
	 * Returns error code
	 *
	 * @return int is a result
	 */
	public int returnCode() {
		return returnCode;
	}

	/**
	 * Returns code symbol
	 *
	 * @return String is a result
	 */
	public String returnCodeSymbol() {
		return returnCodeSymbol(returnCode);
	}


	/**
	 * Returns code symbol for a given code
	 *
	 * @return String is a result
	 * @param i is of type int
	 */
	public static String returnCodeSymbol(int i) {
		return "not yet implemented";  //XXX tbd
	}


	/**
	 * Returns the error message
	 *
	 * @return String is a result
     * @see krb5.lib.Krb5
	 */
	public String returnCodeMessage() {
		return (String)Krb5.errMsgList.get(new Integer(returnCode));
	}

	/**
	 * Returns error message for the given code
	 *
	 * @return String is a result
	 * @param i is of type int
	 * @see krb5.lib.Krb5
	 */
	public static String errorMessage(int i) {
		return (String)Krb5.errMsgList.get(new Integer(i));
	}


	/**
	 * Returns the error message
	 *
	 * @return String is a result
	 * @see java.lang.String
	 */
	public String errorMessage() {
		return errorMessage;
	}


	/**
	 * Returns the error code and the message in a string
	 *
	 * @return String is a result
	 * @see java.lang.String
	 */
	public String krbErrorMessage() {
		StringBuffer strbuf = new StringBuffer("krb_error " + returnCode);
		if (errorMessage != null) {
			strbuf.append(" ");
			strbuf.append(errorMessage);
		}
		return strbuf.toString(); 
	}

}
