package nl.fontys.sofa.limo.validation.utils; import java.lang.reflect.Field; import java.util.Collection; import java.util.Map; import nl.fontys.sofa.limo.validation.ValidationException; import nl.fontys.sofa.limo.validation.annotations.Size; public class SizeValidator implements FieldValidator<Size> { @Override public void validate(Size size, Field field, Object value) throws ValidationException { int min = size.min(); int max = size.max(); if (value == null) { throw new ValidationException(field.getName() + " should not be empty."); } if (value instanceof String) { validateSize(min, max, ((String)value).length()); } else if (value instanceof Map) { validateSize(min, max, ((Map)value).size()); } else if (value instanceof Collection) { validateSize(min, max, ((Collection)value).size()); } else if (value instanceof Object[]) { Object arr[] = (Object[]) value; validateSize(min, max, arr.length); } } private void validateSize(int min, int max, int actual) throws ValidationException { if (actual < min || actual > max) { throw new ValidationException(actual + " should be between " + min + " and " + max); } } }