package com.eactive.eai.inbound.action; 

import com.eactive.eai.adapter.AdapterGroupVO;
import com.eactive.eai.adapter.AdapterManager;
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 AdapterRequestAction extends RequestActionSupport
{ 
    /** 
	* 1. 기능 : Inbound Adapter를 통해 전달받은 비표준메시지에서  EAI메시지를 생성하기 위한 키값을 추출
	* 2. 처리 개요 : 
	*     - MessageKeyExtractor를 통해 Adapter별 추출 Rule에 따라 메시지를 구분할 수 있는 키값을 추출한다.
    * 3. 주의사항 
    *
    * @param message Object 타입의 요청메시지
    * @return String 비표준메시지의 메시지키값
    * @exception
    **/
    public String[] perform(Object message) throws ActionException
    {
        byte[] tmp = null;
        String[] key = null;
        
        AdapterManager adapterManager = AdapterManager.getInstance();
        AdapterGroupVO adptGrpVO = adapterManager.getAdapterGroupVO(adapterGroupName);        
        String eaiBizCode = null;
        if(adptGrpVO != null) {
        	eaiBizCode = adptGrpVO.getEaiBizCode();
        }
        else {
        	eaiBizCode = getEaiBizCodeFromAdapterName(adapterGroupName);
        }
        
        if(message instanceof byte[]) {
            try  {
                key = MessageKeyExtractor.getMessageKeyValue(this.adapterGroupName, message);  
            } catch(Exception e) {
                throw new ActionException(ExceptionUtil.getErrorCode(e, "RECEAIIRA001"));
            }
            tmp = (byte[])message;
            if (logger.isInfo()) logger.info(adapterName+"] received data >> "+ new String(tmp)); 
        } else {
            try  {
                key = MessageKeyExtractor.getMessageKeyValue(this.adapterGroupName, message);  
            } catch(Exception e) {
                throw new ActionException(ExceptionUtil.getErrorCode(e, "RECEAIIRA001"));
            }
            if (logger.isInfo()) logger.info(adapterName+"] received data >> "+ message);   
        }
        
        for(int i=0; i<key.length; i++) {
        	key[i] = eaiBizCode.trim() + key[i];
        }
            
        return key;
    }
    
    public String getDescription() {
		return "키추출방식 : 어댑터업무구분코드+추출키값";
	}
} 
