package message.validate.handler;
import message.validate.annotations.Limit;
import message.validate.core.ValidateHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
/**
* 长度验证处理类.
*
* @author sunhao(sunhao.java@gmail.com)
* @version V1.0
* @createTime 12-11-26 下午8:39
*/
public class LimitHandler extends ValidateHandler {
private static final Logger logger = LoggerFactory.getLogger(LimitHandler.class);
protected boolean handle(Annotation annotation, Object value) {
int length = 0;
if(value instanceof String){
//字符串
length = ((String) value).length();
} else if(value instanceof Map){
//map
length = ((Map) value).size();
} else if(value instanceof Collection){
//集合
length = ((Collection) value).size();
} else if(value.getClass().isArray()){
//数组
length = Array.getLength(value);
}
if(logger.isDebugEnabled())
logger.debug("value's type is '{}', its length is '{}'", value.getClass().getCanonicalName(), length);
Limit limit = (Limit) annotation;
int min = limit.min();
int max = limit.max();
if(min < max){
return min <= length && length <= max;
}
return true;
}
}