package com.eactive.eai.flowcontroller;
//package com.eactive.eai.flowcontroller; 
//
//import com.bea.control.ServiceBrokerControl;
//import com.bea.jpd.JpdContext;
//import com.bea.data.RawData;
//import com.bea.wli.control.broker.MessageBroker;
//import com.bea.wli.jpd.Callback;
//import com.bea.wli.jpd.CallbackInterface;
//import com.bea.xml.XmlObjectList;
//import org.apache.beehive.controls.api.bean.Control;
//import org.apache.beehive.controls.api.events.EventHandler;
//import org.apache.xmlbeans.XmlObject;
//import com.eactive.eai.adapter.AdapterGroupVO;
//import com.eactive.eai.adapter.AdapterManager;
//import com.eactive.eai.adapter.AdapterVO;
//import com.eactive.eai.common.EAIKeys;
//import com.eactive.eai.common.exception.ExceptionUtil;
//import com.eactive.eai.common.message.*;
//import com.eactive.eai.common.property.PropManager;
//import com.eactive.eai.common.routing.IFRouter;
//import com.eactive.eai.common.routing.RoutingVO;
//import com.eactive.eai.common.util.Logger;
//import com.eactive.eai.common.util.MessageUtil;
//import com.eactive.eai.util.JpdExceptionUtil; 
//import com.eactive.eai.adapter.Keys;
//import com.eactive.eai.common.EAITable;
//import com.eactive.eai.common.exception.ExceptionHandler;
//import com.eactive.eai.common.kesa.KESAMessage;
//import com.eactive.eai.transformer.function.util.CodeConversion;
//import javax.transaction.Transaction;
//import weblogic.transaction.TxHelper;
//import com.bea.wli.common.Protocol;
//import com.eactive.eai.control.*;
//
///**
// * @jpd:process process::
// * <process name="PCompFCProcess">
// *   <clientRequest name="PCompFCProcess" method="callService" returnMethod="clientReturn">
// *     <onException name="OnException" executeOnRollback="true">
// *       <perform name="에러처리" method="printExceptionMessage"/>
// *       <finish name="Finish"/>
// *     </onException>
// *     <decision name="WarmUp">
// *       <if name="isRealCall" conditionMethod="isRealCall"/>
// *       <default name="Default">
// *         <controlSend name="PCompMRFCProcess 호출" method="pCompMRFCProcessCtrlCallService"/>
// *         <finish name="Finish"/>
// *       </default>
// *     </decision>
// *     <perform name="초기화" method="init"/>
// *     <controlSend name="PCompMRFCProcess 호출" method="pCompMRFCProcessCtrlCallService1"/>
// *     <controlSend name="응답메시지수신" method="jmsQueueReceiverCtrlReceive"/>
// *     <perform name="응답메시시 설정" method="setResponseMessage"/>
// *   </clientRequest>
// * </process>::
// */
//
//@Protocol(httpSoap=false)
//@com.bea.wli.jpd.Process(process = "<process name=\"PCompFCProcess\"> "+"  <clientRequest name=\"PCompFCProcess\" method=\"callService\" returnMethod=\"clientReturn\"> "+"    <onException name=\"OnException\" executeOnRollback=\"true\"> "+"      <perform name=\"에러처리\" method=\"printExceptionMessage\"/> "+"      <finish name=\"Finish\"/> "+"    </onException> "+"    <decision name=\"WarmUp\"> "+"      <if name=\"isRealCall\" conditionMethod=\"isRealCall\"/> "+"      <default name=\"Default\"> "+"        <controlSend name=\"PCompMRFCProcess 호출\" method=\"pCompMRFCProcessCtrlCallService\"/> "+"        <finish name=\"Finish\"/> "+"      </default> "+"    </decision> "+"    <perform name=\"초기화\" method=\"init\"/> "+"    <controlSend name=\"PCompMRFCProcess 호출\" method=\"pCompMRFCProcessCtrlCallService1\"/> "+"    <controlSend name=\"응답메시지수신\" method=\"jmsQueueReceiverCtrlReceive\"/> "+"    <perform name=\"응답메시시 설정\" method=\"setResponseMessage\"/> "+"  </clientRequest> "+"</process>")
//public class PCompFCProcess implements com.bea.jpd.ProcessDefinition
//{
//    public java.io.Serializable outMessage;
//
//    public int timeout;
//
//    public java.lang.String colId;
//
//    public java.lang.String queueName;
//
//    public java.lang.String queueConnectName;
//
//    public java.lang.String recvData;
//
//    public String adptrMsgPtrnCd;   // migration - boolean 값이 아니라 [S, N, C] 값을 가짐
//    
//    public java.lang.String adapterGroupName;
//
//    public int logPssSeq;
//
//    static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
//    
//    public java.util.Properties callProp;
//
//    public EAIMessage resEaiMsg;
//
//    public com.eactive.eai.common.message.EAIMessage reqEaiMsg;
//    
//    /**
//     * for Server Log Level - by kscheon 
//     * start
//     */
//    static Logger esbLogger = Logger.getLogger(Logger.LOGGER_ESBFW);  
//    private int svrLogLevel;                                        
//    private static ThreadLocal local = new ThreadLocal();   //경과시간 동기화를 위한 ThreadLocal
//    /**
//     * for Server Log Level - by kscheon 
//     * end
//     */
//
//    static final long serialVersionUID = 1L;
//    
//	@com.bea.wli.jpd.Callback()
//    public Callback callback;
//    
//    /*
//     * 이 주석 위의 영역에는 디자인 뷰에서 만든 변수 선언이 포함되어 있습니다.
//     * 이 주석 아래의 영역에는 디자인 뷰에서 만든 컨트롤 선언이 포함되어 있습니다.
//     * 
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     * 
//     * 이 코드 영역에서는 양방향 편집이 완전히 지원됩니다.
//     * 경고: 애플리케이션에서 이미 사용하고 있는 프로세스 변수와 컨트롤 선언을 변경하는
//     * 경우 사용 중인 모든 위치에서 해당 선언을 업데이트하지 않으면 애플리케이션에서
//     * 오류가 발생할 수 있습니다.
//     */
//    
//    /**
//     * @common:control
//     */
//	@Control()
//    private com.eactive.eai.flowcontroller.PCompMRFCProcessPControl pCompMRFCProcessCtrl;
//
//    
//    /**
//     * @common:context
//     */
//	@com.bea.wli.jpd.Context()
//    JpdContext context; //(..컨트롤 삽입 표식 - 이 라인을 수정하지 마십시오.)
//    
//    /*
//     * 이 주석 아래의 영역에는 프로세스 언어의 통신 노드에서 참조하는 java 메소드가 포함되어 있습니다.
//     *
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     *
//     * 이 코드 영역에서는 양방향 편집이 부분적으로 지원됩니다.
//     * 경고: 메소드 본문에 코드를 추가할 수 있지만 보호 섹션 블록 주석의 외부
//     * 합니다. 이 주석 내의 코드를 수정하면 이 코드를 생성한 디자인 뷰 빌더에서
//     * 정보를 볼 수 없습니다.
//     */
//
//
//    public EAIMessage clientReturn()
//    {
//    
//    		/**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * start
//         */ 
//        if(svrLogLevel >= 1) {
//            try{
//                long msgSndTm = System.currentTimeMillis();
//            
//                Long threadData = (Long)local.get();
//                long processTm =  msgSndTm - threadData.longValue();    
//                if (esbLogger.isInfo()) esbLogger.info("PCompFCProcess]  End... - 경과시간 : " + processTm + "(ms) - EAI Server Log Level is INFO");
//            } catch (Exception e) {
//            }
//        }
//        /**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * end
//         */ 
//         
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // return
//        return resEaiMsg;
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//    }
//
//
//
//
//    public void callService(com.eactive.eai.common.message.EAIMessage reqEaiMsg, java.util.Properties callProp)
//    {        
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // parameter assignment
//        this.reqEaiMsg = reqEaiMsg;
//        this.callProp = callProp;
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//    
//    	if(this.reqEaiMsg == null) return;
//        /**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * start
//         */ 
//        svrLogLevel = this.reqEaiMsg.getSvrLogLvl();
//        
//        
//        if(svrLogLevel >= 1) {
//            try{
//                long msgRcvTm = System.currentTimeMillis();
//                local.set(new Long(msgRcvTm)); 
//            
//                if (esbLogger.isInfo()) esbLogger.info("BaseFCProcess]  started... - EAI Server Log Level is INFO");
//            }catch(Exception e){
//            }
//        }
//        /**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * end
//         */ 
//    
//    }
//
//
//    public void pCompMRFCProcessCtrlCallService() throws Exception
//    {
//        try {
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//        this.recvData = pCompMRFCProcessCtrl.callService(this.reqEaiMsg, this.callProp);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        }catch (Exception e) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            String rspErrorCode = "RECEAIFPM101";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("PCompFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new RuntimeException(rspErrorCode);
//        }
//        
//    }
//
//    public void pCompMRFCProcessCtrlCallService1() throws Exception
//    {
//        logger.debug("PCompFCProcess] PCompMRFCProcess 호출 수행합니다... ["+System.currentTimeMillis()+"]");
//        Transaction t = TxHelper.getTransactionManager().suspend() ;
//        
//        try{
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//        this.recvData = pCompMRFCProcessCtrl.callService(this.reqEaiMsg, this.callProp);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        }catch (Exception e) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            String rspErrorCode = "RECEAIFPM102";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("PCompFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new RuntimeException(rspErrorCode);
//        }
//        logger.debug("PCompFCProcess] PCompMRFCProcess 호출 수행을 마칩니다... ["+System.currentTimeMillis()+"]");        
//        TxHelper.getTransactionManager().resume(t);
//
//    }
//
//    public void jmsQueueReceiverCtrlReceive() throws Exception
//    {
//        logger.debug("PCompFCProcess] 응답메시지를 수신합니다.... ["+System.currentTimeMillis()+"]");
//        try{
//        JMSQueueReceiver jmsQueueReceiverCtrl = new JMSQueueReceiver();
//        
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//        this.outMessage = jmsQueueReceiverCtrl.receive(this.queueConnectName, this.queueName, this.colId, this.timeout);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        }catch (Exception e) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            String rspErrorCode = "RECEAIFPM103";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("PCompFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new RuntimeException(rspErrorCode);
//        }
//        logger.debug("PCompFCProcess] 응답메시지를 수신했습니다.... ["+System.currentTimeMillis()+"]");
//    }
//
//	@CallbackInterface()
//    public interface Callback extends ServiceBrokerControl //(..영역 끝 표식 - 이 라인을 수정하지 마십시오.)
//    {
//    }
//    
//    /*
//     * 이 주석 아래에 삽입한 코드는 디자인 뷰에서 만든 수행 또는 조건 노드에 해당하는
//     * 메소드용입니다.
//     *
//     * 여기에서 코드를 수정하거나 새로 추가하십시오.
//     */
//    
//
//    public void init() throws Exception
//    {
//        logger.debug("PCompFCProcess ] 초기화를 실행합니다.");
//        this.resEaiMsg = this.reqEaiMsg;
//
//        this.queueConnectName = EAIKeys.PCOMP_CON_FACTORY;
//        this.queueName = EAIKeys.PCOMP_RES_QUEUE;
//        this.colId = this.reqEaiMsg.getSvcOgNo();
//        timeout = 0;
//        
//        logger.debug("PCompFCProcess ] 초기화를 실행을 마칩니다.");
//        
//    }
//
//    public void printExceptionMessage() throws Exception
//    {        
//        Exception e = this.context.getExceptionInfo().getException();
//        if (logger.isError()) logger.error("PCompFCProcess] ExceptionPath : "+e.getMessage());
//        
//        
//    }
//
//    public boolean isRealCall()
//    {
//		if(this.callProp != null) {
//            String mode = this.callProp.getProperty(EAIKeys.CALL_MODE_KEY);
//            if(mode != null && EAIKeys.CALL_MODE_WARMUP.equals(mode)) {
//                logger.debug("PCompFCProcess] Warming Up Called");
//                return false;
//            }
//            else {
//                return true;
//            }
//        }
//        else {
//            return true;
//        }
//	}
//
//
//    public void setResponseMessage() throws Exception
//    {
//        logger.debug("PCompFCProcess] 응답메시지를 설정합니다.....");
//        if(this.outMessage instanceof EAIMessage) {
//            this.resEaiMsg = (EAIMessage) this.outMessage;
//        }
//        else {
//            logger.error ("PCompFCProcess] 응답 메시지의 형식이 EAIMessage 가 아닙니다. ");
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            String rspErrorCode = "RECEAIFPM104";            
//            String rspErrorMsg = ExceptionUtil.make(rspErrorCode, msgArgs);            
//            if (logger.isError()) logger.error("PCompMRFCProcess] " + rspErrorMsg);
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new Exception(rspErrorCode);
//        }
//        logger.debug("PCompFCProcess] 응답메시지를 설정을 마칩니다.....");
//    }
//} 
