package th.co.ais.ssbsrfc.control; import java.util.ArrayList; import th.co.ais.ssbsrfc.config.StateConfig; import th.co.ais.ssbsrfc.instance.AFInstance; import th.co.ais.ssbsrfc.instance.EC02Instance; import th.co.ais.ssbsrfc.utils.Global; import ec02.af.abstracts.AbstractAF; import ec02.af.data.ECDialogue; import ec02.af.data.EquinoxProperties; import ec02.af.data.EquinoxRawData; import ec02.af.exception.ActionProcessException; import ec02.af.exception.ComposeInstanceException; import ec02.af.exception.ConstructRawDataException; import ec02.af.exception.ExtractInstanceException; import ec02.af.exception.ExtractRawDataException; import ec02.interfaces.IEC02; import ec02.utils.AppLog; public class mainAF extends AbstractAF implements IEC02 { @Override public ECDialogue actionProcess(EquinoxProperties eqxProp, ArrayList eqxRawDataList, Object instance) throws ActionProcessException { AppLog.d("[CURRENT STATE] : " + eqxProp.getState()); EC02Instance ec02Ins = (EC02Instance) instance; ec02Ins.setEquinoxProperties(eqxProp); ec02Ins.setAbstractAF((AbstractAF) this); ec02Ins.getAFInstance().setStartFlowTimeStampForEmpty(); String currentState = eqxProp.getState(); StateManager sm = new StateManager(currentState); String eqxState = sm.doAction((AbstractAF) this, ec02Ins, eqxRawDataList); EquinoxProperties newEqxProp = new EquinoxProperties(); newEqxProp.setState(eqxState); // TODO must be have function to calculate timeout newEqxProp.setTimeout(ec02Ins.getTimeout()); ECDialogue ecDialogue = new ECDialogue(newEqxProp, ec02Ins); return ecDialogue; } @Override public boolean verifyAFConfiguration(String arg0) { // TODO Auto-generated method stub return true; } /* * 5.4 ComposeInstance Module */ @Override public String composeInstance(Object instance) throws ComposeInstanceException { // 1. Read instance into variable EC02Instance ec02Instance = (EC02Instance) instance; AFInstance afInstance = ec02Instance.getAFInstance(); String encodeString = ""; // 2. try to encode instanceData bean object into string format try { encodeString = Global.encodeInstance(afInstance); } catch (Exception e) { e.printStackTrace(); } // 3. return instanceData in string format return encodeString; } /* * 5.3 ConstructRawData Module */ @Override public ArrayList constructRawData(Object instance) throws ConstructRawDataException { // 1. Read instance into variable EC02Instance ins = (EC02Instance) instance; ArrayList list = ins.getEqxRawDataList(); // 2. Return equinox raw data return list; } /* * 5.1 ExtractInstance Module */ @Override public Object extractInstance(String instance) throws ExtractInstanceException { EC02Instance ec02Instance = new EC02Instance(); AFInstance afInstance = null; // 1. Check instance data from equinox is null or not if ((instance == null) || instance.isEmpty()) { // 1.1. If instance data is null, create new instanceData bean object afInstance = new AFInstance(); } else { // 1.2. If instance data is not null, try to decode instance to instanceData bean object try { afInstance = Global.decodeInstance(instance); } catch (Exception e) { e.printStackTrace(); } } ec02Instance.setAFInstance(afInstance); // 2. return instanceData bean object return (Object) ec02Instance; } /* * 5.2 ExtractRawData Module */ @Override public void extractRawData(Object instanceData, ArrayList rawDatas) throws ExtractRawDataException { EC02Instance ec02Instance = (EC02Instance) instanceData; // 1. Loop RawData for (EquinoxRawData r : rawDatas) { // 1.1. Get event type from equinox raw data String eventType = StateConfig.getEventTypeFromEquinoxRawData(ec02Instance, r); // 1.1.7. Set raw event type = event type r.setRawEventType(eventType); ec02Instance.getAFInstance().listTimeoutRemove(r.getInvoke()); AppLog.d("[eventType] : " + eventType); } } }