Java tutorial
/** * Copyright (c) 1997-2013, www.tinygroup.org (luo_guo@icloud.com). * * Licensed under the GPL, Version 3.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/gpl.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.tinygroup.validate.impl; import org.apache.commons.beanutils.BeanUtils; import org.tinygroup.logger.LogLevel; import org.tinygroup.validate.AnnotationValidatorManager; import org.tinygroup.validate.Validator; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; /** * ?? * * @author renhui * */ public class AnnotationValidatorManagerImpl extends AbstractValidatorManger implements AnnotationValidatorManager { private static final String FIELD_ANNOTATION_CLASS_NAME = "org.tinygroup.validate.annotation.Field"; private List<Field> hasFiledAnnotationList = new ArrayList<Field>(); public <T> void addValidatorAnnotation(Class<T> clazz, Field field, Annotation annotation) { // Field if (isFieldAnnotation(annotation)) { return; } LOGGER.logMessage(LogLevel.DEBUG, "??:[{0}],??:[{1}],:[{2}]", clazz.getName(), field.getName(), annotation.annotationType().getName()); if (hasFiledAnnotationList.contains(field)) { FieldValidatorMap map = getFieldValidatorMap(clazz); if (map == null) { map = new FieldValidatorMap(); } try { String wrapperKey = getWrapperKey(clazz, field); FieldWrapper fieldWrapper = fieldWrapperMap.get(wrapperKey); if (fieldWrapper == null) { org.tinygroup.validate.annotation.Field fieldAnnotation = field .getAnnotation(org.tinygroup.validate.annotation.Field.class); String name = fieldAnnotation.name(); if (name == null || "".equals(name)) { name = field.getName(); } fieldWrapper = new FieldWrapper(field, name, fieldAnnotation.title()); fieldWrapperMap.put(wrapperKey, fieldWrapper); } map.addValidator(fieldWrapper, "", getValidatorFromAnnotation(field, annotation)); } catch (Exception e) { LOGGER.errorMessage(e.getMessage(), e); } putClassFieldValidators(clazz, map); } } private boolean isFieldAnnotation(Annotation annotation) { return FIELD_ANNOTATION_CLASS_NAME.equals(annotation.annotationType().getName()); } private Validator getValidatorFromAnnotation(Field field, Annotation annotation) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { Validator validator = getValidator(annotation.annotationType().getName()); // validator Method[] methods = annotation.annotationType().getDeclaredMethods(); for (Method method : methods) { BeanUtils.setProperty(validator, method.getName(), method.invoke(annotation)); } return validator; } public <T> void addFieldAnnotation(Class<T> clazz, Field field, Annotation annotation) { LOGGER.logMessage(LogLevel.DEBUG, "??:[{0}],??:[{1}],:[{2}]", clazz.getName(), field.getName(), annotation.annotationType().getName()); hasFiledAnnotationList.add(field); } }