package th.co.ais.ssbsrfc.state; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.ArrayUtils; import th.co.ais.ssbsrfc.config.Constant; import th.co.ais.ssbsrfc.config.StateConfig; import th.co.ais.ssbsrfc.control.FlowManager; import th.co.ais.ssbsrfc.control.SubStateManager; import th.co.ais.ssbsrfc.instance.EC02Instance; import th.co.ais.ssbsrfc.instance.ManageTime; import th.co.ais.ssbsrfc.utils.Global; import th.co.ais.ssbsrfc.utils.Log; import ec02.af.abstracts.AbstractAF; import ec02.af.data.EquinoxRawData; import ec02.af.data.GlobalData; import ec02.af.interfaces.IAFState; import ec02.utils.AppLog; public class StateWaitActive implements IAFState { private String eqxState = null; private ArrayList eqxRawDataList = new ArrayList(); @Override public String doAction(AbstractAF abstractAF, Object instance, ArrayList eqxRawDataList) { AppLog.d("[### StateWaitActive ###]"); EC02Instance ec02Instance = (EC02Instance) instance; Global.getConfigEC02(abstractAF, ec02Instance); // MultiFlow new if (StateConfig.isMultiFlow) { FlowManager flowManager = new FlowManager(abstractAF, ec02Instance); // E01 if (abstractAF.getUtils().getGlobalData().isRecieve() ) { GlobalData e01 = abstractAF.getUtils().getGlobalData(); String invoke = e01.getTransactionId(); ec02Instance.getAFInstance().listTimeoutRemove(invoke); EquinoxRawData equinoxRawData = new EquinoxRawData(); equinoxRawData.setInvoke(invoke); flowManager.start(equinoxRawData); this.subStateManager(abstractAF, ec02Instance, null); flowManager.end(StateConfig.STATE_ACTIVE, this.eqxState, eqxRawDataList, this.eqxRawDataList); } else if (eqxRawDataList.isEmpty()) { // TIMEOUT ManageTime mt = new ManageTime(); mt.setListTimeout(ec02Instance.getAFInstance().getGlobalListTimeout()); List listTimeout = mt.getState(false); ec02Instance.getAFInstance().setGlobalListTimeout(mt.getListTimeout()); for (String unique : listTimeout) { EquinoxRawData equinoxRawData = new EquinoxRawData(); equinoxRawData.getRawDataAttributes().put("unique", unique); equinoxRawData.setRet("4"); flowManager.start(equinoxRawData); this.subStateManager(abstractAF, ec02Instance, null); flowManager.end(StateConfig.STATE_ACTIVE, this.eqxState, eqxRawDataList, this.eqxRawDataList); } } // CASE SUCCESS, ERROR, REJECT, ABORT else { for(EquinoxRawData equinoxRawData : eqxRawDataList) { flowManager.start(equinoxRawData); this.subStateManager(abstractAF, ec02Instance, equinoxRawData); flowManager.end(StateConfig.STATE_ACTIVE, this.eqxState, eqxRawDataList, this.eqxRawDataList); } } ec02Instance.setEqxRawDataList(this.eqxRawDataList); this.checkEqxState(ec02Instance); } else { // E01, TIMEOUT if (abstractAF.getUtils().getGlobalData().isRecieve() || eqxRawDataList.isEmpty()) { this.subStateManager(abstractAF, ec02Instance, null); } else { // CASE SUCCESS, ERROR, REJECT, ABORT for(EquinoxRawData equinoxRawData : eqxRawDataList) { this.subStateManager(abstractAF, ec02Instance, equinoxRawData); } } int count = ec02Instance.getAFInstance().getListTimeout().size(); if (count > 0 && ec02Instance.getTimeout() == null) { ManageTime mt = new ManageTime(ec02Instance); mt.setListTimeout(ec02Instance.getAFInstance().getListTimeout()); String timeout = mt.getCalTime(); if (timeout == null) { timeout = "0"; } ec02Instance.setTimeout(timeout); } Log.detailLog(ec02Instance, abstractAF, StateConfig.STATE_ACTIVE, this.eqxState, eqxRawDataList, this.eqxRawDataList); Log.summaryLog(ec02Instance, abstractAF); ec02Instance.setEqxRawDataList(this.eqxRawDataList); this.checkEqxState(ec02Instance); } AppLog.d("[### END StateWaitActive ###]"); return this.eqxState; } public void subStateManager(AbstractAF abstractAF,EC02Instance ec02Instance, EquinoxRawData equinoxRawData) { String currentState = ec02Instance.getAFInstance().getCurrentState(); if (currentState.equals(StateConfig.SSTATE_END)) { String eventType = equinoxRawData.getRawEventType(); currentState = StateConfig.getSubStateFromEventType(eventType); } SubStateManager subStateManager = new SubStateManager(currentState); List eqxList = subStateManager.doActionSubState(abstractAF, ec02Instance, equinoxRawData); for(EquinoxRawData eqx : eqxList) { String type = eqx.getType(); String invoke = eqx.getInvoke(); if (type.equals("request") && (invoke.length() > 0 || invoke != null)) { ec02Instance.getAFInstance().putDicInvoke(invoke, Global.getInvokeForManageFlow(ec02Instance)); } this.eqxRawDataList.add(eqx); } // END currentState = ec02Instance.getAFInstance().getCurrentState(); if (currentState.equals("END")) { this.eqxState = StateConfig.STATE_IDLE; } else { this.eqxState = StateConfig.STATE_ACTIVE; } } public void checkEqxState(EC02Instance ec02Instance) { if (!ArrayUtils.contains(Constant.arrSingleFlow, ec02Instance.getAFInstance().getFlow())) { int count = ec02Instance.getAFInstance().getListFlow().size(); if (count > 0 && this.eqxState.equals(StateConfig.STATE_IDLE)) { this.eqxState = StateConfig.STATE_ACTIVE; } } } }