package com.akjava.lib.common.form;
public class StaticValidators {
public static final String VALIDATOR_NOT_EMPTY="NotEmpty";
public static final String VALIDATOR_ASCII_NUMBER="AsciiNumber";
public static final String VALIDATOR_ASCII_NUMBER_AND_CHAR="AsciiNumberAndChar";
public static final String VALIDATOR_ASCII_NUMBER_AND_CHAR_AND_UNDERBAR="AsciiNumberAndCharAndUnderBar";
public static final String VALIDATOR_DECIMAL_NUMBER="DecimalNumber";
public static final String VALIDATOR_INTEGER_NUMBER="IntegerNumber";
public static final String VALIDATOR_ASCII_CHAR="AsciiChar";
public static final String VALIDATOR_START_ASCII_CHAR="StartAsciiChar";
public static final String VALIDATOR_DATE_TYPE="DateType";
public static final String VALIDATOR_HANKAKU_KANA="HankakuKana";
public static final String VALIDATOR_HIRAGANA="Hiragana";
//public static final String VALIDATOR_ASCII_NUMBER_AND_CHAR_HANKAKU_KANA="AsciiNumberAndCharAndHankakuKana";
//TODO addd method-name,field-name
public static NotEmptyValidator notEmptyValidator(){
return NotEmptyValidator.INSTANCE;
}
public enum NotEmptyValidator implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_NOT_EMPTY;
}
@Override
public boolean validate(String value) {
return value!=null && !value.isEmpty();
}
@Override
public String toString() {
return getName();
}
}
//validate if start minus
public static IntegerNumber integerNumber(){
return IntegerNumber.INSTANCE;
}
public enum IntegerNumber implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_INTEGER_NUMBER;
}
@Override
public boolean validate(String value) {
if(value.startsWith("-")){
return asciiNumberOnly().validate(value.substring(1));
}else{
return asciiNumberOnly().validate(value);
}
}
@Override
public String toString() {
return getName();
}
}
public static DecimalNumber decimalNumber(){
return DecimalNumber.INSTANCE;
}
public enum DecimalNumber implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_DECIMAL_NUMBER;
}
@Override
public boolean validate(String value) {
if(value.startsWith("-")){
value=value.substring(1);//don't care minus
}
int pointIndex=value.indexOf(".");
if(pointIndex==-1){
return asciiNumberOnly().validate(value);
}else{
String first=value.substring(0,pointIndex);
String last=value.substring(pointIndex+1);
//point only is invalid.ascii validator can't catch empty
if(first.isEmpty()&&last.isEmpty()){
return false;
}
return asciiNumberOnly().validate(first) && asciiNumberOnly().validate(last);
}
}
@Override
public String toString() {
return getName();
}
}
public static AsciiNumberOnly asciiNumberOnly(){
return AsciiNumberOnly.INSTANCE;
}
public enum AsciiNumberOnly implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_ASCII_NUMBER;
}
@Override
public boolean validate(String value) {
for(int i=0;i<value.length();i++){
if(!Character.isDigit(value.charAt(i)) || value.charAt(i)>128){
return false;
}
}
return true;
}
@Override
public String toString() {
return getName();
}
}
public static StartAsciiChar startAsciiChar(){
return StartAsciiChar.INSTANCE;
}
public enum StartAsciiChar implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_START_ASCII_CHAR;
}
@Override
public boolean validate(String value) {
if(!Character.isLetter(value.charAt(0)) || value.charAt(0)>128){
return false;
}
return true;
}
@Override
public String toString() {
return getName();
}
}
public static AsciiCharOnly asciiCharOnly(){
return AsciiCharOnly.INSTANCE;
}
public enum AsciiCharOnly implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_ASCII_CHAR;
}
@Override
public boolean validate(String value) {
for(int i=0;i<value.length();i++){
if(!Character.isLetter(value.charAt(i)) || value.charAt(i)>128){
return false;
}
}
return true;
}
@Override
public String toString() {
return getName();
}
}
public static AsciiNumberAndCharOnly asciiNumberAndCharOnly(){
return AsciiNumberAndCharOnly.INSTANCE;
}
public enum AsciiNumberAndCharOnly implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_ASCII_NUMBER_AND_CHAR;
}
@Override
public boolean validate(String value) {
for(int i=0;i<value.length();i++){
if(!Character.isLetterOrDigit(value.charAt(i)) || value.charAt(i)>128){
return false;
}
}
return true;
}
@Override
public String toString() {
return getName();
}
}
public static AsciiNumberAndCharAndUnderbarOnly asciiNumberAndCharAndUnderbarOnly(){
return AsciiNumberAndCharAndUnderbarOnly.INSTANCE;
}
public enum AsciiNumberAndCharAndUnderbarOnly implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_ASCII_NUMBER_AND_CHAR_AND_UNDERBAR;
}
@Override
public boolean validate(String value) {
for(int i=0;i<value.length();i++){
char ch=value.charAt(i);
if(!Character.isLetterOrDigit(ch) || ch>128){
if(ch!='_'){
return false;
}
}
}
return true;
}
@Override
public String toString() {
return getName();
}
}
public static DateTypeChecker dateTypeChecker(){
return DateTypeChecker.INSTANCE;
}
public enum DateTypeChecker implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_DATE_TYPE;
}
@Override
public boolean validate(String value) {
String vs[] = value.split("/");
if (vs.length != 3) {
return false;
} else {
for (int j = 0; j < vs.length; j++) {
if (vs[j].isEmpty()) {
return false;
}
}
}
return true;
}
@Override
public String toString() {
return getName();
}
}
public static HankakuKana hankakuKana(){
return HankakuKana.INSTANCE;
}
public enum HankakuKana implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_HANKAKU_KANA;
}
@Override
public boolean validate(String value) {
for(int i=0;i<value.length();i++){
if( value.charAt( i ) < 0xFF61 || value.charAt( i ) > 0xFF9F ){
return false;
}
}
return true;
}
@Override
public String toString() {
return getName();
}
}
public static Hiragana hiragana(){
return Hiragana.INSTANCE;
}
public enum Hiragana implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_HIRAGANA;
}
@Override
public boolean validate(String value) {
for(int i=0;i<value.length();i++){
if( value.charAt( i ) < 0x3040 || value.charAt( i ) > 0x309F ){
return false;
}
}
return true;
}
@Override
public String toString() {
return getName();
}
}
/*
* no need
public static AsciiOnlyKanaHanKanaOnly asciiKanaHanKanaOnly(){
return AsciiOnlyKanaHanKanaOnly.INSTANCE;
}
enum AsciiOnlyKanaHanKanaOnly implements Validator {
INSTANCE;
@Override
public String getName() {
return VALIDATOR_ASCII_NUMBER_AND_CHAR_HANKAKU_KANA;
}
@Override
public boolean validate(String value) {
for(int i=0;i<value.length();i++){
if( value.charAt( i ) >= 0xFF61 && value.charAt( i ) <= 0xFF9F ){
continue;
}
if(Character.isDigit(value.charAt(i))){
continue;
}
}
return true;
}
}
*/
}