package com.eactive.eai.common.dao;

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

/**
* 1. 기능 : DAO 객체를 생성하기 위한 Factory 클래스
* 2. 처리 개요 : DAO 객체를 생성하는 Factory 메서드를 정의한다.
* *     -
* 3. 주의사항
*
* @author  :
* @version : v 1.0.0
* @see : 관련 기능을 참조
* @since   :
*/
@SuppressWarnings("rawtypes")
public class DAOFactory
{

    /**
    * 1. 기능 :  Default Contructor
    * 2. 처리 개요 : Default Contructor
    *     -
    * 3. 주의사항
    *
   **/
    private DAOFactory() {

    }

    /**
    * 1. 기능 :  DAOFactory 객체를 생성 반환하는 메서드
    * 2. 처리 개요 : DAOFactory 객체를 생성 반환한다.
    *     -
    * 3. 주의사항
    *
    * @return   DAOFactory
    **/
    public static DAOFactory newInstance() {
        return new DAOFactory();
    }

    /**
    * 1. 기능 :  BaseDAO 객체를 생성 반환하는 메서드
    * 2. 처리 개요 : 파라미터의 DAO 객체를 생성 반환한다.
    *     -
    * 3. 주의사항
    *
    * @param    daoClassName    생성할 DAO 클래스
    * @return   BaseDAO     Data Access Object
    * @exception    클래스를 찾지 못하거나 객체를 생성하지 못할 경우
    **/
    public BaseDAO create(String daoClassName) throws DAOException {
        Class daoClass = null;
       try {
            daoClass = Class.forName(daoClassName);
       } catch(Exception e) {
            throw new DAOException(ExceptionUtil.getErrorCode(e, "BECEAICDB111"));
       }

       BaseDAO dao = null;
       try {
            dao = (BaseDAO)daoClass.newInstance();
       } catch(Exception e) {
            throw new DAOException(ExceptionUtil.getErrorCode(e, "BECEAICDB112"));
       }

       return dao;
    }

    /**
    * 1. 기능 :  BaseDAO 객체를 생성 반환하는 메서드
    * 2. 처리 개요 : 파라미터의 DAO 객체를 생성 반환한다.
    *     -
    * 3. 주의사항
    *
    * @param    daoClass    생성할 DAO 클래스
    * @return   BaseDAO     Data Access Object
    * @exception    클래스를 찾지 못하거나 객체를 생성하지 못할 경우
    **/
	public BaseDAO create(Class daoClass) throws DAOException {
       BaseDAO dao = null;
       try {
            dao = (BaseDAO)daoClass.newInstance();
        }  catch(Exception e) {
            //throw new DAOException("Cannot create a instance of DAO class. - "+e.getMessage());
            throw new DAOException(ExceptionUtil.getErrorCode(e, "BECEAICDB112"));
       }

       return dao;
    }
}
