Mega Code Archive

 
Categories / Java / Reflection
 

Get class fieldproperty

/**  * This software is provided as IS by Antilia-Soft SL.  * Copyright 2006-2007.  */ //package com.antilia.common.util; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; public class ReflectionUtils {      public static final String NESTED_PROPERTY_SEPARATOR = ".";      public static Field getPropertyField(Class<?> beanClass,String property) throws NoSuchFieldException {       if (beanClass == null)       throw new IllegalArgumentException("beanClass cannot be null");          Field field = null;     try {       field = beanClass.getDeclaredField(property);     } catch (NoSuchFieldException e) {       if (beanClass.getSuperclass() == null)         throw e;       // look for the field in the superClass       field = getPropertyField(beanClass.getSuperclass(),property);     }     return field;   }      public static Field getField(Class<?> beanClass,String propertyPath) throws NoSuchFieldException {          if (beanClass == null)       throw new IllegalArgumentException("beanClass cannot be null");          if (propertyPath.indexOf("[") != -1)       propertyPath = propertyPath.substring(0,propertyPath.indexOf("["));          // if the property path is simple then look for it directly on the class.     if (propertyPath.indexOf(NESTED_PROPERTY_SEPARATOR) == -1) {       // look if the field is declared in this class.       return getPropertyField(beanClass,propertyPath);     } else {       // if the property is a compound one then split it and look for the first field.       // and recursively locate fields of fields.       String propertyName = propertyPath.substring(0,propertyPath.indexOf(NESTED_PROPERTY_SEPARATOR));       Field field = getField(beanClass,propertyName);       // try to locate sub-properties       return getField(getTargetType(field),propertyPath.substring(propertyPath.indexOf(NESTED_PROPERTY_SEPARATOR)+1));     }   }      public static Class<?> getTargetType(Field field) {     //  Generic type, case when we have a Collection of ?     if (field.getGenericType() instanceof ParameterizedType) {       ParameterizedType type = (ParameterizedType)field.getGenericType();       if (type.getActualTypeArguments().length == 1 && type.getActualTypeArguments()[0] instanceof Class)       return (Class<?>)type.getActualTypeArguments()[0];     }          return field.getType();   }      public static Class<?> getPropertyClass(Class<?> beanClass,String propertyPath) {     try {       Field field = getField(beanClass, propertyPath);       return(getTargetType(field));     } catch (NoSuchFieldException e) {       throw new IllegalArgumentException(propertyPath+" is not a property of "+beanClass.getName());     }   }      public static boolean isFieldDeclared(Class<?> beanClass,String propertyPath) {     try {       return getField(beanClass, propertyPath) != null;     } catch(NoSuchFieldException e) {       return false;     }   }      public static Object getPropertyValue(Object bean,String propertyPath) throws NoSuchFieldException {     if (bean == null)         throw new IllegalArgumentException("bean cannot be null");       Field field = ReflectionUtils.getField(bean.getClass(), propertyPath);       field.setAccessible(true);       try {         return(field.get(bean));       } catch (IllegalAccessException e) {         return(null);     }   } }