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

import com.eactive.eai.adapter.wca.exception.WCAException;
import com.eactive.eai.adapter.wca.util.MyUtil;

/** 
* 1. 기능 : 백업 전환 / 복구 데이타 
* 2. 처리 개요 : 
* 3. 주의사항
*
* @author  : 
* @version : v 1.0.0
* @see : 
* @since   :
*/
public class ManualBackupCmd extends WCAHeader {
    /**
     * 어댑터 그룹 이름 길이
     */
    public static final int LEN_ADAPTER_GRP_NAME    = 50;
    
    /**
     *  LU 그룹 이름 길이
     */
	public static final int LEN_LU_GRP_NAME         = 55;	
	
    /**
     * 어댑터 그룹 이름 Offset
     */
    public static final int OFFSET_ADAPTER_GRP_NAME = WCA_HEADER_LEN;
    
    /**
     * LU 그룹 이름 Offset
     */
	public static final int OFFSET_LU_GRP_NAME 		= OFFSET_ADAPTER_GRP_NAME + LEN_ADAPTER_GRP_NAME;
    
    /**
     * 백업 전환 데이타 크기
     */
    public static final int BACKUP_CMD_LEN = OFFSET_LU_GRP_NAME + LEN_LU_GRP_NAME;
                  
    /** 
    * 1. 기능 : 백업 전환 정보 반환
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @return 백업 전환
    **/                                 
	public String toString() {
	    StringBuffer sbTmp = new StringBuffer();
	
	    sbTmp.append(getKey() + ", " + getLUName() + ", " + getMode() + ", " + getDataType());
	    return sbTmp.toString();
	}
	
    /** 
    * 1. 기능 : 백업 전환 Constructor
    * 2. 처리 개요 : 
    * 3. 주의사항 
    * 
    * @param nLen            데이타 길이
    * @param pBuff           데이타
    **/
    public ManualBackupCmd(int nLen, byte[] pBuff) {
        this.nLen = nLen;
        this.pHeaderBuff = pBuff;
    }
    
    public ManualBackupCmd() {
        this.nLen = BACKUP_CMD_LEN;
        this.pHeaderBuff = new byte[nLen];
    }

    /** 
    * 1. 기능 : 데이타 반환
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @return 데이타
    **/
    public byte[] getData() {
        return pHeaderBuff;
    }    
    
    /** 
    * 1. 기능 : 어댑터 그룹 이름 반환
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @return 어댑터 그룹 이름
    **/
    public String getAdapterGrpName() {
        byte[] pBuff = new byte[LEN_ADAPTER_GRP_NAME];
        
        System.arraycopy(pHeaderBuff, OFFSET_ADAPTER_GRP_NAME, pBuff, 0, LEN_ADAPTER_GRP_NAME);
        
        String sAdapterGrpName = new String(pBuff);  
        sAdapterGrpName = MyUtil.replaceString(sAdapterGrpName, String.valueOf((char)0x00), "");      
        return sAdapterGrpName;
    }
    
   /** 
    * 1. 기능 : 어댑터 그룹 이름 설정
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param 어댑터 그룹 이름
    **/
    public void setAdapterGrpName(String adapterGrpName) throws WCAException {
        if (adapterGrpName == null) {
            throw new WCAException(WCAException.E_SEND_DATA_ERROR, "어댑터 그룹명");
        }
        
        // Space로 채움
        adapterGrpName = MyUtil.rightPadString(adapterGrpName, LEN_ADAPTER_GRP_NAME, " ");
    
        byte[] pBuff = adapterGrpName.getBytes();       
        System.arraycopy(pBuff, 0, pHeaderBuff, OFFSET_ADAPTER_GRP_NAME, LEN_ADAPTER_GRP_NAME);
    }
        
    /** 
    * 1. 기능 : LU 그룹 이름 반환
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @return LU 그룹 이름
    **/
    public String getLUGrpName() {
        byte[] pBuff = new byte[LEN_LU_GRP_NAME];
        
        System.arraycopy(pHeaderBuff, OFFSET_LU_GRP_NAME, pBuff, 0, LEN_LU_GRP_NAME);
        
        String sLUGrpName = new String(pBuff);        
        sLUGrpName = MyUtil.replaceString(sLUGrpName, String.valueOf((char)0x00), "");      
        return sLUGrpName;
    }
    
    /** 
    * 1. 기능 : LU 그룹 이름 설정
    * 2. 처리 개요 :
    * 3. 주의사항 
    * 
    * @param LU 그룹 이름
    **/
    public void setLUGrpName(String luGrpName) throws WCAException {
        if (luGrpName == null) {
            throw new WCAException(WCAException.E_SEND_DATA_ERROR, "LU 그룹명");
        }
        
        // Space로 채움
        luGrpName = MyUtil.rightPadString(luGrpName, LEN_LU_GRP_NAME, " ");
    
        byte[] pBuff = luGrpName.getBytes();       
        System.arraycopy(pBuff, 0, pHeaderBuff, OFFSET_LU_GRP_NAME, LEN_LU_GRP_NAME);
    }
}
