package se.unlogic.standardutils.string;

import se.unlogic.standardutils.reflection.ReflectionUtils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;


public class AnnotatedBeanTagSourceFactory<T> extends BeanTagSourceFactory<T> {

   public AnnotatedBeanTagSourceFactory(final Class<T> beanClass, final String defaultPrefix) {

      super(beanClass);

      List<Field> fields = ReflectionUtils.getFields(beanClass);

      for(Field field : fields){

         StringTag stringTag = field.getAnnotation(StringTag.class);

         if(stringTag != null){

            if(StringUtils.isEmpty(stringTag.name())){

               addFieldMapping(defaultPrefix + field.getName(), field);

            }else{

               addFieldMapping(defaultPrefix + stringTag.name(), field);
            }
         }
      }

      List<Method> methods = ReflectionUtils.getMethods(beanClass);

      for(Method method : methods){

         StringTag stringTag = method.getAnnotation(StringTag.class);

         if(stringTag != null){

            if(StringUtils.isEmpty(stringTag.name())){

               addMethodMapping(defaultPrefix + method.getName(), method);

            }else{

               addMethodMapping(defaultPrefix + stringTag.name(), method);
            }
         }
      }
   }
}
