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