EqxValidateUtil.java 10.6 KB
package th.co.ais.ssbsrfc.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang.ArrayUtils;

import th.co.ais.ssbsrfc.config.Constant.Parameter;
import th.co.ais.ssbsrfc.config.Constant.ValidateType;
import ec02.utils.AppLog;

public class EqxValidateUtil {
	private boolean isMissing = false;
	private boolean isInvalid = false;
	private boolean isBlank = false;
	private String name = "";

	public boolean isMissing() {
		return isMissing;
	}

	public void setMissing(boolean isMissing) {
		this.isMissing = isMissing;
	}

	public boolean isInvalid() {
		return isInvalid;
	}

	public void setInvalid(boolean isInvalid) {
		this.isInvalid = isInvalid;
	}
	
	public boolean isBlank() {
		return isBlank;
	}

	public void setBlank(boolean isBlank) {
		this.isBlank = isBlank;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void validate(String paramName, Object paramValue, Parameter paramType, ValidateType type) {
		this.name = paramName;
		if (paramValue == null) {
			this.printMissingLog();
		} 
	}
	
	public void validate(String paramName, Object[] paramValue, Parameter paramType, ValidateType type) {
		this.name = paramName;
		if (paramValue == null || paramValue.length == 0) {
			this.printMissingLog();
		} 
	}
	
	public void validate(String paramName, String paramValue, Parameter paramType, ValidateType type) {
		this.validate(paramName, paramValue, paramType, type, -1, -1, null);
	}
	
	public void validate(String paramName, String paramValue, Parameter paramType, ValidateType type, String format) {
		this.validate(paramName, paramValue, paramType, type, -1, -1, format);
	}
	
	public void validate(String paramName, String paramValue, Parameter paramType, ValidateType type, int minLength, int maxLength) {
		this.validate(paramName, paramValue, paramType, type, minLength, maxLength, null);
	}
	
	public void validate(String paramName, String paramValue, Parameter paramType, ValidateType type, int minLength, int maxLength, String format) {
		this.name = paramName;
		if (paramType == Parameter.MANDATORY && paramValue == null) {
			this.printMissingLog();
		} else if (paramValue != null) {
			switch (type) {
				case STRING:
				{
					if(maxLength > 0) {
						this.checkLength(paramValue, minLength, maxLength);
					}
					
					if(format != null) {
						this.checkMatch(paramValue, format);
					}
					break;
				}
				case NUMBER:
				{
					String pattern = "[0-9]*";
					this.checkMatch(paramValue, pattern);
					if(maxLength > 0) {
						this.checkLength(paramValue, minLength, maxLength);
					}
					break;
				}
				case CURRENCY:
				{
					if(!paramValue.equals("0") && !paramValue.equals("0.00")) {
						String pattern = "[1-9][0-9]*([.][0-9]{2})?";
						this.checkMatch(paramValue, pattern);
					}
					
					break;
				}
				case MOBILE:
				{	
					String pattern = "66\\d{9}";
					this.checkMatch(paramValue, pattern);
					break;
				}
				case DATETIME:
				{
					this.checkDateFormat(paramValue, format);
					break;
				}
				case BOOLEAN:
				{
					String[] arrValidValue = new String[] {"true", "false"};
					this.checkContain(paramValue.toLowerCase(), arrValidValue);
					break;
				}
				case BOOLEANUPPERCASE:
				{
					String[] arrValidValue = new String[] {"TRUE", "FALSE"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				case FIX:
				{
					this.checkFix(paramValue, format);
					break;
				}
//				case LANG:
//				{
//					String[] arrValidValue = new String[] {"eng", "tha"};
//					this.checkContain(paramValue.toLowerCase(), arrValidValue);
//					break;
//				}
//				case LANGUPPER:
//				{
//					String[] arrValidValue = new String[] {"ENG", "THA"};
//					this.checkContain(paramValue.toUpperCase(), arrValidValue);
//					break;
//				}
				case YESNO:
				{
					String[] arrValidValue = new String[] {"yes", "no"};
					this.checkContain(paramValue.toLowerCase(), arrValidValue);
					break;
				}
				case DECIMAL:
				{
					String pattern = "[0-9]+([.][0-9]{2})";
					this.checkMatch(paramValue, pattern);
					break;
				}
//				case SUBSCRIPTIONSTATE:
//				{
//					String[] arrValidValue = new String[] {"active", "suspendFraud", "suspendDebt", "barredLeasing",  "creditLimitted",  "barredRequest",  "terminated",  "barredDisconnect",  "barredPending",  "prep",  "test",  "freeze",  "barredDebtOut",  "suspendDebt1way",  "creditLimitted1way",  "barredDisconnectOver30",  "barredCredit",  "barredCreditOut",  "terminatedOver30",  "prepaidSuspend",  "prepaidDisable",  "pool"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case AEMFCHARACTERISTIC:
//				{
//					String[] arrValidValue = new String[] {"dynamic", "static"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case AEMFVALUETYPE:
//				{
//					String[] arrValidValue = new String[] {"numeric", "latitude_longtitude", "text"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case AEMFALERTPOINT:
//				{
//					String[] arrValidValue = new String[] {"targetDecisionPoint", "referencePoint", "both"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case AMFLOANSTATE:
//				{
//					String[] arrValidValue = new String[] {"idle", "active", "terminated", "borrowed"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
				case URL:
				{
					this.checkMatch(paramValue, format);
					break;
				}
				case EMAIL:
				{
					String pattern = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$";
					this.checkMatch(paramValue, pattern);
					break;
				}
//				case DS3CUSTOMERCATEGORY:
//				{
//					String[] arrValidValue = new String[] {"residential", "business", "exclusive", "governmentAndNonProfit", "inHouse"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case DS3CUSTOMERSUBCATEGORY:
//				{
//					String[] arrValidValue = new String[] {"keyAccount", "sme", "royal", "tot", "government", "stateEnterprise", "embassy", "nonProfit", "ais", "prepaid", "foreigner", "thaiCitizen"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case DS3CUSTOMERSEGMENT:
//				{
//					String[] arrValidValue = new String[] {"standard", "classic", "gold", "platinum", "platinumPlus", "serenadeCeo", "serenadePrestige"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case AEMFACHIEVE:
//				{
//					String[] arrValidValue = new String[] {"target", "reference", "expire"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case AEMFSTATUS:
//				{
//					String[] arrValidValue = new String[] {"terminate", "recall", "prep", "port out", "active"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case AEMFSTATUS2:
//				{
//					String[] arrValidValue = new String[] {"terminate", "refund", "recall", "prep", "port out"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case ARMEDPARAM:
//				{
//					String[] arrValidValue = new String[] {"topup", "repay", "lowbalance", "status"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case SDFGUPDATASERVLIFESTYLE:
//				{
//					String[] arrValidValue = new String[] {"speedy", "business", "decent", "pennyPicker"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case SDFGUPAUTHENLEVEL:
//				{
//					String[] arrValidValue = new String[] {"no", "password", "token", "bio"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case MOBILESTATUS:
//				{
//					String[] arrValidValue = new String[] {"SS", "SA", "SD", "T", "SF"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
//				case DAAERRORCODE:
//				{
//					String[] arrValidValue = new String[] {"0", "1000", "1001", "110", "111", "120", "130", "150", "310"};
//					this.checkContain(paramValue, arrValidValue);
//					break;
//				}
				case OutbandChannel:
				{
					String[] arrValidValue = new String[] {"0", "1", "2", "3", "4"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				case TOROSUBSCRIPTIONIDTYPE:
				{
					String[] arrValidValue = new String[] {"0", "1", "2", "3", "4"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				case BEARERTYPE:
				{
					String[] arrValidValue = new String[] {"0", "1", "2", "3"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				case REESULTCODE:
				{
					String[] arrValidValue = new String[] {"2001", "3001", "5003", "5004", "5005", "5006", "5012"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				
				case WAITRESULTINDICATOR:
				{
					String[] arrValidValue = new String[] {"0", "1"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				case OUTBANDCHANNELOTP:
				{
					String[] arrValidValue = new String[] {"0", "1"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				case TOROLANGUAGEPREFERENCE:
				{
					String[] arrValidValue = new String[] {"1", "2"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				
				case INBANDINDICATOR:
				{
					String[] arrValidValue = new String[] {"0", "1", "2"};
					this.checkContain(paramValue, arrValidValue);
					break;
				}
				
				case NOTCHECKINVALID:
				default: 
					break;
			}
		}
	}
	
	private void checkLength(String value, int min, int max) {
		int length = value.length();
		if(length < min || length > max) {
			this.printInvalidLog("LENGTH", value);
		}
	}
	
	private void checkDateFormat(String value, String format) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(format);
		try {
			Date date = (Date) dateFormat.parse(value);
			String strDate = dateFormat.format(date);
			if(!value.equals(strDate)) {
				this.printInvalidLog("DATE FORMAT", value);
			}
	    }
	    catch(Exception e){
	    	this.printInvalidLog("DATE FORMAT", value);
	    }
	}
	
	private void checkFix(String value, String fix) {
		if(!value.equals(fix)) {
			this.printInvalidLog("VALUE", value);
		}
	}
	
	private void checkMatch(String value, String pattern) {
		if(!value.matches(pattern)) {
			this.printInvalidLog("FORMAT", value);
		}
	}
	
	private void checkContain(String value, String[] arrValidValue) {
		if(!ArrayUtils.contains(arrValidValue, value)) {
			this.printInvalidLog("VALUE", value);
		}
	}
	
	private void printInvalidLog(String invalidType, String value) {
		this.isInvalid = true;
		AppLog.d("## INVALID " + invalidType + " : " + this.name + " : " + value);
	}
	
	private void printMissingLog() {
		this.isMissing = true;
		AppLog.d("## MISSING PARAMETER : " + this.name);
	}
}