AFMain.java 4.15 KB
package af.control;

import java.util.ArrayList;
import com.google.gson.Gson;
import af.instatnce.AFInstance;
import af.instatnce.EC02Instance;
import af.interfaces.AFEvent;
import af.utils.Zip;
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;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

public class AFMain extends AbstractAF implements IEC02{

	@Override
	public ECDialogue actionProcess(EquinoxProperties eqxProp, ArrayList<EquinoxRawData> eqxRawDataList, Object instance)
			throws ActionProcessException {

		AppLog.i("[CURRENT STATE] : " + eqxProp.getState());
		AppLog.i("[CURRENT STATE] : " + eqxProp.getDiag());
		EC02Instance ec02Ins = (EC02Instance) instance;
		ec02Ins.setEquinoxProperties(eqxProp);
		ec02Ins.setAbstractAF((AbstractAF) this);
		StateManager sm = new StateManager(eqxProp.getState());
		String eqxState = sm.doAction((AbstractAF) this, ec02Ins, eqxRawDataList);
		EquinoxProperties newEqxProp = new EquinoxProperties();
		newEqxProp.setState(eqxState);
		AppLog.i("[NEXT STATE] : " + eqxState);
		newEqxProp.setTimeout(ec02Ins.getTimeout());
		AppLog.i("[TIMEOUT] : " + ec02Ins.getTimeout());
		ECDialogue ecDialogue = new ECDialogue(newEqxProp, ec02Ins);
	
		return ecDialogue;
	}

	@Override
	public boolean verifyAFConfiguration(String arg0) {
		return true;
	}

	@Override
	public String composeInstance(Object instance) throws ComposeInstanceException {
		EC02Instance ec02Instance = (EC02Instance) instance;
		AFInstance afInstance = ec02Instance.getAFInstance();		
		String encodeString = "";
		
		try {
			encodeString = encodeInstance(afInstance);
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		
		return encodeString;
	}

	@Override
	public ArrayList<EquinoxRawData> constructRawData(Object instance)
			throws ConstructRawDataException {
		EC02Instance ins = (EC02Instance) instance;
		return ins.getEqxRawDataList();
	}

	@Override
	public Object extractInstance(String instance) throws ExtractInstanceException {
		EC02Instance ec02Instance = new EC02Instance();
		AFInstance afInstance = null;
		
		if ((instance == null) || instance.isEmpty()) {
			afInstance = new AFInstance();
		} 
		else {
			try {
				afInstance = decodeInstance(instance);
			}
			catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		ec02Instance.setAFInstance(afInstance);
		return (Object) ec02Instance;
	}

	@Override
	public void extractRawData(Object instanceData, ArrayList<EquinoxRawData> rawDatas)
			throws ExtractRawDataException {
		
		for (EquinoxRawData r : rawDatas) {
			String type = r.getRawDataAttribute("type");
			String ctype = r.getRawDataAttribute("ctype");

			if(r.getRawEventType().equals(AFEvent.Unknown)){
				if(ctype.equals("text/plain") && type.equals("request")) {
					r.setRawMessage(r.getRawDataAttribute("val").trim());
					r.setRawEventType(AFEvent.Incoming_HTTP_Request);
				}
				else if(ctype.equals("text/xml") && type.equals("response")) {
					r.setRawEventType(AFEvent.Incoming_A_Response);
				}	
			}
			AppLog.i("[EVENT TYPE] : " + r.getRawEventType());
		}		
	}
	
	private String encodeInstance(AFInstance instance) {
		String encodeString = "";
		try {
			Gson gson = new Gson();
			String str = gson.toJson(instance);
			byte[] bytes = str.getBytes();
			byte[] zipBytes = Zip.compressBytes(bytes);
	        encodeString = Base64.encode(zipBytes);
		} 
		catch (Exception e) {
			AppLog.e("Encode fail!! " + e);
		}
		return encodeString;
	}

	private AFInstance decodeInstance(String instance) {
		AFInstance afInstance = null;
		try {
			byte[] simpleString = Base64.decode(instance);
			byte[] unZipString = Zip.extractBytes(simpleString);
			Gson gson = new Gson();
			afInstance = gson.fromJson(new String(unZipString), AFInstance.class);
		} catch (Exception e) {
			AppLog.e("Decode fail!! " + e);
		}
		return afInstance;
	}
}