⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commondtogenerator.java

📁 《j2ee开发全程实录》随书源码
💻 JAVA
字号:
package com.cownew.PIS.framework.bizLayer;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import com.cownew.PIS.framework.common.IValueObject;
import com.cownew.PIS.framework.common.db.Selectors;
import com.cownew.PIS.framework.common.metaDataMgr.EntityFieldModelInfo;
import com.cownew.PIS.framework.common.metaDataMgr.EntityModelInfo;
import com.cownew.PIS.framework.common.metaDataMgr.LinkTypeEnum;
import com.cownew.PIS.framework.server.helper.ServerMetaDataLoaderFactory;
import com.cownew.ctk.common.PropertyUtils;
import com.cownew.ctk.common.ExceptionUtils;

//此类目前无用,因为我们只使用hibernateORM,因此也使用专用的HibernateDTOGenerator
//这样的一个好处是HibernateDTOGenerator可以脱离我们的框架使用,坏处是和hibernate绑定
//如果以后要改其他orm的话,可以使用本类,目前还不完善,比如一对多属性的类型只支持Set
abstract public class CommonDTOGenerator extends AbstractDTOGenerator
{
	public Object generateDTO(Object srcBean, Selectors selectors)
	{
		try
		{
			return copyValueObject((IValueObject) srcBean, selectors);
		} catch (InstantiationException e)
		{
			throw ExceptionUtils.toRuntimeException(e);
		} catch (IllegalAccessException e)
		{
			throw ExceptionUtils.toRuntimeException(e);
		}

	}

	public Object generateDTO(Object srcBean)
	{
		try
		{
			return copyValueObject((IValueObject) srcBean);
		} catch (InstantiationException e)
		{
			throw ExceptionUtils.toRuntimeException(e);
		} catch (IllegalAccessException e)
		{
			throw ExceptionUtils.toRuntimeException(e);
		}

	}

	/**
	 * 得到bean的真实类,也就是剥离了lazyload等aop方面以后的类,
	 * 比如在hibernate中就是:
	 * return HibernateProxyHelper
	 *			.getClassWithoutInitializingProxy(bean)
	 * @param bean
	 * @return
	 */
	protected abstract Class getRealClass(Object bean);

	private IValueObject copyValueObject(IValueObject srcVO, Selectors selectors)
			throws InstantiationException, IllegalAccessException
	{
		Class destClass = getRealClass(srcVO);

		IValueObject newBean = (IValueObject) destClass.newInstance();

		EntityModelInfo eInfo = ServerMetaDataLoaderFactory.getLoader()
				.loadEntityByVOClass(destClass);

		List fields = eInfo.getFields();
		for (int i = 0, n = fields.size(); i < n; i++)
		{
			EntityFieldModelInfo fInfo = (EntityFieldModelInfo) fields.get(i);
			if (!fInfo.isLinkProperty())
			{
				Object value = PropertyUtils.getProperty(srcVO, fInfo.getName());
				PropertyUtils.setProperty(newBean, fInfo.getName(), value);
			} else if (selectors != null)
			{
				Selectors subSelector = selectors.generateSubSelectors(fInfo
						.getName());
				if (fInfo.getLinkType().equals(LinkTypeEnum.ONETOMANY)
						&& selectors.contains(fInfo.getName()))
				{
					//TODO:支持其他集合属性,比如List
					Set valueSet = new HashSet();
					Set oldSet = (Set) PropertyUtils.getProperty(srcVO, fInfo
							.getName());
					Iterator oldIt = oldSet.iterator();
					while (oldIt.hasNext())
					{
						IValueObject oldValue = (IValueObject) oldIt.next();
						if (oldValue != null)
						{
							IValueObject obj = copyValueObject(oldValue,
									subSelector);
							valueSet.add(obj);
						}
					}
					PropertyUtils.setProperty(newBean, fInfo.getName(), valueSet);
				} else if (selectors.contains(fInfo.getName()))
				{
					Object oldVO = PropertyUtils
							.getProperty(srcVO, fInfo.getName());
					if (oldVO != null)
					{
						IValueObject obj = copyValueObject(
								(IValueObject) oldVO, subSelector);
						PropertyUtils.setProperty(newBean, fInfo.getName(), obj);
					}

				}
			}
		}

		return newBean;
	}

	private IValueObject copyValueObject(IValueObject srcVO)
			throws InstantiationException, IllegalAccessException
	{
		Class destClass = getRealClass(srcVO);

		IValueObject newBean = (IValueObject) destClass.newInstance();

		EntityModelInfo eInfo = ServerMetaDataLoaderFactory.getLoader()
				.loadEntityByVOClass(destClass);

		List fields = eInfo.getFields();
		for (int i = 0, n = fields.size(); i < n; i++)
		{
			EntityFieldModelInfo fInfo = (EntityFieldModelInfo) fields.get(i);
			if (!fInfo.isLinkProperty())
			{
				Object value = PropertyUtils.getProperty(srcVO, fInfo.getName());
				PropertyUtils.setProperty(newBean, fInfo.getName(), value);
			}
		}

		return newBean;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -