package net.csdn.validate;
import net.csdn.annotation.validate.Validate;
import javax.persistence.Transient;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static net.csdn.common.logging.support.MessageFormat.format;
/**
* BlogInfo: WilliamZhu
* Date: 12-7-3
* Time: 下午7:18
*/
public abstract class BaseValidateParse implements ValidateParse {
protected List<Field> getValidateFields(Class clzz) {
List<Field> validateFields = new ArrayList<Field>();
Field[] fields = clzz.getDeclaredFields();
for (Field field : fields) {
if (!Modifier.isStatic(field.getModifiers()) || !Modifier.isFinal(field.getModifiers()) || !Modifier.isPrivate(field.getModifiers()))
continue;
if (!field.isAnnotationPresent(Validate.class)) continue;
if (!field.getName().startsWith("$")) continue;
validateFields.add(field);
}
return validateFields;
}
protected ValidateResult validateResult(String msg, String targetFieldName) {
return new ValidateResult(format(msg, targetFieldName), targetFieldName);
}
protected String messageWithDefault(Map info, String message) {
String temp = (String) info.get(ValidateHelper.message);
return temp == null ? message : temp;
}
protected Field getModelField(Class clzz, String name) {
try {
Field field = clzz.getDeclaredField(name);
field.setAccessible(true);
return field;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
protected void iterateValidateInfo(Class clzz, String target, ValidateIterator validateIterator) {
try {
List<Field> fields = getValidateFields(clzz);
for (Field field : fields) {
field.setAccessible(true);
Map info = (Map) ((Map) field.get(null));
if (info == null) continue;
if (info.get(target) == null) continue;
Object wow = info.get(target);
validateIterator.iterate(field.getName().substring(1), field, wow);
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected List<Field> getModelFields(Class clzz) {
List<Field> modelFields = new ArrayList<Field>();
Field[] fields = clzz.getFields();
for (Field field : fields) {
if (Modifier.isStatic(field.getModifiers()) || Modifier.isPrivate(field.getModifiers())) continue;
if (field.getAnnotation(Transient.class) != null) continue;
modelFields.add(field);
}
return modelFields;
}
}