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.dao.DAOFactory;
//import com.eactive.eai.common.exception.ExceptionUtil;
//import com.eactive.eai.common.message.*;
//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.ServiceLocator;
//import com.eactive.eai.timer.TimerAdminVO;
//import com.eactive.eai.timer.TimerDAO;
//import com.eactive.eai.timer.TimerKeys;
//import com.eactive.eai.timer.TimerManager;
//import com.eactive.eai.util.JpdExceptionUtil;
//import javax.transaction.Transaction;
//import javax.transaction.UserTransaction;
//import weblogic.transaction.TxHelper;
//import com.bea.wli.common.Protocol;
//import com.eactive.eai.control.LogSender; 
//
///**
// * @jpd:process process::
// * <process name="TimerFCProcess">
// *   <clientRequest name="Timer Flow Control" method="callService" returnMethod="clientReturn">
// *     <onException name="OnException">
// *       <perform name="Error났을경우" method="printExceptionMessage"/>
// *     </onException>
// *     <decision name="WarmUp">
// *       <if name="isRealCall" conditionMethod="isRealCall"/>
// *       <default name="Default">
// *         <finish name="Finish"/>
// *       </default>
// *     </decision>
// *     <perform name="TimerAdminVO정보 가지고옮" method="PreSetting"/>
// *     <decision name="Decision">
// *       <if name="취소거래" conditionMethod="CancelTransactionGB">
// *         <perform name="취소거래호출하기위한 설정" method="CancelSetting"/>
// *         <controlSend name="취소거래OutBound프로세스호출" method="ifRouterProcess1">
// *           <onException name="OnException" retryCount="0">
// *             <perform name="취소거래실패했을경우 setting및 rollback" method="RollBack"/>
// *           </onException>
// *         </controlSend>
// *         <decision name="Decision">
// *           <if name="Timeout거래" conditionMethod="TimeoutTransactionGB">
// *             <perform name="Timeout거래호출을 위한 설정" method="TimeoutSetting"/>
// *             <controlSend name="Timeout거래OutBound프로세스호출" method="ifRouterProcess2">
// *               <onException name="OnException">
// *                 <perform name="Timeout거래실패했을경우 setting및 rollback" method="RollBack"/>
// *               </onException>
// *             </controlSend>
// *           </if>
// *           <default name="Timeout거래 안보냄"/>
// *         </decision>
// *       </if>
// *       <default name="재전송거래">
// *         <perform name="재전송호출하기위한설정" method="ReSendSetting"/>
// *         <controlSend name="Outbound프로세스호출" method="ifRouterProcess3">
// *           <onException name="OnException" retryCount="0">
// *             <perform name="재전송거래 실패했을경우 setting및rollback" method="RollBack"/>
// *           </onException>
// *         </controlSend>
// *       </default>
// *     </decision>
// *   </clientRequest>
// * </process>::
// */
//@Protocol(httpSoap=false)
//@com.bea.wli.jpd.Process(process = "<process name=\"TimerFCProcess\"> " +
//                                   "  <clientRequest name=\"Timer Flow Control\" method=\"callService\" returnMethod=\"clientReturn\"> " +
//                                   "    <onException name=\"OnException\"> " +
//                                   "      <perform name=\"Error났을경우\" method=\"printExceptionMessage\"/> " +
//                                   "    </onException> " +
//                                   "    <decision name=\"WarmUp\"> " +
//                                   "      <if name=\"isRealCall\" conditionMethod=\"isRealCall\"/> " +
//                                   "      <default name=\"Default\"> " +
//                                   "        <finish name=\"Finish\"/> " +
//                                   "      </default> " +
//                                   "    </decision> " +
//                                   "    <perform name=\"TimerAdminVO정보 가지고옮\" method=\"PreSetting\"/> " +
//                                   "    <decision name=\"Decision\"> " +
//                                   "      <if name=\"취소거래\" conditionMethod=\"CancelTransactionGB\"> " +
//                                   "        <perform name=\"취소거래호출하기위한 설정\" method=\"CancelSetting\"/> " +
//                                   "        <controlSend name=\"취소거래OutBound프로세스호출\" method=\"ifRouterProcess1\"> " +
//                                   "          <onException name=\"OnException\" retryCount=\"0\"> " +
//                                   "            <perform name=\"취소거래실패했을경우 setting및 rollback\" method=\"RollBack\"/> " +
//                                   "          </onException> " +
//                                   "        </controlSend> " +
//                                   "        <decision name=\"Decision\"> " +
//                                   "          <if name=\"Timeout거래\" conditionMethod=\"TimeoutTransactionGB\"> " +
//                                   "            <perform name=\"Timeout거래호출을 위한 설정\" method=\"TimeoutSetting\"/> " +
//                                   "            <controlSend name=\"Timeout거래OutBound프로세스호출\" method=\"ifRouterProcess2\"> " +
//                                   "              <onException name=\"OnException\"> " +
//                                   "                <perform name=\"Timeout거래실패했을경우 setting및 rollback\" method=\"RollBack\"/> " +
//                                   "              </onException> " +
//                                   "            </controlSend> " +
//                                   "          </if> " +
//                                   "          <default name=\"Timeout거래 안보냄\"/> " +
//                                   "        </decision> " +
//                                   "      </if> " +
//                                   "      <default name=\"재전송거래\"> " +
//                                   "        <perform name=\"재전송호출하기위한설정\" method=\"ReSendSetting\"/> " +
//                                   "        <controlSend name=\"Outbound프로세스호출\" method=\"ifRouterProcess3\"> " +
//                                   "          <onException name=\"OnException\" retryCount=\"0\"> " +
//                                   "            <perform name=\"재전송거래 실패했을경우 setting및rollback\" method=\"RollBack\"/> " +
//                                   "          </onException> " +
//                                   "        </controlSend> " +
//                                   "      </default> " +
//                                   "    </decision> " +
//                                   "  </clientRequest> " +
//                                   "</process>")
//public class TimerFCProcess implements com.bea.jpd.ProcessDefinition
//{
//    static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
//    
//    public java.util.Properties callProp;
//
//    public EAIMessage resEaiMsg;
//
//    public com.eactive.eai.common.message.EAIMessage reqEaiMsg;
//
//    static final long serialVersionUID = 1L;
//    
//    @com.bea.wli.jpd.Callback()
//    public Callback callback;
//    
//    public TimerAdminVO timerAdminVO;
//    
//    public String MsgTrceColTxt = "";
//    
//    /*
//     * 이 주석 위의 영역에는 디자인 뷰에서 만든 변수 선언이 포함되어 있습니다.
//     * 이 주석 아래의 영역에는 디자인 뷰에서 만든 컨트롤 선언이 포함되어 있습니다.
//     * 
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     * 
//     * 이 코드 영역에서는 양방향 편집이 완전히 지원됩니다.
//     * 경고: 애플리케이션에서 이미 사용하고 있는 프로세스 변수와 컨트롤 선언을 변경하는
//     * 경우 사용 중인 모든 위치에서 해당 선언을 업데이트하지 않으면 애플리케이션에서
//     * 오류가 발생할 수 있습니다.
//     */
//    
//    /**
//     * @common:context
//     */
//    @com.bea.wli.jpd.Context()
//    JpdContext context; //(..컨트롤 삽입 표식 - 이 라인을 수정하지 마십시오.)
//    
//    /*
//     * 이 주석 아래의 영역에는 프로세스 언어의 통신 노드에서 참조하는 java 메소드가 포함되어 있습니다.
//     *
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     *
//     * 이 코드 영역에서는 양방향 편집이 부분적으로 지원됩니다.
//     * 경고: 메소드 본문에 코드를 추가할 수 있지만 보호 섹션 블록 주석의 외부
//     * 합니다. 이 주석 내의 코드를 수정하면 이 코드를 생성한 디자인 뷰 빌더에서
//     * 정보를 볼 수 없습니다.
//     */
//
//
//    public EAIMessage clientReturn()
//    {
//        //#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. #//
//    }
//
//    public void ifRouterProcess1() throws Exception
//    {
//        if (logger.isDebug())
//            logger.debug("TimerFCProcess] ifRouterProcess cancel ");
//        //#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. #//
//    }
//
//
//    public void ifRouterProcess3() throws Exception
//    {
//        
//        if (logger.isDebug()) logger.debug("TimerFCProcess] ifRouterProcess resend ");
//        //this.resEaiMsg = this.reqEaiMsg;
//        //#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. #//
//     
//    }
//
//
//    public void ifRouterProcess2() throws Exception
//    {
//        if (logger.isDebug()) logger.debug("TimerFCProcess] ifRouterProcess timeout ");
//        //#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. #//
//    }
//
//	@CallbackInterface()
//    public interface Callback extends ServiceBrokerControl //(..영역 끝 표식 - 이 라인을 수정하지 마십시오.)
//    {
//    }
//    
//    /*
//     * 이 주석 아래에 삽입한 코드는 디자인 뷰에서 만든 수행 또는 조건 노드에 해당하는
//     * 메소드용입니다.
//     *
//     * 여기에서 코드를 수정하거나 새로 추가하십시오.
//     */
//    
//
//
//    public boolean CancelTransactionGB()
//    {
//        
//        if (timerAdminVO.getCnclTranEn().equals("1")){
//            if (logger.isDebug()) logger.debug("TimerFCProcess] CancelTransactionGB true");
//            return true;
//        }else{
//            if (logger.isDebug()) logger.debug("TimerFCProcess] CancelTransactionGB false");
//            return false;
//        }
//		
//	}
//
//
//    public void PreSetting() throws Exception
//    {
//        if (logger.isDebug()) logger.debug("TimerFCProcess] PreSetting");
//        String timerAdminName = callProp.getProperty(TimerKeys.TIMER_ADMIN_NAME);
//        TimerManager timerManager = TimerManager.getInstance();
//        timerAdminVO = timerManager.getTimerAdminRule(timerAdminName);
//        
//        String timerInfoName = callProp.getProperty(TimerKeys.TIMER_ADMIN_NAME);
//        MsgTrceColTxt = callProp.getProperty(TimerKeys.MSG_TRCE_COL_TXT );
//    }
//
//    public boolean TimeoutTransactionGB()
//    {
//        if ( timerAdminVO.getTmoTranTrsYn().equals("1")){
//            return true;
//        }else{
//            return false;
//        }
//	}
//
//    public void CancelSetting() throws Exception
//    {
//        reqEaiMsg.setSvcPssSeq(1);
//        
//        //Timeout table 상태 변경
//        DAOFactory daoFactory = DAOFactory.newInstance();
//        TimerDAO dao = null;
//        Transaction tx = null;
//        try {
//            tx = TxHelper.getTransactionManager().suspend();
//            dao = (TimerDAO)daoFactory.create(TimerDAO.class);
//            dao.updateTimerInfoStatusSend(MsgTrceColTxt,TimerKeys.STATUS_FLAG_CANCEL_RUN);
//        } catch(Exception e) {
//            e.printStackTrace();
//            String rspErrorCode = "RECEAIFTF001";   
//            String orgErrorCode = ExceptionUtil.getErrorCode(e, rspErrorCode);
//            String rspErrorMsg = ExceptionUtil.make(rspErrorCode, orgErrorCode);
//            if (logger.isError()) logger.error("TimerFCProcess] " + rspErrorMsg);
//            throw new Exception(orgErrorCode);   
//        }finally {
//            if(tx!=null) {
//                try {
//                    TxHelper.getTransactionManager().resume(tx);
//                } catch(Exception e) {   
//                }   
//            }   
//        }
//    }
//
//    public void ReSendSetting() throws Exception
//    {
//        if (logger.isDebug()) {
//            logger.debug("TimerFCProcess] ReSendSetting start ");
//            logger.debug("TimerFCProcess] ReSendSetting "+MsgTrceColTxt);
//        }
//        reqEaiMsg.setSvcPssSeq(1);
//        
//        //Timeout table 상태 변경
//        DAOFactory daoFactory = DAOFactory.newInstance();
//        TimerDAO dao = null;
//        Transaction tx = null;
//        try {
//            tx = TxHelper.getTransactionManager().suspend();
//            dao = (TimerDAO)daoFactory.create(TimerDAO.class);
//        
//            dao.updateTimerInfoStatusSend(MsgTrceColTxt,TimerKeys.STATUS_FLAG_RESEND_RUN);
//
//        } catch(Exception e) {
//            e.printStackTrace();
//            String rspErrorCode = "RECEAIFTF002";   
//            String orgErrorCode = ExceptionUtil.getErrorCode(e, rspErrorCode);
//            String rspErrorMsg = ExceptionUtil.make(rspErrorCode, orgErrorCode);
//            if (logger.isError()) logger.error("TimerFCProcess] " + rspErrorMsg);
//            throw new Exception(orgErrorCode);    
//        }finally {
//            if(tx!=null) {
//                try {
//                    TxHelper.getTransactionManager().resume(tx);
//                } catch(Exception e) {   
//                }   
//            }   
//        }
//        if (logger.isDebug()) logger.debug("TimerFCProcess] ReSendSetting end ");
//    }
//    public void RollBack() throws Exception
//    {
//        Exception e = context.getExceptionInfo().getException();
//        e.printStackTrace();
//        String[] msgArgs = new String[1];
//        msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//        String rspErrorCode = "RECEAIFTF003";            
//        String orgErrorCode = ExceptionUtil.getErrorCode(e, rspErrorCode);
//        String rspErrorMsg = ExceptionUtil.make(rspErrorCode, orgErrorCode, msgArgs);
//        if (logger.isError()) logger.error("TimerFCProcess] " + rspErrorMsg);
//        this.resEaiMsg.setRspErrCd(rspErrorCode);
//        this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//        
//        //TimerInfo table 상태 변경
//        DAOFactory daoFactory = DAOFactory.newInstance();
//        TimerDAO dao = null;
//        Transaction tx = null;
//        try {
//            tx = TxHelper.getTransactionManager().suspend();
//            dao = (TimerDAO)daoFactory.create(TimerDAO.class);
//            dao.updateTimerInfoStatusSend(MsgTrceColTxt,TimerKeys.STATUS_FLAG_ERROR);
//
//        } catch(Exception e1) {
//            e.printStackTrace();
//            String rspErrorCode1 = "RECEAIFTF004";   
//            String orgErrorCode1 = ExceptionUtil.getErrorCode(e, rspErrorCode1);
//            String rspErrorMsg1 = ExceptionUtil.make(rspErrorCode1, orgErrorCode1);
//            if (logger.isError()) logger.error("TimerFCProcess] " + rspErrorMsg1);
//            throw new Exception(orgErrorCode);    
//        }finally {
//            if(tx!=null) {
//                try {
//                    TxHelper.getTransactionManager().resume(tx);
//                } catch(Exception e1) {   
//                }   
//            }   
//        }        
//    }
//
//
//
//
//    public void TimeoutSetting() throws Exception
//    {
//        reqEaiMsg.setSvcPssSeq(2);
//    }
//
//
//
//    public void printExceptionMessage() throws Exception
//    {
//        Exception e = this.context.getExceptionInfo().getException();
//        String rspErrorCode1 = "RECEAIFTF005";   
//        String orgErrorCode1 = ExceptionUtil.getErrorCode(e, rspErrorCode1);
//        String rspErrorMsg1 = ExceptionUtil.make(rspErrorCode1, orgErrorCode1);
//        if (logger.isError()) logger.error("TimerFCProcess] " + rspErrorMsg1);
//        e.printStackTrace();
//        
//        Object[] objs = new Object[1];
//        objs[0] = null;
//        this.resEaiMsg.setBizMsg(objs);
//    
//    
//    }
//
//    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)) {
//                System.out.println("TimerFCProcess] Warming Up Called");
//                return false;
//            }
//            else {
//                return true;
//            }
//        }
//        else {
//            return true;
//        }
//	}
//
//} 
