001    package org.springframework.richclient.widget.table;
002    
003    import java.lang.reflect.InvocationTargetException;
004    import java.lang.reflect.Method;
005    
006    /**
007     * Basic implementation of an {@link Accessor}.
008     * 
009     * @author Jan Hoskens
010     * @since 0.5.0
011     */
012    public class SimpleAccessor implements Accessor
013    {
014    
015        /** The getter method. */
016        private final Method accessor;
017    
018        /**
019         * Constructor. Retrieves the getter of the given property.
020         * 
021         * @param clazz
022         *            the type of the entity.
023         * @param propertyName
024         *            name of the property.
025         */
026        public SimpleAccessor(Class<?> clazz, String propertyName)
027        {
028            this.accessor = ClassUtils.getReadMethod(clazz, propertyName);
029            if (accessor == null)
030                throw new IllegalArgumentException("propertyName " + propertyName
031                        + " does not represent a readable property.");
032        }
033    
034        /**
035         * {@inheritDoc}
036         */
037        public Object getValue(Object fromEntity) throws IllegalAccessException, InvocationTargetException
038        {
039            return accessor.invoke(fromEntity);
040        }
041    
042        /**
043         * {@inheritDoc}
044         */
045        public Class<?> getPropertyType()
046        {
047            return ClassUtils.getTypeForProperty(accessor);
048        }
049    
050    }