StateIdle.java 4.61 KB
package th.co.ais.ssbsrfc.state;

import java.util.ArrayList;
import java.util.List;

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.interfaces.IAFState;
import ec02.utils.AppLog;

public class StateIdle implements IAFState {

	private String eqxState = null;
	private ArrayList<EquinoxRawData> eqxRawDataList = new ArrayList<EquinoxRawData>();

	@Override
	public String doAction(AbstractAF abstractAF, Object instance, ArrayList<EquinoxRawData> eqxRawDataList) {
		AppLog.d("[### StateIdle ###]");
		EC02Instance ec02Instance = (EC02Instance) instance;
		Global.getConfigEC02(abstractAF, ec02Instance);
		// MultiFlow new
		if (StateConfig.isMultiFlow) {
			// E01 Recieve
			if (abstractAF.getUtils().getGlobalData().isRecieve()) {
				EquinoxRawData eqxRaw = new EquinoxRawData();
				eqxRaw.setInvoke(abstractAF.getUtils().getGlobalData().getTransactionId());
				eqxRaw.setType(Constant.RESPONSE.toLowerCase());
				eqxRaw.setRawEventType(StateConfig.Incoming_Unknown);
				
				this.subStateManager(abstractAF, ec02Instance, eqxRaw);
				Log.detailLog(ec02Instance, abstractAF, StateConfig.STATE_IDLE, this.eqxState, eqxRawDataList, this.eqxRawDataList);
				Log.summaryLog(ec02Instance, abstractAF);
			}
			// rowdatalist 
			if (eqxRawDataList != null) {
				FlowManager flowManager = new FlowManager(abstractAF, ec02Instance);
				for(EquinoxRawData equinoxRawData : eqxRawDataList) {
					// manage flow start
					flowManager.start(equinoxRawData);
					this.subStateManager(abstractAF, ec02Instance, equinoxRawData);
					flowManager.end(StateConfig.STATE_IDLE, this.eqxState, eqxRawDataList, this.eqxRawDataList);
				}
			}
			ec02Instance.setEqxRawDataList(this.eqxRawDataList);
		} else {
			for(EquinoxRawData equinoxRawData : eqxRawDataList) {
				ec02Instance.getAFInstance().setInitialInvoke(equinoxRawData.getInvoke());
				String eventType = equinoxRawData.getRawEventType();
				String ssName = StateConfig.getSubStateFromEventType(eventType);
				SubStateManager subStateManager = new SubStateManager(ssName);
				List<EquinoxRawData> eqxList = subStateManager.doActionSubState(abstractAF, ec02Instance, equinoxRawData);
				String currentState = ec02Instance.getAFInstance().getCurrentState();
				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);
				}
				
				if (currentState.equals("END") || currentState.equals("")) {
					this.eqxState = StateConfig.STATE_IDLE;
				} else {
					this.eqxState = StateConfig.STATE_ACTIVE;
				}
			}
			
			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();
				ec02Instance.setTimeout(timeout);
			}
			Log.detailLog(ec02Instance, abstractAF, StateConfig.STATE_IDLE, this.eqxState, eqxRawDataList, this.eqxRawDataList);
			Log.summaryLog(ec02Instance, abstractAF);
			ec02Instance.setEqxRawDataList(this.eqxRawDataList);
		}
		AppLog.d("[### END StateIdle ###]");
		return this.eqxState;
	}
	
	public void subStateManager(AbstractAF abstractAF,EC02Instance ec02Instance, EquinoxRawData equinoxRawData)
	{
		String eventType = equinoxRawData.getRawEventType();
		String ssName = StateConfig.getSubStateFromEventType(eventType);
		
		SubStateManager subStateManager = new SubStateManager(ssName);
		List<EquinoxRawData> 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
		String currentState = ec02Instance.getAFInstance().getCurrentState();
		if (currentState.equals("END")) {
			this.eqxState = StateConfig.STATE_IDLE;
		} else {
			this.eqxState = StateConfig.STATE_ACTIVE;
		}
	}
}