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

📄 entitydatavalidator.java

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

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;

import com.cownew.PIS.framework.common.IBaseDAO;
import com.cownew.PIS.framework.common.IValueObject;

import com.cownew.PIS.framework.common.metaDataMgr.EntityFieldModelInfo;
import com.cownew.PIS.framework.common.metaDataMgr.EntityModelInfo;
import com.cownew.PIS.framework.common.metaDataMgr.IMetaDataLoader;
import com.cownew.PIS.framework.common.metaDataMgr.MetaDataException;
import com.cownew.PIS.framework.common.metaDataMgr.MetaDataHelper;
import com.cownew.PIS.framework.common.utils.KeyValueList;
import com.cownew.ctk.common.PropertyUtils;
import com.cownew.ctk.common.ExceptionUtils;
import com.cownew.ctk.common.StringUtils;

/**
 * 值对象验证器
 */
public class EntityDataValidator
{
	private IBaseDAO baseDAO;

	private MetaDataHelper metaDataHelper;

	private IMetaDataLoader metaDataLoader;

	public EntityDataValidator(IMetaDataLoader metaDataLoader, IBaseDAO baseDAO)
	{
		super();
		this.baseDAO = baseDAO;
		metaDataHelper = new MetaDataHelper(metaDataLoader);
		this.metaDataLoader = metaDataLoader;
	}

	/**
	 * 验证值对象的属性是否重复,重复则抛异常
	 * @param ov 被验证的ov   
	 * @param property 被验证的属性
	 */
	public void checkPropertyDup(IValueObject ov, String property)

	{
		String propertyName = null;
		try
		{
			propertyName = metaDataHelper.getPropertyAlias(ov, property);
		} catch (MetaDataException e)
		{
			throw ExceptionUtils.toRuntimeException(e);
		}
		checkPropertyDup(ov, property, propertyName);
	}

	/**
	 * 验证值对象的属性是否重复,重复则抛异常
	 * @param ov被验证的ov       
	 * @param property 被验证的属性  
	 * @param dispalyName 属性的名称
	 */
	public void checkPropertyDup(IValueObject ov, String property,
			String dispalyName)
	{
		StringBuffer sql = new StringBuffer();
		KeyValueList kvList = new KeyValueList();
		kvList.add("prop", PropertyUtils.getProperty(ov, property));
		sql.append("from ").append(ov.getClass().getName());
		sql.append(" where ");
		sql.append(property).append(" = :prop ");
		if (!StringUtils.isEmpty(ov.getId()))
		{
			sql.append(" and id<>:id");
			kvList.add("id", ov.getId());
		}
		boolean exists = baseDAO.exists(sql.toString(), kvList);
		if (exists)
		{
			throw new VerifyException(VerifyException.PROPDUP,
					new Object[] { dispalyName });
		}
	}

	/**
	 * 验证值对象的属性是否为空,为空则抛异常
	 * @param ov 被验证的ov         
	 * @param property 被验证的属性
	 */
	public void checkEmpty(IValueObject ov, String property)

	{
		String propertyName = null;
		try
		{
			propertyName = metaDataHelper.getPropertyAlias(ov, property);
		} catch (MetaDataException e)
		{
			throw ExceptionUtils.toRuntimeException(e);
		}
		checkEmpty(ov, property, propertyName);
	}

	/**
	 * 验证值对象的属性是否为空,为空则抛异常
	 * @param ov 被验证的ov        
	 * @param property 被验证的属性        
	 * @param dispalyName 属性的名称
	 */
	public void checkEmpty(IValueObject ov, String property, String dispalyName)

	{
		Object value = PropertyUtils.getProperty(ov, property);

		boolean isEmpty = false;

		if (value == null)
		{
			isEmpty = true;
		} else
		{
			if (value instanceof String)
			{
				isEmpty = StringUtils.isEmpty((String) value);
			}
		}

		if (isEmpty)
		{
			throw new VerifyException(VerifyException.CANNOTEMPTY,
					new Object[] { dispalyName });
		}
	}

	/**
	 * 通过元数据设置中AllowNull属性来进行判断是否为空
	 */
	public void checkEmpty(IValueObject ov)
	{
		EntityModelInfo eInfo = metaDataLoader.loadEntityByVOClass(ov
				.getClass());
		String pk = eInfo.getPrimaryKey();
		List fieldList = eInfo.getFields();
		for (int i = 0, n = fieldList.size(); i < n; i++)
		{
			EntityFieldModelInfo fieldInfo = (EntityFieldModelInfo) fieldList
					.get(i);

			boolean isPK = fieldInfo.getName().equals(pk);
			// 主键因为是uuid.hex生成,所以不校验是否为空
			if (!isPK)
			{
				if (!fieldInfo.isAllowNull())
				{
					checkEmpty(ov, fieldInfo.getName(), fieldInfo.getAlias());
				}

			}
		}
	}

	/**
	 * 验证值对象的属性是否大于0,小于等于0则抛异常
	 * @param ov 被验证的ov        
	 * @param property 被验证的属性
	 */
	public void checkNotMoreThanZero(IValueObject ov, String property)

	{
		String propertyName = null;
		try
		{
			propertyName = metaDataHelper.getPropertyAlias(ov, property);
		} catch (MetaDataException e)
		{
			throw ExceptionUtils.toRuntimeException(e);
		}
		checkNotMoreThanZero(ov, property, propertyName);
	}

	/**
	 * 验证值对象的属性是否大于0,小于等于0则抛异常
	 * @param ov 被验证的ov           
	 * @param property 被验证的属性           
	 * @param dispalyName 属性的名称
	 */
	public void checkNotMoreThanZero(IValueObject ov, String property,
			String dispalyName)
	{
		Object value = PropertyUtils.getProperty(ov, property);

		boolean valid = true;

		if (value == null)
		{
			valid = false;
		} else if (value instanceof BigDecimal)
		{
			BigDecimal number = (BigDecimal) value;
			valid = (number.signum() > 0);
		} else if (value instanceof BigInteger)
		{
			BigInteger number = (BigInteger) value;
			valid = (number.signum() > 0);
		} else
		{
			Number number = (Number) value;
			valid = (number.longValue() > 0);
		}

		if (!valid)
		{
			throw new VerifyException(VerifyException.NOTMORETHANZERO,
					new Object[] { dispalyName });
		}

	}

}

⌨️ 快捷键说明

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