All Downloads are FREE. Search and download functionalities are using the official Maven repository.

liquibase.util.csv.opencsv.bean.BeanField Maven / Gradle / Ivy

There is a newer version: 3.6.2.5.inovus
Show newest version
package liquibase.util.csv.opencsv.bean;

import liquibase.util.StringUtils;

import java.lang.reflect.Field;

/**
 * Used to extend the Field class to add a required flag.  This flag determines if the field has to have information,
 * or in the case of the String class cannot be an empty String.
 */
public class BeanField {
   private final Field field;
   private final boolean required;

   /**
    * @param field    - A java.lang.reflect.Field object.
    * @param required - true if the field is required to contain a value, false if it is allowed to be null or blank String.
    */
   public BeanField(Field field, boolean required) {
      this.field = field;
      this.required = required;
   }

   /**
    * @return - a field object
    * @see java.lang.reflect.Field
    */
   public Field getField() {
      return this.field;
   }

   /**
    *
    * @return - true if the field is required to be set (cannot be null or empty string), false otherwise.
    */
   public boolean isRequired() {
      return this.required;
   }

   /**
    *
    * @param bean - Object containing the field to be set.
    * @param value - String containing the value to set the field to.
    * @param  - Type of the bean.
    * @throws IllegalAccessException - Thrown on reflection error.
    */
   public  void setFieldValue(T bean, String value) throws IllegalAccessException {
      if (required && (StringUtils.trimToNull(value) == null)) {
         throw new IllegalStateException(String.format("Field '%s' is mandatory but no value was provided.", field.getName()));
      }

      if (StringUtils.trimToNull(value) != null) {
         Class fieldType = field.getType();
         field.setAccessible(true);
         if (fieldType.equals(Boolean.TYPE)) {
            field.setBoolean(bean, Boolean.valueOf(value.trim()));
         } else if (fieldType.equals(Byte.TYPE)) {
            field.setByte(bean, Byte.valueOf(value.trim()));
         } else if (fieldType.equals(Double.TYPE)) {
            field.setDouble(bean, Double.valueOf(value.trim()));
         } else if (fieldType.equals(Float.TYPE)) {
            field.setFloat(bean, Float.valueOf(value.trim()));
         } else if (fieldType.equals(Integer.TYPE)) {
            field.setInt(bean, Integer.parseInt(value.trim()));
         } else if (fieldType.equals(Long.TYPE)) {
            field.setLong(bean, Long.parseLong(value.trim()));
         } else if (fieldType.equals(Short.TYPE)) {
            field.setShort(bean, Short.valueOf(value.trim()));
         } else if (fieldType.equals(Character.TYPE)) {
            field.setChar(bean, value.charAt(0));
         } else if (fieldType.isAssignableFrom(String.class)) {
            field.set(bean, value);
         } else {
            throw new IllegalStateException(String.format("Unable to set field value for field '%s' with value '%s' " +
                    "- type is unsupported. Use primitive and String types only.", fieldType, value));
         }
      }
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy