/** * $Id: DynaBeanAdapter.java 2 2008-10-01 10:04:26Z azeckoski $ * $URL: http://reflectutils.googlecode.com/svn/trunk/src/main/java/org/azeckoski/reflectutils/beanutils/DynaBeanAdapter.java $ * DynaBeanAdapter.java - genericdao - Sep 20, 2008 10:08:01 AM - azeckoski ************************************************************************** * Copyright (c) 2008 Aaron Zeckoski * Licensed under the Apache License, Version 2.0 * * A copy of the Apache License has been included in this * distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt * * Aaron Zeckoski (azeckoski @ gmail.com) (aaronz @ vt.edu) (aaron @ caret.cam.ac.uk) */ package org.azeckoski.reflectutils.beanutils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.azeckoski.reflectutils.ClassFields.FieldsFilter; import org.azeckoski.reflectutils.exceptions.FieldnameNotFoundException; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaClass; import org.apache.commons.beanutils.DynaProperty; /** * This allows dynabeans to work with the field utils, * should only be loaded by reflection if the DynaBean class can be found * * @author Aaron Zeckoski (azeckoski @ gmail.com) */ public class DynaBeanAdapter implements FieldAdapter { public boolean isAdaptableObject(Object obj) { boolean adaptable = false; if (obj instanceof DynaBean) { adaptable = true; } return adaptable; } public boolean isAdaptableClass(Class<?> beanClass) { boolean adaptable = false; if (DynaBean.class.isAssignableFrom(beanClass)) { adaptable = true; } return adaptable; } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#getFieldType(java.lang.Object, java.lang.String) */ public Class<?> getFieldType(Object obj, String name) { DynaClass dynaClass = ((DynaBean) obj).getDynaClass(); DynaProperty dynaProperty = dynaClass.getDynaProperty(name); if (dynaProperty == null) { throw new FieldnameNotFoundException("DynaBean: Could not find this fieldName ("+name+") on the target object: " + obj, name, null); } return dynaProperty.getType(); } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#getFieldValues(java.lang.Object, org.azeckoski.reflectutils.ClassFields.FieldsFilter) */ public Map<String, Object> getFieldValues(Object obj, FieldsFilter filter) { Map<String, Object> values = new HashMap<String, Object>(); DynaProperty[] descriptors = ((DynaBean) obj).getDynaClass().getDynaProperties(); for (int i = 0; i < descriptors.length; i++) { String name = descriptors[i].getName(); // cannot filter the values for dynabeans -AZ Object o = getSimpleValue(obj, name); values.put(name, o); } return values; } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#getSimpleValue(java.lang.Object, java.lang.String) */ public Object getSimpleValue(Object obj, String name) { DynaProperty descriptor = ((DynaBean) obj).getDynaClass().getDynaProperty(name); if (descriptor == null) { throw new FieldnameNotFoundException(name); } Object value = (((DynaBean) obj).get(name)); return value; } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#getIndexedValue(java.lang.Object, java.lang.String, int) */ public Object getIndexedValue(Object obj, String name, int index) { DynaProperty descriptor = ((DynaBean) obj).getDynaClass().getDynaProperty(name); if (descriptor == null) { throw new FieldnameNotFoundException(name); } Object value = ((DynaBean) obj).get(name, index); return value; } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#getMappedValue(java.lang.Object, java.lang.String, java.lang.String) */ public Object getMappedValue(Object obj, String name, String key) { DynaProperty descriptor = ((DynaBean) obj).getDynaClass().getDynaProperty(name); if (descriptor == null) { throw new FieldnameNotFoundException(name); } Object value = ((DynaBean) obj).get(name, key); return value; } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#setIndexedValue(java.lang.Object, java.lang.String, int, java.lang.Object) */ public void setIndexedValue(Object obj, String name, int index, Object value) { DynaProperty descriptor = ((DynaBean) obj).getDynaClass().getDynaProperty(name); if (descriptor == null) { throw new FieldnameNotFoundException(name); } ((DynaBean) obj).set(name, index, value); } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#setMappedValue(java.lang.Object, java.lang.String, java.lang.String, java.lang.Object) */ public void setMappedValue(Object obj, String name, String key, Object value) { DynaProperty descriptor = ((DynaBean) obj).getDynaClass().getDynaProperty(name); if (descriptor == null) { throw new FieldnameNotFoundException(name); } ((DynaBean) obj).set(name, key, value); } /* (non-Javadoc) * @see org.azeckoski.reflectutils.beanutils.FieldAdapter#setSimpleValue(java.lang.Object, java.lang.String, java.lang.Object) */ public void setSimpleValue(Object obj, String name, Object value) { DynaProperty descriptor = ((DynaBean) obj).getDynaClass().getDynaProperty(name); if (descriptor == null) { throw new FieldnameNotFoundException(name); } ((DynaBean) obj).set(name, value); } public Object newInstance(Object bean) { try { return ((DynaBean) bean).getDynaClass().newInstance(); } catch (Exception e) { throw new RuntimeException("Could not instantiate DynaBean: " + bean, e); } // make new dynabean } public List<String> getPropertyNames(Object bean) { List<String> names = new ArrayList<String>(); DynaProperty origDescriptors[] = ((DynaBean) bean).getDynaClass().getDynaProperties(); for (DynaProperty dynaProperty : origDescriptors) { String name = dynaProperty.getName(); names.add(name); } return names; } }