package com.sunxung.factoring.component.validator;
import java.lang.reflect.Method;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import com.sunxung.factoring.component.annotation.ObjectValidator;

/**
 * @Description 1：自定义对象或者对象属性校验。2：实现ConstraintValidator接口。
 * @author zhuhao
 * @date 2017年2月23日10:43:02
 * @version 1.0
 *
 */
public class ConstraintEntityValidator implements ConstraintValidator<ObjectValidator, Object>{

	private String fieldName;
	
	/**
	 * 1：初始化所有注解参数。
	 */
	@Override
	public void initialize(ObjectValidator objectValidator) {
		// TODO Auto-generated method stub
		this.fieldName = objectValidator.fieldName();
		
	}

	/**
	 * 1：实体验证业务。
	 * 2：实体中属性验证业务。
	 * 3:返回true通过验证。
	 */
	@Override
	public boolean isValid(Object object, ConstraintValidatorContext context) {
		
		   boolean is_valid = false;
		   String getFieldName = "get"+captureName(fieldName);
		   if(null != object && !fieldName.equals("")){
			 //获取到属性get方法获取值,method.invoke(object)
			 //获取到属性方法名eg:name的getName, method.getName()
			   Method[] methods = object.getClass().getMethods();
				 for(Method method : methods){
					 try {
							if(method.getName().equals(getFieldName)){
								if(null != method.invoke(object) && !method.invoke(object).equals("")){
									is_valid = true;
								}
							}
					  } catch (Exception e) {
						  
					  } 
				 }
			}
		 return is_valid;		
	}
	
	
	 /**
	  * 首字母大写
	  * @param name
	  * @return
	  */
     public static String captureName(String name) {
        char[] cs=name.toCharArray();
        cs[0]-=32;
        return String.valueOf(cs);
        
    }
	 
   
}
