/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.component.dynproperty; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import com.jinhe.tss.component.dynproperty.entity.DynableEntity; import com.jinhe.tss.component.dynproperty.entity.GridTemplate; import com.jinhe.tss.component.dynproperty.entity.PropertyDef; import com.jinhe.tss.component.dynproperty.entity.XFormTemplate; import com.jinhe.tss.component.dynproperty.entity.XFormTemplateTab; import com.jinhe.tss.core.util.EasyUtils; import com.jinhe.tss.core.web.dispaly.tree.ILevelTreeNode; import com.jinhe.tss.core.web.dispaly.tree.ITreeNode; import com.jinhe.tss.core.web.dispaly.tree.ITreeParser; import com.jinhe.tss.core.web.dispaly.tree.TreeAttributesMap; import com.jinhe.tss.core.web.dispaly.tree.TreeNode; /** * <p> DynTreeParser.java </p> * 动态属性树解析器 * * @author Jon.King 2008/04/14 10:18:53 $ */ public class DynPropertyTreeParser implements ITreeParser { public TreeNode parse(Object data) { Map<Long, TreeNode> treeNodeMap = new HashMap<Long, TreeNode>(); TreeNode root = new TreeNode(); List<?> list = (List<?>)data; if(!EasyUtils.isNullOrEmpty(list)){ Iterator<?> it = list.iterator(); while(it.hasNext()){ Object obj = it.next(); ILevelTreeNode entity = (ILevelTreeNode) obj; TreeNode item = new TreeNode(entity); treeNodeMap.put(entity.getId(), item); } it = new LinkedHashSet<Object>(list).iterator(); //用set可去除重复的 while(it.hasNext()){ ILevelTreeNode entity = (ILevelTreeNode) it.next(); Long parentId = entity.getParentId(); TreeNode parent = (TreeNode) treeNodeMap.get(parentId); TreeNode treeNode = (TreeNode) treeNodeMap.get(entity.getId()); TreeNode node = createDynTreeNode(treeNode, (DynableEntity) entity); if(parentId.equals(new Long(0))){ root.addChild(node); } else if (parent != null){ parent.addChild(node); } } } return root; } private TreeNode createDynTreeNode(TreeNode treeNode, final DynableEntity entity){ if(entity.isGroup()) return treeNode; TreeNode xformTemplatesNode = new TreeNode(new ITreeNode(){ public TreeAttributesMap getAttributes() { TreeAttributesMap map = new TreeAttributesMap("-1" + entity.getId(), "表单布局"); map.put("type", DynConstants.XFORM_TYPE); map.put("icon", "images/form_layout.gif"); return map; } }); TreeNode gridTemplatesNode = new TreeNode(new ITreeNode(){ public TreeAttributesMap getAttributes() { TreeAttributesMap map = new TreeAttributesMap("-2" + entity.getId(), "列表布局"); map.put("type", DynConstants.GRID_TYPE); map.put("icon", "images/list_layout.gif"); return map; } }); for(XFormTemplate template : entity.getXformTemplates()){ TreeNode xformTemplateNode = new TreeNode(template); for(XFormTemplateTab tab : template.getTabs()){ xformTemplateNode.addChild(new TreeNode(tab)); } xformTemplatesNode.addChild(xformTemplateNode); } for(GridTemplate gridTemplate : entity.getGridTemplates()){ gridTemplatesNode.addChild(new TreeNode(gridTemplate)); } treeNode.addChild(gridTemplatesNode); treeNode.addChild(xformTemplatesNode); for(PropertyDef propertyDef : entity.getProperties()){ treeNode.addChild(new TreeNode(propertyDef)); } return treeNode; } }