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 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 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 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; } }