mainAF.java 4.02 KB
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<EquinoxRawData> 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<EquinoxRawData> constructRawData(Object instance)
			throws ConstructRawDataException {
		// 1. Read instance into variable
		EC02Instance ins = (EC02Instance) instance;
		ArrayList<EquinoxRawData> 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<EquinoxRawData> 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());
			ec02Instance.getAFInstance().setEvent(eventType);
			AppLog.d("[eventType] : " + eventType);
		}
	}
}