Blame view

src/th/co/ais/ssbsrfc/state/StateWaitActive.java 5.26 KB
1048b156   Suraputt Suntimitr   Template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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<EquinoxRawData> eqxRawDataList = new ArrayList<EquinoxRawData>();

	@Override
	public String doAction(AbstractAF abstractAF, Object instance, ArrayList<EquinoxRawData> 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<String> 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<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
		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;
			}
		}
	}
}