Global.java 8.84 KB
package th.co.ais.ssbsrfc.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;

import th.co.ais.ssbsrfc.config.Constant;
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.instance.FMInstance;
import th.co.ais.ssbsrfc.message.EC02Builder;
import ais.mmt.sand.comlog.bean.DataBean;
import ais.mmt.sand.comlog.bean.DataBean.TYPE;

import com.google.gson.Gson;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

import ec02.af.abstracts.AbstractAF;
import ec02.utils.AppLog;

public class Global 
{
	private static AbstractAF abstractAF = null;
	private static EC02Builder ec02Builder = null;
	private static boolean isOpenRawData = true;
	private static String outputTimeStamp = null;
	
	public static String inputTimeStamp = null;
	public static String detailNameLog = null;
	public static String summaryNameLog = null;
	public static boolean isUDR = false;
	public static boolean isDetail = true;
	public static boolean isDetailRawData = true;
	public static boolean isDetailData = true;
	public static boolean isDetailStat = true;
	public static boolean isDetailScenario = true;
	public static boolean isDetailCurrentState = true;
	public static boolean isDetailNextState = true;
	public static boolean isSummary = false;
	public static boolean isStat = true;
	public static boolean isErrorLog = false;
	public static int detailLog = 0;
	public static String tmpDialogueId = null;
	public static int minDialogueId = 0;
	public static int maxDialogueId = 99;
	public static int flow = 0;
	public static HashMap<String, String> mapNode = new HashMap<String, String>();
	public static HashMap<Integer, String> mapFlow = new HashMap<Integer, String>();
	public static boolean isDebugModeForQA = false;
	public static boolean isWriteSummary = false;
	public static boolean isOutputTimeStamp = true;
	public static boolean isRejectByApplication = false;
	public static long currentInputDateTime;
	
	public static boolean isOpenRawData() {
		return isOpenRawData;
	}
	
	public static void getConfigEC02(AbstractAF abstractAF, EC02Instance ec02Instance)
	{
		Global.setNode();
		Global.setFlow();
		Global.flow = ec02Instance.getAFInstance().getFlow();
		Global.abstractAF = abstractAF;
	}
	
	public static String getNodeFromEventType(String eventType) {
		String node = mapNode.get(eventType);
//		AppLog.d("## node:" + node + ":eventtype:" + eventType);
		return node;
	}
	
	public static void setNode() 
	{
		mapNode.put(StateConfig.Incoming_A_Request, Constant.nodeE01);
	}
	
	public static String getFlowName(int flow) {
		String flowName = mapFlow.get(flow);
		if(flowName == null) {
			flowName = mapFlow.get(Constant.FLOW_Unexpected_Event_Handling);
		}
		return flowName;
	}
	
	public static void setFlow() {
		//flow #1
		mapFlow.put(Constant.FLOW_TEST_A, "TEST A");
	}

	public static void setOpenRawData(boolean isOpenRawData) {
		Global.isOpenRawData = isOpenRawData;
	}
	
	public static void checkActiveLog(EC02Instance ec02Instance, String value)
	{
		String[] tempLog =null;
		tempLog = value.split("\\|");
		//"DETAIL|STAT|UDR" 
		for (int i = 0; i < tempLog.length; i++) {
			if (tempLog[i].equalsIgnoreCase("DETAIL")) {
				isDetail = true;
			} else if (tempLog[i].equalsIgnoreCase("STAT")) {
				isStat = true;
			} else if (tempLog[i].equalsIgnoreCase("UDR")) {
				isUDR = true;
			} else if (tempLog[i].equalsIgnoreCase("SUMMARY")) {
				isSummary = true;
			} else if (tempLog[i].equalsIgnoreCase("ERROR")) {
				isErrorLog = true;
			}
		}
	}
	
	public static FMInstance getInvokeForManageFlow(EC02Instance ec02Instance)
	{
		int flow = ec02Instance.getAFInstance().getFlow();
		String date = ec02Instance.getAFInstance().getStartFlowTimeStamp();
		return new FMInstance(flow, date);
	}
	
	public static void setRejectByApplication(boolean isRejectByApplication) {
		Global.isRejectByApplication = isRejectByApplication;
		// write summary
		if (isRejectByApplication) {
			Global.isWriteSummary = isRejectByApplication;
		}
	}
	
	public static String getDetailLogRawData(String rawData) {
		if (rawData != null) {
//			rawData = StringEscapeUtils.escapeHtml(rawData);
//			rawData = StringEscapeUtils.unescapeJava(rawData);
		}
		return rawData;
	}
	
	public static void setDetailLog(String value)
	{
		if (value.equals("0")) {
			Global.detailLog = Constant.DETAILLOG.CLOSE.get();
		} else if (value.equals("1")) {
			Global.detailLog = Constant.DETAILLOG.OPENERROR.get();
		} else if (value.equals("2")) {
			Global.detailLog = Constant.DETAILLOG.OPEN.get();
		}
	}
	
	public static String unescapePrintString(String value)
	{
		return value;
	}
	
	public static String getUnique()
	{
		return UUID.randomUUID().toString().replace("-", "");
	}
	
	public static DataBean.TYPE getDetailLogType(String strType) {
		TYPE retType = null;
		if(strType.toLowerCase().equals("request")) {
			retType = TYPE.REQ;
		} else {
			retType = TYPE.RES;
		}
		
		return retType;
	}
	
	public static String encodeInstance(AFInstance instance) {
		String encodeString = "";
		try {
			// check remove Timeout
			int cout = instance.getListTimeout().size();
			if (cout == 0) {
				instance.setListTimeout(null);
			}
			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;
	}
	
	public static 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;
	}

	public static String getOutputTimeStamp() {
		return outputTimeStamp;
	}

	public static void setOutputTimeStamp(String outputTimeStamp) {
		Global.outputTimeStamp = outputTimeStamp;
	}
	
	public static String getEC02WarmConfig(String key)
	{
		String value = null;
		try {
			value = Global.abstractAF.getUtils().getHmWarmConfig().get(key).get(0).trim();
			AppLog.d("## GETCONFIG EC02 READDING(" + key + ") VALUE:" + value);
		} catch (Exception e) {
			AppLog.e("## CHECKCONFIG EC02 EXCEPTION(" + key + ") READ ERROR");
		}
		return value;
	}

	public static EC02Builder getEc02Builder() {
		return ec02Builder;
	}

	public static void setEc02Builder(EC02Builder ec02Builder) {
		Global.ec02Builder = ec02Builder;
	}
	
	public static String replaceSoapToXml(String value)
	{
		try {
			JSONObject json = new JSONObject(value);
			value = XML.toString(json);
			AppLog.d("## CONVERT MESSAGE JSON TO XML :" + value);
		} catch (JSONException e) { }
		return value.replaceAll("(?s)<(\\w+):Envelope[^<>]*>.*?<\\1:Body>\\s*(.*?)\\s*</\\1:Body>\\s*</\\1:Envelope>", "$2").replaceAll(" xmlns(:\\w+)?=\"(.*)\"", "").replaceAll("\\<\\?xml(.+?)\\?\\>", "");
	}
	
	
	// LOG ETC
	public static long convertTocurrentTimeMillis(String strDate) 
	{
		DateFormat formatter = new SimpleDateFormat("yyyyMMdd HH:mm:ss.S");
		long value = 0;
		try {
			Date date = formatter.parse(strDate);
			Calendar cal = Calendar.getInstance();
			cal.setTime(date);
			value = cal.getTimeInMillis();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return value;
	}
	
	public static String getTimeStampLog (long currentDateTime) 
	{
		 Date date = new Date(currentDateTime);
	     SimpleDateFormat ft = new SimpleDateFormat ("yyyyMMdd HH:mm:ss.S");
	     // display time and date using toString()
	     String timestamp = ft.format(date);
	     
	     return timestamp;
	}
	
	public static long diffTimeStampLog(String first, String last) throws ParseException 
	{
		DateFormat formatter = new SimpleDateFormat("yyyyMMdd HH:mm:ss.S");
		Date dateFist = formatter.parse(first);
		Date dateLast = formatter.parse(last);
		Calendar strF_Cal = Calendar.getInstance();
		Calendar strL_Cal = Calendar.getInstance();
		strF_Cal.setTime(dateFist);
		strL_Cal.setTime(dateLast);
		long lastLong = strL_Cal.getTimeInMillis();
		long firstLong = strF_Cal.getTimeInMillis();
		long diff = lastLong - firstLong;

		return diff;
	}
	
	public static String datePartnerTimestamp(String value)
	{
		String partner = "";
		try {
			DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			DateFormat newFttr = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss.S");
			Date date = formatter.parse(value);
			partner = newFttr.format(date);
		} catch (ParseException e) { } 
		return partner;
	}
	
	public static String getXmlTemplateKey(String keyType, String id) {
		return keyType + "[id='"+id+"']";
	}
}