/* * 文件名称: KvUtil.java * 版权信息: Copyright 2013-2014 chunchen technology Co., LTD. All right reserved. * ---------------------------------------------------------------------------------------------- * 修改历史: * ---------------------------------------------------------------------------------------------- * 修改原因: 新增 * 修改人员: zhangyz * 修改日期: 2014-3-12 * 修改内容: */ package com.mfh.comna.comn.bean; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import com.mfh.comn.bean.EntityWrapper; import net.tsz.afinal.db.table.Id; import net.tsz.afinal.db.table.Property; import net.tsz.afinal.db.table.TableInfo; /** * 支持将原始数据结构EntityWrapperbean的导出成GroupKeyValue界面显示结构(key-value)形式,便于view层使用。 * @author zhangyz created on 2014-3-12 */ public class KvBean<T> { protected EntityWrapper<T> wrapperBean = null; private transient List<GroupKeyValue> kvsList = null;//供在列表中显示一条记录 private transient List<GroupKeyValue> kvsDetail = null;//供在详细页面中显示一条记录 private final static String KEY_SEPARATOR = "key_seprator"; // 测试需要 public KvBean() { } /** * 按分隔bean构造 * @param caption */ public KvBean(String caption) { wrapperBean = new EntityWrapper<T>(null); wrapperBean.addCaption(KEY_SEPARATOR, caption); } /** * 按真实bean构造 * @param bean */ public KvBean(T bean) { super(); this.wrapperBean = new EntityWrapper<T>(bean); } /** * 按真实bean构造 * @param wrapperBean */ public KvBean(EntityWrapper<T> wrapperBean) { super(); this.wrapperBean = wrapperBean; } /** * 是否分隔bean * @return */ public boolean isSeparator() { if (wrapperBean != null && (wrapperBean.getBean() == null) && wrapperBean.getCaption() != null) { return true; } else return false; } /** * 获取分隔标题 * @return */ public String getSeparatTitle() { if (isSeparator()) { return wrapperBean.getCaption().get(KEY_SEPARATOR); } else return null; } /** * 转换形式 * @param wrapperBeans * @return * @author zhangyz created on 2014-3-12 */ public static <T> List<KvBean<T>> exportToKvs(List<EntityWrapper<T>> wrapperBeans) { if (wrapperBeans == null) return null; List<KvBean<T>> ret = new ArrayList<KvBean<T>>(); for (EntityWrapper<T> wrapper : wrapperBeans) { ret.add(new KvBean<T>(wrapper)); } return ret; } /** * 直接把bean转换成目标格式 * @param beans * @param <T> * @return */ public static <T> List<KvBean<T>> exportToKvsDirect(List<T> beans) { if (beans == null) return null; List<KvBean<T>> ret = new ArrayList<KvBean<T>>(); for (T bean : beans) { ret.add(new KvBean<T>(new EntityWrapper(bean))); } return ret; } /** * 获取实际bean对象 * @return * @author zhangyz created on 2014-3-12 */ public T getBean() { return wrapperBean.getBean(); } /** * 将bean导出成key-value形式,供界面上列表直接显示一条记录。 * 其中key是属性名,value是中文名 * @return * @author zhangyz created on 2014-3-10 */ public List<GroupKeyValue> getKvsList() { if (kvsList == null) kvsList = exportKeyValueInner(false); return kvsList; } /** * 获取指定属性的属性值(字符串值),若该属性不存在则抛出异常提醒错误 * @param propName * @return * @author zhangyz created on 2014-3-12 */ public String getPropValue(String propName) { List<GroupKeyValue> kvs = getKvsList(); for (GroupKeyValue item : kvs) { if (item.getKey().equals(propName)) return item.getValueStr(); } throw new RuntimeException("不存在的属性名,请检查!"); } /** * 将bean导出成key-value形式,供界面上单条记录详细显示。 * 其中key是属性名的中文名,value是中文名,两个都是中文名 * @return * @author zhangyz created on 2014-3-10 */ public List<GroupKeyValue> getKvsDetail() { if (kvsDetail == null) kvsDetail = exportKeyValueInner(true); return kvsDetail; } /** * 将bean导出成key-value形式 * @param detail true:详细页面显示;false:列表下显示 * @return * @author zhangyz created on 2014-3-10 */ private List<GroupKeyValue> exportKeyValueInner(boolean detail) { T bean = wrapperBean.getBean(); Map<String, String> captions = wrapperBean.getCaption(); TableInfo table = TableInfo.get(bean.getClass()); Iterator<Property> iter = table.propertyMap.values().iterator(); List<GroupKeyValue> result = new ArrayList<GroupKeyValue>(); Object propValue; String caption; String propName = "id"; Id id = table.getId(); if (id != null) { propValue = id.getValue(bean); caption = getFactCaption(propName, propValue, captions); if (detail) result.add(new GroupKeyValue(id.getCaption() == null ? propName : id.getCaption(), caption)); else result.add(new GroupKeyValue(propName, caption)); } while (iter.hasNext()) { Property prop = iter.next(); propName = prop.getFieldName(); propValue = prop.getValue(bean); caption = getFactCaption(propName, propValue, captions); if (detail) result.add(new GroupKeyValue(prop.getCaption() == null ? propName : prop.getCaption(), caption)); else result.add(new GroupKeyValue(propName, caption)); } return result; } private String getFactCaption(String propName, Object propValue, Map<String, String> captions) { if (captions != null) { String captionValue = captions.get(propName); if (captionValue != null) propValue = captionValue; } if (propValue == null) return ""; else return propValue.toString(); } }