StateWaitActive.java
5.26 KB
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;
}
}
}
}