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

import com.eactive.eai.adapter.wca.global.WCADefine;
import com.eactive.eai.adapter.wca.util.MyLog;

import java.io.Serializable;

/** 
* 1. 기능 : LU 그룹 정보 Object 클래스
* 2. 처리 개요 : LU 그룹 정보를 Get/Set 한다.
* 3. 주의사항 
*
* @author  : 
* @version : v 1.0.0
* @see     : Serializable
* @since   :
*/
public class SessionGroupDataEx implements Serializable
{
    /**
    * 노드 정보 (SNA 어댑터가 구동하는 서버 이름)
    */
    private String      node_name; 
   /**
    * EAI 어댑터 그룹 이름
    */
    private String      adpter_group_name;
   /**
    * LU 그룹 이름
    */
    private String      group_name;
    /**
     * 소프트링크 접속 TCP 포트 번호
     */
    private int         port; 
    /**
     * WCA와 맺을 소켓 세션 수
     */
    private int         sess_cnt;
    /**
     * 트랜잭션 타임아웃 (단위:초)
     */
    private int         tran_timeout; 
   
    /**
     * DUMMY 메시지 구분 위치
     */
    private int         dummy_offset;
    /**
     * 호스트 송신 RU 크기
     */
    private int         host_snd_ru_size;
    /**
     * 호스트 수신 RU 크기
     */
    private int         host_rcv_ru_size;
   /**
    * LU 그룹 세션 Application id
    */
    private String      applyID;
    
    /**
     * 백업 자동 전환 모드 ‘1’ - 자동, ‘0’ - 수동
     */
    private String      backup_cvs_mode; 
    /**
     * 장애 발생 시 Fail-Over할 서버 이름
     */
    private String      backup_node_name;
    /**
     * 백업 소프트링크 접속 TCP 포트 번호
     */
    private int         backup_port;
    
   /**
    * 백업 전환 기준 장애율
    */
    private int         backup_cvs_val;
    
    /**
     * Log On/Off 설정 (‘1’/’0’)
     */
    private String      log_yn;
    
    /**
     * 로그 레벨 (int)
     */
    private int         log_level;
    
    /**
     * 로그 레벨 (‘DEBUG’,’INFO’, ‘WARN’,’ERROR’,’FATAL’)
     */
    private String      string_log_level;
    
    /**
     * 로그 사이즈 (단위 : M)
     */
    private int         log_size;
    
    // 20090810 
    private boolean		bBackupEnableFlag = true;
    
    public boolean getBackupEnableFlag() {
    	return bBackupEnableFlag;
    }
    
    public void setBackupEnableFlag(boolean bBackupEnableFlag) {
    	this.bBackupEnableFlag = bBackupEnableFlag;
    	return;
    }
    // 20090810 End
    
    // 20080527 Start
    /**
     * SoftLink Server IP Address
     */
     private String      softLinkSevrName;    
    // 20080527 End
     
    // 20090227 Start ("1"/"0")
    private String		update_lu_applyID = "0";
     
    /** 
      * 1. 기능 : LU Application ID 변경 여부 설정 
      * 2. 처리 개요 : 
      * 3. 주의사항 
      * 
      * @param sApplyID  Application ID
      **/  
    public void setUpdateLuApplyID(String sUpdateLuApplyID) {
    	if (sUpdateLuApplyID == null) { sUpdateLuApplyID = "0"; }
        this.update_lu_applyID = sUpdateLuApplyID.trim();   
    }

    /** 
      * 1. 기능 :  LU Application ID 변경 여부 반환
      * 2. 처리 개요 : 
      * 3. 주의사항 
      * 
      * @return    Update LU Application ID 여부
      **/   
    public String getUpdateLuApplyID() {
    	return this.update_lu_applyID; 
    }
    // 20090227 End
     
    // 20090228 Start ("1"/"0")
    private String		start_backup_session = "0";
     
    /** 
      * 1. 기능 : LU Application ID 변경 여부 설정 
      * 2. 처리 개요 : 
      * 3. 주의사항 
      * 
      * @param sApplyID  Application ID
      **/  
    public void setStartBackupSession(String sStartBackupSession) {
    	if (sStartBackupSession == null) { start_backup_session = "0"; }
        this.start_backup_session = sStartBackupSession.trim();   
    }

    /** 
      * 1. 기능 :  LU Application ID 변경 여부 반환
      * 2. 처리 개요 : 
      * 3. 주의사항 
      * 
      * @return    Update LU Application ID 여부
      **/   
    public String getStartBackupSession() {
    	return this.start_backup_session; 
    }
    // 20090227 End    
    /** 
    * 1. 기능 :  Defualt Constructor
    * 2. 처리 개요 : 
    * 3. 주의사항 
    **/
    public SessionGroupDataEx() {
    }
    
    /** 
    * 1. 기능 : Constructor
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param node_name          노드이름
    * @param adpter_group_name  어댑터 그룹 이름
    **/
    public SessionGroupDataEx(String node_name, String adpter_group_name) {
        this.node_name = node_name;
        this.adpter_group_name = adpter_group_name;
    }

    /** 
    * 1. 기능 : 노드 이름 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sNodName 노드이름
    **/  
    public void setNodeName(String s_node_name) {
        if (s_node_name == null) { s_node_name = ""; }
        this.node_name = s_node_name.trim();   
    }
    
    /** 
    * 1. 기능 :  노드 이름 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    노드이름
    **/
    public String getNodeName() {
        return this.node_name; 
    }
    
    /** 
    * 1. 기능 : 어댑터 그룹 이름 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sAdapterGroupName 어댑터 그룹 이름
    **/  
    public void setAdapterGroupName(String s_adpter_group_name) {
        if (s_adpter_group_name == null) { s_adpter_group_name = ""; }
        this.adpter_group_name = s_adpter_group_name.trim();   
    }
    
   /** 
    * 1. 기능 :  어댑터 그룹 이름 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    어댑터 그룹 이름
    **/
    public String getAdapterGroupName() {
        return this.adpter_group_name;   
    }
    
    /** 
    * 1. 기능 : LU 그룹 이름 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sGroupName LU 그룹 이름
    **/  
    public void setGroupName(String s_group_name) {
        if (s_group_name == null) { s_group_name = ""; }
        this.group_name = s_group_name.trim();   
    }
    
   /** 
    * 1. 기능 :  LU 그룹 이름 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    LU 그룹 이름
    **/
    public String getGroupName() {
        return this.group_name;   
    }
    
   /** 
    * 1. 기능 : 포트 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sPort 포트 (default : 0)
    **/  
    public void setPort(String sPort) {
        if (sPort == null) { sPort ="0"; }
        if (sPort != null && sPort.equals("")) { sPort ="0"; }
        this.port = Integer.parseInt(sPort.trim());
    }
    
    /** 
    * 1. 기능 : 포트 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 포트
    **/  
    public int getPort() {        
        return this.port;   
    }
    
    /** 
    * 1. 기능 : WCA 세션 수 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sSessCnt WCA 세션 수 (default : 0)
    **/  
    public void setSessionCnt(String sSessCnt) {
        if (sSessCnt == null) { sSessCnt ="0"; }
        if (sSessCnt != null && sSessCnt.equals("")) { sSessCnt ="0"; }
        this.sess_cnt = Integer.parseInt(sSessCnt.trim());
    }   
    
    /** 
    * 1. 기능 : WCA 세션 수 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return WCA 세션 수
    **/  
    public int getSessionCnt() {
        return this.sess_cnt;
    }
    
   /** 
    * 1. 기능 : DUMMY 메시지 구분 위치 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sOffset DUMMY 메시지 구분 위치 (default : 0)
    **/  
    public void setDummyOffset(String sOffset) {
        if (sOffset == null) { sOffset ="0"; }
        if (sOffset != null && sOffset.equals("")) { sOffset ="0"; }
        this.dummy_offset = Integer.parseInt(sOffset.trim());
    }
    
   /** 
    * 1. 기능 : DUMMY 메시지 구분 위치 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return DUMMY 메시지 구분 위치
    **/  
    public int getDummyOffset() {
        return this.dummy_offset;
    }
   /** 
    * 1. 기능 : 호스트 송신 RU 크기 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sRUSize 호스트 송신 RU 크기 (default : 0)
    **/  
    public void setHostSndRUSize(String sRUSize) {
        if (sRUSize == null) { sRUSize ="0"; }
        if (sRUSize != null && sRUSize.equals("")) { sRUSize ="0"; }
        this.host_snd_ru_size = Integer.parseInt(sRUSize.trim());
    }
    
    /** 
    * 1. 기능 : 호스트 송신 RU 크기 설정  반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 호스트 송신 RU 크기 설정 
    **/  
    public int getHostSndRUSize() {
        return this.host_snd_ru_size;
    }
    
    /** 
    * 1. 기능 : 호스트 수신 RU 크기 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sRUSize 호스트 수신 RU 크기 (default : 0)
    **/  
    public void setHostRcvRUSize(String sRUSize) {
        if (sRUSize == null) { sRUSize ="0"; }
        if (sRUSize != null && sRUSize.equals("")) { sRUSize ="0"; }
        this.host_rcv_ru_size = Integer.parseInt(sRUSize.trim());
    }
    
    /** 
    * 1. 기능 : 호스트 수신 RU 크기 설정  반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 호스트 수신 RU 크기 설정 
    **/  
    public int getHostRcvRUSize() {
        return this.host_rcv_ru_size;
    }
    
    /** 
    * 1. 기능 : Application ID 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sApplyID  Application ID
    **/  
    public void setApplyID(String sApplyID) {
        if (sApplyID == null) { sApplyID = ""; }
        this.applyID = sApplyID.trim();   
    }
    
   /** 
    * 1. 기능 :  Application ID 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    Application ID
    **/   
    public String getApplyID() {
        return this.applyID; 
    }
    
    /** 
    * 1. 기능 : 백업 자동 전환 모드 설정
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param s_mode 백업 자동 전환 모드 (default : N)
    **/
    public void setBackupCvsMode(String s_mode) {
        if (s_mode == null) { s_mode = WCADefine.DEFAULT_MANUAL_BACKUP_CVS_MODE; }
        if (s_mode != null && s_mode.equals("")) { s_mode = WCADefine.DEFAULT_MANUAL_BACKUP_CVS_MODE; }
        this.backup_cvs_mode = s_mode.trim();   
    }
    
    /** 
    * 1. 기능 : 백업 자동 전환 모드 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return BUSY 백업 자동 전환 모드
    **/  
    public String getBackupCvsMode() {
        return this.backup_cvs_mode;   
    }
    
   /** 
    * 1. 기능 : 백업 서버 이름 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param s_node_name 백업 서버 이름
    **/
    public void setBackupNodeName(String s_node_name) {
        if (s_node_name == null) { s_node_name = ""; }
        this.backup_node_name = s_node_name;   
    }
    
    /** 
    * 1. 기능 : 백업 서버 이름 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 백업 서버 이름
    **/
    public String getBackupNodeName() {
        return this.backup_node_name;   
    }
    
    // 20080527 Start
    /** 
     * 1. 기능 : SoftLink Server 이름 설정 
     * 2. 처리 개요 : 
     * 3. 주의사항 
     * 
     * @param s_softlink_sevr_name SoftLink Server 이름
     **/
     public void setSoftLinkSevrName(String s_softlink_sevr_name) {
         if (s_softlink_sevr_name == null) { softLinkSevrName = "127.0.0.1"; }
         this.softLinkSevrName = s_softlink_sevr_name;   
     }
     
     /** 
     * 1. 기능 : SoftLink Server 이름 반환
     * 2. 처리 개요 : 
     * 3. 주의사항 
     * 
     * @return SoftLink Server 이름
     **/
     public String getSoftLinkSevrName() {
         return this.softLinkSevrName;   
     }    
    // 20080527 End
    
   /** 
    * 1. 기능 : 백업 서버 포트 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sPort 백업 서버 포트 
    **/
    public void setBackupPort(String sPort) {
        if (sPort == null) { sPort ="0"; }
        if (sPort != null && sPort.equals("")) { sPort ="0"; }
        this.backup_port = Integer.parseInt(sPort.trim());
    }
    
   /** 
    * 1. 기능 : 백업 서버 포트 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 백업 서버 포트 
    **/
    public int getBackupPort() {
        return this.backup_port;   
    }
    
    /** 
    * 1. 기능 : 백업 전환 기준 장애율 설정 
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param s_backup_val 백업 전환 기준 장애율
    **/
    public void setBackupCvsVal(String s_backup_val) {
        if (s_backup_val == null) { s_backup_val ="0"; }
        if (s_backup_val != null && s_backup_val.equals("")) { s_backup_val ="0"; }
        this.backup_cvs_val = Integer.parseInt(s_backup_val.trim());
    }
    
    /** 
    * 1. 기능 : 백업 전환 기준 장애율 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 백업 전환 기준 장애율 반환
    **/
    public int getBackupCvsVal() {
        return this.backup_cvs_val;   
    }
    
    /** 
    * 1. 기능 : 로그 기록 여부 설정
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sLogYN  로그 기록 여부
    **/  
    public void setLogYN(String s_log_yn) {
        if (s_log_yn == null) { s_log_yn = WCADefine.DEFAULT_WCA_LOG; }        
        log_yn = s_log_yn;
    }

    /** 
    * 1. 기능 :  로그 기록 여부 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    로그 기록 여부 (Y/N)
    **/
    public String getLogYN() {
        return this.log_yn;   
    }
    
    /** 
    * 1. 기능 :  로그 기록 여부 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    로그 기록 여부(true/false)
    **/
    public boolean isLogWritable() {
        if (log_yn.equalsIgnoreCase(WCADefine.WCA_LOG_YES)) { return true; } 
        return false;
    }
    
    /** 
    * 1. 기능 : 로그 레벨 설정
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sLogLevel  로그 레벨
    **/  
    public void setLogLevel(String s_log_level) {
        try {
            if (s_log_level == null) { log_level = WCADefine.DEFAULT_WCA_LOG_LEVEL; }

            if (s_log_level.equalsIgnoreCase("DEBUG")) {            
                log_level = MyLog.DEBUG;
                string_log_level = "DEBUG";
            }
            else if (s_log_level.equalsIgnoreCase("INFO")) {
                log_level = MyLog.INFO;
                string_log_level = "INFO";
            }
            else if (s_log_level.equalsIgnoreCase("NOTICE")) {            
                log_level = MyLog.NOTICE;
                string_log_level = "NOTICE";
            }
            else if (s_log_level.equalsIgnoreCase("WARN")) {        
                log_level = MyLog.WARN;
                string_log_level = "WARN";
            }
            else if (s_log_level.equalsIgnoreCase("ERROR")) {
                log_level = MyLog.ERROR;
                string_log_level = "ERROR";
            }
            else if (s_log_level.equalsIgnoreCase("ALERT")) {
                log_level = MyLog.ALERT;
                string_log_level = "ALERT";
            }                
            else if (s_log_level.equalsIgnoreCase("EMERGENCY")) {
                log_level = MyLog.EMERGENCY;
                string_log_level = "EMERGENCY";
            }
            else {
                log_level = WCADefine.DEFAULT_WCA_LOG_LEVEL;
                string_log_level = WCADefine.DEFAULT_WCA_STRING_LOG_LEVEL;
            }
        }
        catch (Exception e) {
            log_level = WCADefine.DEFAULT_WCA_LOG_LEVEL;
        }
    }
    
   /** 
    * 1. 기능 :  로그 레벨 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    integer type 로그 레벨
    **/
    public int getLogLevel() {
        return this.log_level;
    }
    
   /** 
    * 1. 기능 :  로그 레벨 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    String type 로그 레벨
    **/
    public String getStringLogLevel() {
        return this.string_log_level;
    }
    
    /** 
    * 1. 기능 : 로그 사이즈 설정
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param sLogLevel  로그 레벨사이즈
    **/
    public void setLogSize(String s_log_size) {
        try {
            if (s_log_size == null) { s_log_size = String.valueOf(WCADefine.DEFAULT_WCA_LOG_SIZE); }
            if (s_log_size != null && s_log_size.equals("")) { s_log_size = String.valueOf(WCADefine.DEFAULT_WCA_LOG_SIZE); }
            this.log_size = Integer.parseInt(s_log_size.trim());
        }
        catch (Exception e) {
            this.log_size = WCADefine.DEFAULT_WCA_LOG_SIZE;
        }
    }
    
   /** 
    * 1. 기능 :  로그 사이즈 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return    로그 사이즈
    **/
    public int getLogSize() {
        return this.log_size;   
    }
    
    /** 
    * 1. 기능 : 트랜잭션 타임아웃 설정
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param s_timeout  트랜잭션 타임아웃
    **/  
    public void setTranTimeout(String s_timeout) {
        if (s_timeout == null) { s_timeout = String.valueOf(WCADefine.DEFAULT_TRANSACTION_TIMEOUT); }
        if (s_timeout != null && s_timeout.equals("")) { s_timeout = String.valueOf(WCADefine.DEFAULT_TRANSACTION_TIMEOUT); }
        this.tran_timeout = Integer.parseInt(s_timeout.trim());
    }
    
    /** 
    * 1. 기능 : 트랜잭션 타임아웃 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 트랜잭션 타임아웃
    **/  
    public int getTranTimeout() {
        return this.tran_timeout;
    }
    
   
 
    /** 
    * 1. 기능 :  LU 그룹 정보 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    *
    * @return LU 정보
    **/
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("SessionGroupData[ 노드 =").append(node_name);
        sb.append(", 어댑터 그룹 이름 =").append(adpter_group_name);
        sb.append(", LU 그룹 이름 =").append(group_name);
        sb.append(", IP =").append(softLinkSevrName);
        sb.append(", \nPort =").append(port);
        sb.append(", WCA 세션 수 =").append(sess_cnt);
        // 20090228 Start
        sb.append(", 백업 세션 시작 =").append(start_backup_session);
        // 20090228 End
        // 20090810 Start
        sb.append(", 백업 동작 여부 =").append(bBackupEnableFlag);
        // 20090810 End
        sb.append(", 트랜잭션 타임아웃 =").append(tran_timeout);
        sb.append(", DUMMY 메시지 구분 위치 =").append(dummy_offset);
        sb.append(", 호스트 송신 RU 크기 =").append(host_snd_ru_size);
        sb.append(", 호스트 수신 RU 크기 =").append(host_rcv_ru_size);
        sb.append(", Apply id =").append(applyID);
        sb.append(", \n백업 자동 전환 모드  =").append(backup_cvs_mode);
        sb.append(", 백업 서버 =").append(backup_node_name);
        sb.append(", 백업 Port =").append(backup_port);
        sb.append(", 백업 전환 기준 장애율 =").append(backup_cvs_val);
        sb.append(", \n로깅 여부 =").append(log_yn);
        sb.append(", 로그 레벨 =").append(log_level);
        sb.append(", 로그 사이즈 =").append(log_size);
        sb.append(" ]");
        
        return sb.toString();
    }
}
