Coverage Report - org.kuali.student.core.dictionary.service.impl.Bean2DictionaryConverter
 
Classes in this File Line Coverage Branch Coverage Complexity
Bean2DictionaryConverter
0%
0/55
0%
0/46
9.4
 
 1  
 package org.kuali.student.core.dictionary.service.impl;
 2  
 
 3  
 import java.beans.BeanInfo;
 4  
 import java.beans.IntrospectionException;
 5  
 import java.beans.Introspector;
 6  
 import java.beans.PropertyDescriptor;
 7  
 import java.lang.reflect.ParameterizedType;
 8  
 import java.util.Date;
 9  
 import java.util.List;
 10  
 import org.kuali.student.core.dictionary.dto.DataType;
 11  
 
 12  
 import org.kuali.student.core.dictionary.dto.FieldDefinition;
 13  
 import org.kuali.student.core.dictionary.dto.ObjectStructureDefinition;
 14  
 import org.kuali.student.core.dto.MetaInfo;
 15  
 
 16  
 public class Bean2DictionaryConverter
 17  
 {
 18  
 
 19  
  private Class<?> clazz;
 20  
 
 21  
  public Bean2DictionaryConverter (Class<?> clazz)
 22  0
  {
 23  0
   this.clazz = clazz;
 24  0
  }
 25  
 
 26  
  public ObjectStructureDefinition convert ()
 27  
  {
 28  0
   ObjectStructureDefinition os = new ObjectStructureDefinition ();
 29  0
   os.setName (clazz.getName ());
 30  
   BeanInfo beanInfo;
 31  
   try
 32  
   {
 33  0
    beanInfo = Introspector.getBeanInfo (clazz);
 34  
   }
 35  0
   catch (IntrospectionException ex)
 36  
   {
 37  0
    throw new RuntimeException (ex);
 38  0
   }
 39  0
   os.setHasMetaData (calcHasMetaData (beanInfo));
 40  0
   for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors ())
 41  
   {
 42  0
    if ( ! MetaInfo.class.equals (pd.getPropertyType ())
 43  
        &&  ! Class.class.equals (pd.getPropertyType ())
 44  
        &&  ! DictionaryConstants.ATTRIBUTES.equals (pd.getName ()))
 45  
    {
 46  0
     os.getAttributes ().add (calcField (clazz, pd));
 47  
    }
 48  
   }
 49  0
   return os;
 50  
  }
 51  
 
 52  
   private boolean calcHasMetaData (BeanInfo beanInfo)
 53  
  {
 54  0
   for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors ())
 55  
   {
 56  0
     if (MetaInfo.class.equals (pd.getPropertyType ()))
 57  
     {
 58  0
       return true;
 59  
     }
 60  
 //       &&  ! DictionaryConstants.ATTRIBUTES.equals (pd.getName ()))
 61  
   }
 62  0
   return false;
 63  
  }
 64  
 
 65  
  private FieldDefinition calcField (Class<?> clazz, PropertyDescriptor pd)
 66  
  {
 67  0
   FieldDefinition fd = new FieldDefinition ();
 68  0
   fd.setName (pd.getName ());
 69  0
   Class<?> pt = pd.getPropertyType ();
 70  0
   if (List.class.equals (pt))
 71  
   {
 72  0
    fd.setMaxOccurs (fd.UNBOUNDED);
 73  
    try
 74  
    {
 75  0
     pt =
 76  
     (Class<?>) ((ParameterizedType) clazz.getDeclaredField (pd.getName ()).getGenericType ()).getActualTypeArguments ()[0];
 77  
    }
 78  0
    catch (NoSuchFieldException ex)
 79  
    {
 80  0
     throw new RuntimeException (ex);
 81  
    }
 82  0
    catch (SecurityException ex)
 83  
    {
 84  0
     throw new RuntimeException (ex);
 85  0
    }
 86  
   }
 87  
   else
 88  
   {
 89  0
    fd.setMaxOccurs (fd.SINGLE);
 90  
   }
 91  0
   fd.setDataType (calcDataType (pt));
 92  0
   return fd;
 93  
  }
 94  
 
 95  
  private DataType calcDataType (Class<?> pt)
 96  
  {
 97  0
   if (int.class.equals (pt) || Integer.class.equals (pt))
 98  
   {
 99  0
    return DataType.INTEGER;
 100  
   }
 101  0
   else if (long.class.equals (pt) || Long.class.equals (pt))
 102  
   {
 103  0
    return DataType.LONG;
 104  
   }
 105  0
   else if (double.class.equals (pt) || Double.class.equals (pt))
 106  
   {
 107  0
    return DataType.DOUBLE;
 108  
   }
 109  0
   else if (float.class.equals (pt) || Float.class.equals (pt))
 110  
   {
 111  0
    return DataType.FLOAT;
 112  
   }
 113  0
   else if (boolean.class.equals (pt) || Boolean.class.equals (pt))
 114  
   {
 115  0
    return DataType.BOOLEAN;
 116  
   }
 117  0
   else if (Date.class.equals (pt))
 118  
   {
 119  0
    return DataType.DATE;
 120  
   }
 121  0
   else if (String.class.equals (pt))
 122  
   {
 123  0
    return DataType.STRING;
 124  
   }
 125  0
   else if (List.class.equals (pt))
 126  
   {
 127  0
    throw new RuntimeException ("Can't have a list of lists, List<List<?>>");
 128  
   }
 129  0
   else if (Enum.class.isAssignableFrom (pt))
 130  
   {
 131  0
    return DataType.STRING;
 132  
   }
 133  0
   else if (Object.class.equals (pt))
 134  
   {
 135  0
    return DataType.STRING;
 136  
   }
 137  0
   else if (pt.getName ().startsWith ("org.kuali.student."))
 138  
   {
 139  0
    return DataType.COMPLEX;
 140  
   }
 141  
   else
 142  
   {
 143  0
    throw new RuntimeException ("unknown/unhandled type of object in bean " + pt.getName ());
 144  
   }
 145  
  }
 146  
 }
 147