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.common.EAIKeys;
//import com.eactive.eai.common.exception.ExceptionUtil;
//import com.eactive.eai.common.message.EAIMessage;
//import com.eactive.eai.common.util.Logger;
//import com.eactive.eai.control.*;
//import com.eactive.eai.common.routing.IFRouter;
//
///**
// * @jpd:process process::
// * <process name="PCompOutFCProcess">
// *   <clientRequest name="Client Request with Return" method="callService" returnMethod="clientReturn">
// *     <decision name="Warmup">
// *       <if name="isRealCall" conditionMethod="isRealCall"/>
// *       <default name="Default">
// *         <finish name="Finish"/>
// *       </default>
// *     </decision>
// *   </clientRequest>
// *   <block name="Group">
// *     <onException name="OnException">
// *       <perform name="에러처리" method="printExceptionMessage"/>
// *       <finish name="Finish"/>
// *     </onException>
// *     <perform name="초기화" method="init"/>
// *     <controlSend name="Outbound호출" method="ifRouterCtrlProcess1"/>
// *     <controlSend name="응답메시지리턴" method="jmsQueueSenderCtrlSendObject1"/>
// *   </block>
// * </process>::
// * @jws:protocol java-call="false" jms-soap="false"
// */
//@com.bea.wli.common.Protocol(javaCall = false,
//                             jmsSoap = false, httpSoap = false)
//@com.bea.wli.jpd.Process(process = "<process name=\"PCompOutFCProcess\"> " +
//                                   "  <clientRequest name=\"Client Request with Return\" method=\"callService\" returnMethod=\"clientReturn\"> " +
//                                   "    <decision name=\"Warmup\"> " +
//                                   "      <if name=\"isRealCall\" conditionMethod=\"isRealCall\"/> " +
//                                   "      <default name=\"Default\"> " +
//                                   "        <finish name=\"Finish\"/> " +
//                                   "      </default> " +
//                                   "    </decision> " +
//                                   "  </clientRequest> " +
//                                   "  <block name=\"Group\"> " +
//                                   "    <onException name=\"OnException\"> " +
//                                   "      <perform name=\"에러처리\" method=\"printExceptionMessage\"/> " +
//                                   "      <finish name=\"Finish\"/> " +
//                                   "    </onException> " +
//                                   "    <perform name=\"초기화\" method=\"init\"/> " +
//                                   "    <controlSend name=\"Outbound호출\" method=\"ifRouterCtrlProcess1\"/> " +
//                                   "    <controlSend name=\"응답메시지리턴\" method=\"jmsQueueSenderCtrlSendObject1\"/> " +
//                                   "  </block> " +
//                                   "</process>")
//public class PCompOutFCProcess implements com.bea.jpd.ProcessDefinition
//{
//    public java.lang.String colId;
//
//    public java.io.Serializable outMessage;
//
//    public java.lang.String queueName;
//
//    public java.lang.String queueConName;
//
//    public java.lang.String ack;
//
//    public com.eactive.eai.common.message.EAIMessage resEaiMsg;
//
//    public java.util.Properties callProp;
//
//    public com.eactive.eai.common.message.EAIMessage reqEaiMsg;
//    
//    static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
//
//    static final long serialVersionUID = 1L;
//    
//    @com.bea.wli.jpd.Callback()
//    public Callback callback;
//    
//    /*
//     * 이 주석 위의 영역에는 디자인 뷰에서 만든 변수 선언이 포함되어 있습니다.
//     * 이 주석 아래의 영역에는 디자인 뷰에서 만든 컨트롤 선언이 포함되어 있습니다.
//     * 
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     * 
//     * 이 코드 영역에서는 양방향 편집이 완전히 지원됩니다.
//     * 경고: 애플리케이션에서 이미 사용하고 있는 프로세스 변수와 컨트롤 선언을 변경하는
//     * 경우 사용 중인 모든 위치에서 해당 선언을 업데이트하지 않으면 애플리케이션에서
//     * 오류가 발생할 수 있습니다.
//     */
//    
//    /**
//     * @common:context
//     */
//    @com.bea.wli.jpd.Context()
//    JpdContext context; //(..컨트롤 삽입 표식 - 이 라인을 수정하지 마십시오.)
//    
//    /*
//     * 이 주석 아래의 영역에는 프로세스 언어의 통신 노드에서 참조하는 java 메소드가 포함되어 있습니다.
//     *
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     *
//     * 이 코드 영역에서는 양방향 편집이 부분적으로 지원됩니다.
//     * 경고: 메소드 본문에 코드를 추가할 수 있지만 보호 섹션 블록 주석의 외부
//     * 합니다. 이 주석 내의 코드를 수정하면 이 코드를 생성한 디자인 뷰 빌더에서
//     * 정보를 볼 수 없습니다.
//     */
//
//
//
//
//
//    public void jmsQueueSenderCtrlSendObject() throws Exception
//    {
//        logger.debug("PCompOutFCProcess] 응답 메시지를 Queue에 전송합니다..");
//        this.outMessage = this.resEaiMsg;
//        JMSQueueSender jmsQueueSenderCtrl = new JMSQueueSender();
//        
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // method call
//        jmsQueueSenderCtrl.sendObject(this.queueConName, this.queueName, this.outMessage, this.colId);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        logger.debug("PCompOutFCProcess] 응답 메시지를 Queue에 전송을  마칩니다..");
//    }
//
//    public java.lang.String clientReturn()
//    {
//        this.ack = "PCompOutFCProcess] callService Called"; 
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // return
//        return ack;
//        //#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. #//
//    }
//
//
//
//
//    public void ifRouterCtrlProcess1() throws Exception
//    {
//        logger.debug("PCompOutFCProcess] outbound를 호출합니다..");
//        try
//        {
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//            this.resEaiMsg = IFRouter.process(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[2];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            msgArgs[1] = "" +
//                         this.reqEaiMsg.getSvcPssSeq();
//            String rspErrorCode = "RECEAIFPM301";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError())
//                logger.error("PCompOutFCProcess] " +
//                             rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
////            throw new RuntimeException(rspErrorCode); //async type 이므로 throw하지 않고 응답메시지에 에러 코드를 set해서 넘김
//        }
//        logger.debug("PCompOutFCProcess] outbound를 호출을 마칩니다..");        
//    }
//
//    public void jmsQueueSenderCtrlSendObject1() throws Exception
//    {
//        logger.debug("PCompOutFCProcess] 응답 메시지를 Queue에 전송합니다..");
//        this.outMessage = this.resEaiMsg;
//        try
//        {
//        JMSQueueSender jmsQueueSenderCtrl = new JMSQueueSender();
//        
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // method call
//            jmsQueueSenderCtrl.sendObject(this.queueConName, this.queueName, this.outMessage, this.colId);
//        // 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 = "RECEAIFPM302";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("PCompOutFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new RuntimeException(rspErrorCode);
//        }
//        logger.debug("PCompOutFCProcess] 응답 메시지를 Queue에 전송을  마칩니다.." );        
//    }
//
//
//	@CallbackInterface()
//    public interface Callback extends ServiceBrokerControl //(..영역 끝 표식 - 이 라인을 수정하지 마십시오.)
//    {
//    }
//    
//    /*
//     * 이 주석 아래에 삽입한 코드는 디자인 뷰에서 만든 수행 또는 조건 노드에 해당하는
//     * 메소드용입니다.
//     *
//     * 여기에서 코드를 수정하거나 새로 추가하십시오.
//     */
//    
//
//    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("PCompOutFCProcess] Warming Up Called");
//                return false;
//            }
//            else {
//                return true;
//            }
//        }
//        else {
//            return true;
//        }
//	
//    }
//
//    public void init() throws Exception
//    {
//        logger.debug("PCompOutFCProcess] 초기화를 수행합니다.." );
//        this.resEaiMsg = this.reqEaiMsg;
//        
//        this.queueConName = EAIKeys.PCOMP_CON_FACTORY;
//        this.queueName = EAIKeys.PCOMP_OUT_RES_QUEUE;
//        
//        this.colId = this.reqEaiMsg.getSvcOgNo();
//         logger.debug("PCompOutFCProcess] 초기화를 마칩니다.." );
//    
//    }
//
//    public void printExceptionMessage() throws Exception
//    {
//        Exception e = this.context.getExceptionInfo().getException(); 
//        
//        if (logger.isError()) logger.error("PCompOutFCProcess] ExceptionPath : "+e.getMessage());
//        try {
//        	JMSQueueSender jmsQueueSenderCtrl = new JMSQueueSender();
//            jmsQueueSenderCtrl.sendObject(this.queueConName, this.queueName, this.resEaiMsg, this.colId);
//        } catch(Exception ex) {
//            if (logger.isError()) logger.error("PCompOutFCProcess] ExceptionPath Error: "+ex.getMessage());
//            ex.printStackTrace();
//        }
//
//    }
//} 
