package com.eactive.eai.batch.job.jobItem.welcd;

import com.eactive.eai.batch.job.jobItem.DefaultTelegram;
import com.eactive.eai.batch.job.jobItem.TelegramService;

import com.eactive.eai.batch.rule.nodeinfo.NodeInfoManager;
import com.eactive.eai.batch.rule.nodeinfo.NodeInfoVO;

/**
 * TSEAIBR03 의 각 노드 정보에 지정되는 클래스 이다.
 * RECV 액션을 수행하는 노드에 대해, 해당 노드에서 수행할 전문수신작업의 수신길이를 결정하기 위해 사용된다.
 */
public class RECV_WELCD extends DefaultTelegram implements TelegramService
{
    /**
     * 생성자 : 복지카드 길이 결정용 텔레그램 클래스 이다.
     */
    public RECV_WELCD() {
    }

    public boolean doExecute() {

        return true;
    }

    //---------------- 특정 필드값을 구하는 부분
    // 전문종별코드 필드값 리턴
    public String getTelegramType()
    {
        return super.getFieldValueString(4);
    }
    // 거래구분코드 필드값 리턴
    public String getTrClass()
    {
        return super.getFieldValueString(5);
    }
    //응답코드 필드값 리턴
    public String getResCode()
    {
        return super.getFieldValueString(8);
    }
    //업무관리코드 필드값 리턴
    public String getOpCode()
    {
        return super.getFieldValueString(10);
    }

    /**
     *  20060417 add by khs : 원치 않는 전문종별 도착시, 소켓에 있는 garvage 데이터를 없애기 위해 사용한다.
     *
     *  return value :      <0 계산 할 수 없거나 장애이다.
     *                      >0 해당 데이터를 소켓에서 더 읽어들인다.
     */
    public int getRemainDataLength()
    {
        try {
            int     idx;
            String  strLength;

            String  strRuleCode   = batchDoc.getBatchMsg().getHeader().getRuleCode();
            String  strPhaseCode  = batchDoc.getBatchMsg().getBody().getFlowPhaseCode();
            NodeInfoVO  vo = NodeInfoManager.getInstance().getNodeInfo(strRuleCode, strPhaseCode);
            idx = vo.getLengthField();
            if (idx == 0) return -1;
            strLength = new String((byte[])this.al_Field.get(idx-1));
            int     nDocLen = Integer.parseInt(strLength);
            int     nReceivedLen = 0;
            for (int i=idx; i<this.al_FieldLength.length ; i++) {
                nReceivedLen = nReceivedLen + getCalculatedLength(i);
            }
            return (nDocLen-nReceivedLen);
        } catch (Exception ex) {
            this.batchDoc.getBatchMsg().getBody().setErrorMsg(ex.toString());
            return -1;
        }
    }
}