package com.eactive.eai.adapter.wca.exception;

import com.eactive.eai.common.errorcode.ErrorCodeHandler;
import com.eactive.eai.common.exception.ExceptionUtil;

/** 
* 1. 기능 : WCA 예외 발생 처리
* 2. 처리 개요 : 
* 3. 주의사항 
*
* @author  :
* @version : v 1.0.0
* @see     :
* @since   : 2005. 6. 20. 오후 3:38:15
*/
public class WCAException  extends Exception {
    /**
     * 에러 코드 
     */
    public String	sErrCode    = null;
    
    /**
     * 에러 메세지
     */
    public String	sErrMsg     = null;
   
    /**
     * Softlink 에러 코드 크기
     */
    public static final int 	SOFTLINK_ERROR_SIZE                 = 12;
    
    /**
     * Softlink 에러 코드 Prefix
     */
    public static final String 	SOFTLINK_ERROR_PREFIX          		= "RECEAISNA";
    public static final String 	WCA_ERROR_PREFIX               		= "RECEAIOWA";
    /**
     * Softlink "LU 가 사용중"(E_HOST_LU_IN_USED) 인 경우 에러 코드
     *          "LU 가 다운 "(E_HOST_LU_DOWN) 인 경우 에러 코드  
     *          해당 업무에 해당하는 LU가 없습니다
     *   -> 다른 LU 그룹 세션으로 재정송됨.
     */
    public static final String 	E_HOST_LU_IN_USED                   = SOFTLINK_ERROR_PREFIX + "002";
    public static final String 	E_HOST_LU_DOWN                      = SOFTLINK_ERROR_PREFIX + "001";
    public static final String 	E_HOST_LU_NON_EXIST                 = SOFTLINK_ERROR_PREFIX + "012";
        
    /**
     * {1} Softlink 연결이 되지 않습니다.
     */
    public static final String E_SOFTLINK_NOTCONN                   = "RECEAIOWA001"; 
    
    /**
     * {1} Softlink 세션이 끊어졌습니다.
     */
    public static final String E_SOFTLINK_CONNECTION_CLOSE          = "RECEAIOWA002";
        
    /**
     * Softlink로 데이타 송신중에 장애가 발생하였습니다.
     */
	public static final String E_SOFTLINK_SENDERR                   = "RECEAIOWA003";
    
    /**
     * Softlink로부터 데이타 수신중에 장애가 발생하였습니다.
     */
    public static final String E_SOFTLINK_RECVERR                   = "RECEAIOWA004";
    
    /**
     * 해당하는 어댑터그룹이 존재하지 않습니다.
     */
    public static final String E_ADAPTERGROUP_NO_EXIST              = "RECEAIOWA005";
    
    /**
     * 해당하는 LU 이름이 존재하지 않습니다. [{1}]
     */
    public static final String E_LUNAME_NO_EXIST                    = "RECEAIOWA006";      
    
    /**
     * 송신데이타[{1}]가 정의되지 않았습니다. 
     */
    public static final String E_SEND_DATA_ERROR                    = "RECEAIOWA007"; 
    
    /**
     * {1} 수신데이타가 유효하지 않습니다. [{2}]
     */
    public static final String E_RECVDATA_ERROR                     = "RECEAIOWA008"; 
    
    /**
     * {1} 수신데이타길이가 유효하지 않습니다. [{2}]
     */
    public static final String E_RECVERR_DATALEN                    = "RECEAIOWA009";
    
    /**
     * {1} 정의되지 않은 데이터 타입입니다. [{2}]
     */
    public static final String E_SOFTLINK_UNKNOWN_COMMAND           = "RECEAIOWA010"; 
    
    /**
     * {1} 이용가능한 WCA 세션이 없습니다.
     */
    public static final String E_SOFTLINK_NO_SESSION_SLOT           = "RECEAIOWA011";
    
    /**
     * {1} 송신 가능한 WCA 세션이 없습니다.
     */
    public static final String E_SOFTLINK_NO_SENDABLE_SESSION_SLOT   = "RECEAIOWA017";
    
    /**
     * 송신중 SNA LU0 어댑터 세션이 Close 되었습니다.
     */
    public static final String E_SOFTLINK_SEND_SESSION_CLOSE   = "RECEAIOWA018";
    /**
     * 수신중 SNA LU0 어댑터 세션이 Close 되었습니다.
     */
    public static final String E_SOFTLINK_RECV_SESSION_CLOSE   = "RECEAIOWA019";
    
    /**
     * {1} 해당하는 세션 정보가 정의되지 않았습니다.
     */
    public static final String E_SOFTLINK_NOT_FOUND_SESSION         = "RECEAIOWA012";
    
    /**
     * Transaction  시간동안 데이타 수신을 하지 못하였습니다.
     */
    public static final String E_WCA_TRANTIMEOUT                    = "RECEAIOWA013";
                                                                       
    /**
     * 데이타베이스 작업시 장애가 발생하였습니다.
     */
    public static final String E_DAO                                = "RECEAIOWA014"; 
    
    /**
     * 외부 프로세스 호출 실패하였습니다.[{1}]
     */
    public static final String E_PROCESS_CALL                        = "RECEAIOWA015";
    
    /**
     * 시스템 적용 실패하였습니다. {1}
     */
    public static final String E_UPDATE_APPLY                       = "RECEAIOWA016";
    
    /**
     * 미처리 데이타를 클라이언트에 알리는데 실패하였습니다.(skey)
     */
    public static final String E_INFORM_ERROR                       = "RECEAIOWA020";


    // Recv data가 Queue에 있지 않을 경우
    public static final String E_SOFTLINK_RECV_DATA_NOTFOUND        = "RECEAIOWA100";     
    public static final String E_SOCKET_ERROR                       = "RECEAIOWA998";	
    public static final String E_ETC                                = "RECEAIOWA999";	
    
    /**
     * Host Name을 얻을 수 없습니다.
     */
	public static final String E_UNKNOWN_HOST                       = "RECEAIOWA101";
    
    /**
     * {1} 백업모드 전환 [{2}]
     */
    public static final String W_SOFTLINK_BACKUP_CONV               = "RWCEAIOWA015";
    /**
     * Thread Group {1}에 속한 Thread가 종료되지 않았습니다. (Active Thread Count ={2})
     */
    public static final String W_THREAD_GROUP_ACTIVE                = "RWCEAIOWA001";
    
    /** 
    * 1. 기능 :  Constructor
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param e  Exception Class
    **/
    public WCAException(Exception e) {
        super();
	    if (e instanceof java.lang.NullPointerException) {
            this.sErrCode = E_ETC;
            this.sErrMsg = "NULL 값이 존재합니다  [" +  e.getMessage() + "]";
		}
	}
    
    public WCAException() {
        super();
	}
    
    /** 
    * 1. 기능 :  Constructor
    * 2. 처리 개요 : ExceptionUtil을 이용하여 에러 메세지를 설정한다.
    * 3. 주의사항 
    * 
    * @param sErrCode   에러 코드
    * @param sErrMsg  에러 메세지
    **/ 
	public WCAException(String sErrCode, String sErrMsg) {   
        super(sErrCode);
        this.sErrCode = sErrCode;
        String[] args = new String[1];
        args[0] = sErrMsg;
	    this.sErrMsg = ExceptionUtil.make(sErrCode, args);
	}
    
    /** 
    * 1. 기능 :  Constructor
    * 2. 처리 개요 : ExceptionUtil을 이용하여 에러 메세지를 설정한다.
    * 3. 주의사항 
    * 
    * @param sErrCode   에러 코드
    * @param sErrMsg1   에러 메세지
    * @param sErrMsg2   에러 메세지
    **/ 
    public WCAException(String sErrCode, String sErrMsg1, String sErrMsg2) {
        super(sErrCode);
        this.sErrCode = sErrCode;
        String[] args = new String[2];
        args[0] = sErrMsg1;
        args[1] = sErrMsg2;
	    this.sErrMsg = ExceptionUtil.make(sErrCode, args);
	}
    
    /** 
    * 1. 기능 :  Constructor
    * 2. 처리 개요 : ExceptionUtil을 이용하여 에러 메세지를 설정한다.
    * 3. 주의사항 
    * 
    * @param sErrCode   에러 코드
    **/ 
    public WCAException(String sErrCode) {
        super(sErrCode);
        this.sErrCode = sErrCode;
	    this.sErrMsg = "["+sErrCode+"] " + ErrorCodeHandler.getMessage(sErrCode);
	}
    
    /** 
    * 1. 기능 :  Constructor
    * 2. 처리 개요 : ExceptionUtil을 이용하여 에러 메세지를 설정한다.
    * 3. 주의사항 
    * 
    * @param sErrCode   에러 코드
    * @param e          Throwable class
    **/ 
    public WCAException(String sErrCode, Throwable e) {
        super(sErrCode);
        this.sErrCode = sErrCode;
        this.sErrMsg = ExceptionUtil.make(e, sErrCode);
    }
    
   /** 
    * 1. 기능 :  ExceptionUtil을 이용하여 정형화된 에러 메세지를 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sErrCode   에러 코드
    **/ 
    public static String displayError(String sErrCode) {
        String sErrMsg = ErrorCodeHandler.getMessage(sErrCode);
	    return ExceptionUtil.make(sErrCode, sErrMsg);
    }
    
    /** 
    * 1. 기능 :  ExceptionUtil을 이용하여 정형화된 에러 메세지를 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sErrCode   에러 코드
    * @param sErrMsg    에러 메세지
    **/ 
    public static String displayError(String sErrCode, String sErrMsg) {
        String[] args = new String[1];
        args[0] = sErrMsg;
	    return ExceptionUtil.make(sErrCode, args);
    }
    
    /** 
    * 1. 기능 :  ExceptionUtil을 이용하여 정형화된 에러 메세지를 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sErrCode   에러 코드
    * @param sErrMsg1    에러 메세지
    * @param sErrMsg2    에러 메세지
    **/ 
    public static String displayError(String sErrCode, String sErrMsg1, String sErrMsg2) {
        String[] args = new String[2];
        args[0] = sErrMsg1;
        args[1] = sErrMsg2;
	    return ExceptionUtil.make(sErrCode, args);
    }
    
   /** 
    * 1. 기능 : 예외 메세지 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 예외 메세지
    **/   
	public String toString() {     
		if ("".equals(sErrMsg)) {	
			return super.toString();
		}
		else {        
			return sErrMsg;
		}
	}
    
    /** 
    * 1. 기능 : 예외 메세지 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 예외 메세지
    **/ 
    public String getMessage() {     
		return toString();
	}
	
    public void setMessage(String msg) {     
		sErrMsg = msg;
	}
    
    /** 
    * 1. 기능 : 예외 코드 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 예외 코드
    **/
	public String  getErrorReturnCode() {
		return sErrCode;
	}
}

