首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

不需要对象联系关系的转换器

2012-10-20 
不需要对象关联的转换器private static class MyResultTransformerE implements ResultTransformer{priv

不需要对象关联的转换器
private static class MyResultTransformer<E> implements ResultTransformer
    {
        private static final long serialVersionUID = 3592627688907737019L;

        private final Class<E> resultClass;

        private Setter[] setters;

        private PropertyAccessor propertyAccessor;

        public MyResultTransformer(Class<E> resultClass)
        {
            if (resultClass == null)
                throw new IllegalArgumentException("resultClass cannot be null");
            this.resultClass = resultClass;
            propertyAccessor = new ChainedPropertyAccessor(
                    new PropertyAccessor[]
                    {
                            PropertyAccessorFactory.getPropertyAccessor(
                                    resultClass, null),
                            PropertyAccessorFactory
                                    .getPropertyAccessor("field") });
        }

        public Object transformTuple(Object[] tuple, String[] aliases)
        {
            Object result;

            try
            {
                if (setters == null)
                {
                    setters = new Setter[aliases.length];
                    for (int i = 0; i < aliases.length; i++)
                    {
                        String alias = aliases[i];
                        if (alias != null)
                        {
                            setters[i] = propertyAccessor.getSetter(
                                    resultClass, alias);
                        }
                    }
                }
                result = resultClass.newInstance();

                for (int i = 0; i < aliases.length; i++)
                {
                    if (setters[i] != null)
                    {
                        if (tuple[i] instanceof BigDecimal)
                        {
                            setters[i].set(result, ((BigDecimal) tuple[i])
                                    .longValue(), null);
                        }
                        else if (tuple[i] instanceof BigInteger)
                        {
                            setters[i].set(result, ((BigInteger) tuple[i])
                                    .longValue(), null);
                        }
                        else
                        {
                            setters[i].set(result, tuple[i], null);
                        }
                    }
                }
            }
            catch (InstantiationException e)
            {
                throw new HibernateException(
                        "Could not instantiate resultclass: "
                                + resultClass.getName());
            }
            catch (IllegalAccessException e)
            {
                throw new HibernateException(
                        "Could not instantiate resultclass: "
                                + resultClass.getName());
            }

            return result;
        }

        public List transformList(List collection)
        {
            return collection;
        }

    }

热点排行