All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.onetwo.common.spring.validator.ValidationBindingResult Maven / Gradle / Ivy

package org.onetwo.common.spring.validator;

import java.util.List;
import java.util.Set;

import javax.validation.ConstraintViolation;

import org.onetwo.common.annotation.FieldName;
import org.onetwo.common.utils.JFishProperty;
import org.onetwo.common.utils.JFishPropertyFactory;
import org.onetwo.common.utils.LangUtils;
import org.onetwo.common.utils.StringUtils;
import org.onetwo.common.utils.func.ReturnableClosure;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;

@SuppressWarnings("serial")
public class ValidationBindingResult extends BeanPropertyBindingResult {

	public static ValidationBindingResult create(Object target){
		return new ValidationBindingResult(target);
	}
	public static  ValidationBindingResult create(Object target, Set> constrains){
		ValidationBindingResult binding = new ValidationBindingResult(target);
		ValidatorUtils.addConstraintViolations(constrains, binding);
		return binding;
	}
	
	private ValidationBindingResult(Object target) {
		super(target, StringUtils.uncapitalize(target.getClass().getSimpleName()));
	}
	

	public String getFieldErrorMessage(String fieldName){
		return getFieldErrorMessage(fieldName, true);
	}

	public String getFieldErrorMessage(String fieldName, boolean readFieldMeta){
		return getFieldErrorMessage(getFieldError(fieldName), readFieldMeta);
	}

	public String getFieldErrorMessage(FieldError fe, boolean readFieldMeta){
		if(fe==null){
//			throw new JFishException("can not find this field named : " + fieldName);
			return "";
		}

		String fmsg = null;
		if(readFieldMeta){
			JFishProperty jp = JFishPropertyFactory.create(getTarget().getClass(), fe.getField(), true);
			if(jp==null)
				jp = JFishPropertyFactory.create(getTarget().getClass(), fe.getField(), false);
			FieldName jfm = jp.getAnnotation(FieldName.class);
			if(jfm==null){
				fmsg = LangUtils.append(fe.getField(), fe.getDefaultMessage());
			}else{
				fmsg = LangUtils.append(jfm.value(), fe.getDefaultMessage());
			}
		}else{
			fmsg = fe.getDefaultMessage();
		}
		return fmsg;
	}

	public String getErrorMessage(ObjectError fe, ReturnableClosure block){
		String fmsg = "";
		if(block!=null){
			fmsg = block.execute(fe);
		}else{
			if(fe!=null)
				fmsg = fe.getDefaultMessage();
		}
		return fmsg;
	}
	
	public List getErrorMessages(ReturnableClosure block){
		List fieldErrors = this.getAllErrors();
		List msgs = LangUtils.newArrayList(fieldErrors.size());
		for(ObjectError fe : fieldErrors){
			msgs.add(getErrorMessage(fe, block));
		}
		return msgs;
	}
	
	public List getErrorMessages(final boolean readFieldMeta){
		/*List fieldErrors = getFieldErrors();
		List msgs = LangUtils.newArrayList(fieldErrors.size());
		for(FieldError fe : fieldErrors){
			msgs.add(getFieldErrorMessage(fe, readFieldMeta));
		}
		return msgs;*/
		return getErrorMessages(new ReturnableClosure() {

			@Override
			public String execute(ObjectError fe) {
				if(fe==null){
//					throw new JFishException("can not find this field named : " + fieldName);
					return "";
				}

				String fmsg = null;
				if(readFieldMeta && FieldError.class.isInstance(fe)){
					FieldError fieldError = (FieldError) fe;
					JFishProperty jp = JFishPropertyFactory.create(getTarget().getClass(), fieldError.getField(), true);
					if(jp==null)
						jp = JFishPropertyFactory.create(getTarget().getClass(), fieldError.getField(), false);
					FieldName jfm = jp.getAnnotation(FieldName.class);
					if(jfm==null){
						fmsg = LangUtils.append(fieldError.getField(), fe.getDefaultMessage());
					}else{
						fmsg = LangUtils.append(jfm.value(), fe.getDefaultMessage());
					}
				}else{
					fmsg = fe.getDefaultMessage();
				}
				return fmsg;
			}
			
		});
	}
	
	public String getErrorMessagesAsString(){
		return getErrorMessagesAsString(true, ", ");
	}
	
	public String getErrorMessagesAsString(boolean readFieldMeta, String op){
		return StringUtils.join(getErrorMessages(readFieldMeta), op);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy