package com.eactive.eai.inbound.action; 

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

/** 
* 1. 기능 : Inbound Adapter를 통해 전달받은 비표준메시지에서  EAI메시지를 생성하기 위한 키값을 추출
* 2. 처리 개요 : 
*     - 어뎁터의 업무그룹명을 키값앞에 추가한다.
*     - MessageKeyExtractor를 통해 Adapter별 추출 Rule에 따라 메시지를 구분할 수 있는 키값을 추출한다.
* 3. 주의사항 
*
* @author  : 
* @version : v 1.0.0
* @see :
* @since : 
*/
public class AdapterGroupNameParseRequestAction extends RequestActionSupport
{ 
    
    /** 
	* 1. 기능 : Inbound Adapter를 통해 전달받은 비표준메시지에서 표준메시지를 생성하기 위한 키값을 추출
	* 2. 처리 개요 : 
	*     - MessageKeyExtractor를 통해 Adapter별 추출 Rule에 따라 메시지를 구분할 수 있는 키값을 추출한다.
    * 3. 주의사항 
    *
    * @param message Object 타입의 요청메시지
    * @return String 비표준메시지의 메시지키값
    * @exception
    **/
    public String[] perform(Object message) throws ActionException
    {
        byte[] tmp = null;
        String key[] = null;
        /**
         * _BPM_OU_NET_AsC{KOF} 값추출시    BPMKOF 추출
         * _BPM_OU_NET_AsC 값추출시    BPM 추출
         */
        String adptGrpName = adapterGroupName;
        String chnl = "";
        String inst = "";
        
        if (adptGrpName != null 
        		&& adptGrpName.length() >= 4 
        		){
        	chnl = adptGrpName.substring(1,4);
        }
        if (adptGrpName != null 
        		&& adptGrpName.length() >= 4 
        		&& adptGrpName.indexOf("{") >= 0
        		&& adptGrpName.indexOf("}") >= 0
        		&& adptGrpName.indexOf("{") < adptGrpName.indexOf("}")
        		){
        	int start = adptGrpName.indexOf("{")+1;
        	int end = adptGrpName.indexOf("}");
        	inst = adptGrpName.substring(start,end);
        }
        if ("".equals(chnl) && "".equals(inst)){
        	;
        }else{
        	adptGrpName = chnl + inst;
        }
        
        
        if(message instanceof byte[]) {
        	tmp = (byte[])message;
        }else if (message instanceof String) {
        	tmp = ((String)message).getBytes();
        }else{
        	throw new ActionException(ExceptionUtil.getErrorCode(null, "RECEAIIRA001"));
        }
        
        try  {
        	key = MessageKeyExtractor.getMessageKeyValue(this.adapterGroupName, tmp, true, true);
        } catch(Exception e) {
            throw new ActionException(ExceptionUtil.getErrorCode(e, "RECEAIIRA001"));
        }

        if (logger.isDebug()) logger.debug(adapterName+"] received data >> ["+ new String(tmp)+"]"); 

        for(int i=0; i<key.length; i++ ) {
        	key[i] = adptGrpName.trim() + key[i];
        }
        
        return key;
    }
    
    public String getDescription() {
		return "키추출방식 : (그룹명업무3자리+{}안의값)+추출키값";
	}
} 
