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

import java.sql.SQLException;

/** 
* 1. 기능 : JDBC 예외 발생 처리
* 2. 처리 개요 : 
* 3. 주의사항 
*
* @author  :
* @version : v 1.0.0
* @see     :
* @since   : 
*/
public class JDBCException extends Exception
{ 
    /**
     * 에러 코드
     */
    String errorCode = "";
    
    /**
     * 에러 메세지
     */
    String errorMsg = "";
    
   /** 
    * 1. 기능 :  Default Constructor
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    **/ 
    public JDBCException() {
        super("JDBCException is occured.");
    }    
  
    /** 
    * 1. 기능 : Constructor
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param msg 에러 메세지
    **/ 
    public JDBCException(String msg) {
        super(msg);   
    }
    
   /** 
    * 1. 기능 : Constructor
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param code 에러 코드
    * @param msg  에러 메세지
    **/ 
    public JDBCException(int code, String msg) {
        super(msg);
        errorCode = String.valueOf(code);
        errorMsg = msg;
    }
    
   /** 
    * 1. 기능 : Constructor
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param func   발생 class
    * @param method 발생 함수
    * @param e      Exception 클래스
    **/ 
    public JDBCException(String func, String method, Exception e) {
        super(method + " Method in " + func + " Function - "+ e.getMessage());
        if (e instanceof SQLException) {	
			//errorCode = "ORA-" + String.valueOf(((SQLException)e).getErrorCode());
			//errorMsg = ((SQLException)e).getMessage().trim();
            setOracleMessage((SQLException)e);
		}
        else {
            errorMsg = e.getMessage();
        }
    }
    
    public JDBCException(Exception e, String para) {
        super(e.getMessage());
        if (e instanceof SQLException) {	
			//errorCode = "ORA-" + String.valueOf(((SQLException)e).getErrorCode());
			//errorMsg = ((SQLException)e).getMessage().trim();
            setOracleMessage((SQLException)e);
            errorMsg = errorMsg + "[" + para + "]";
		}
        else {
            errorMsg = e.getMessage() + "[" + para + "]";
        }
    }
    
    /** 
    * 1. 기능 : 오라클 에러 메세지 설정
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param e      SQLException 클래스
    **/ 
    private void setOracleMessage(SQLException e)
    {
        int code = e.getErrorCode();
        errorCode = "ORA-" + String.valueOf(((SQLException)e).getErrorCode());
        switch (code) {
            case 00001: errorMsg = "UNIQUE COLUMN에 중복된 값이 입력되었습니다."; break;
            case 01401: errorMsg = "입력한 필드 길이가 너무 큽니다."; break;
            default : errorMsg = e.getMessage().trim(); break;
        }
    }
    
    /** 
    * 1. 기능 : JDBC 예외 메세지 반환
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param 예외 메세지
    **/ 
    public String toString() {
		if (errorMsg.equals("")) {
			return super.toString();
		}
		else {
			return errorMsg;
		}
	}
    
    /** 
    * 1. 기능 : JDBC 예외 메세지 반환
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param 예외 메세지
    **/ 
    public String getMessage() {
        return toString();
    }
    
    /** 
    * 1. 기능 : 예외 코드 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 예외 코드
    **/
	public String getErrorReturnCode() {
		return errorCode;
	}
}
