/* ================================================================== * 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.core.web.dispaly.tree; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.jinhe.tss.core.exception.BusinessException; import com.jinhe.tss.core.util.XmlUtil; /** * <p> TreeNode.java </p> * * 树节点对象 * */ public class TreeNode { public static final String DISABLED = "0"; // disabled public static final String ENABLED = "1"; // enabled public static final String TREENODE_ATTRIBUTE_CANSELECTED = "canselected"; // 可选 public static final String TREENODE_ATTRIBUTE_DISPLAY = "display"; // 是否显示 public static final String TREENODE_ATTRIBUTE_ID = "id"; public static final String TREENODE_ATTRIBUTE_NAME = "name"; Map<String, Object> attributes; // 节点属性 List<TreeNode> children = new ArrayList<TreeNode>(); // 子节点:TreeNode对象 /** * 构造器,用于空节点 */ public TreeNode() { attributes = new HashMap<String, Object>(); } /** * 构造器 * @param item */ public TreeNode(ITreeNode item) { attributes = item.getAttributes(); if(attributes == null) { throw new BusinessException("树结构数据对象异常,ITreeNode.getAttributes()返回的TreeAttributesMap为NULL"); } } public Object getId() { return attributes.get(TREENODE_ATTRIBUTE_ID); } /** * 初始化树节点。 * @param id * @param name * @param display */ void initTreeNode(String id, String name, boolean display) { attributes.put(TREENODE_ATTRIBUTE_ID, id); attributes.put(TREENODE_ATTRIBUTE_NAME, name); attributes.put(TREENODE_ATTRIBUTE_DISPLAY, display ? ENABLED : DISABLED); } /** * 生成节点的xml数据。 * 递归调用,将整棵树输出为XML格式数据 * * @param translator * @param tree_node_name * @return */ public String toXml(String nodeName, ITreeTranslator translator) { Map<String, Object> newAttributes = isRootNode() ? attributes : translator.translate(attributes); // 判断是否是Root节点,root节点无需转换 StringBuffer sb = new StringBuffer(); if(display()) { sb.append("<").append(nodeName); for (Entry<String, Object> entry : newAttributes.entrySet()) { sb.append(" ").append(entry.getKey()).append("=\"").append(XmlUtil.toFormXml(entry.getValue())).append("\""); } sb.append(">"); } // 递归调用,将整棵树输出为XML格式数据 for (TreeNode childNode : children) { sb.append(childNode.toXml(nodeName, translator)); } if(display()) { sb.append("</").append(nodeName).append(">"); } return sb.toString(); } boolean isRootNode() { return TreeEncoder.TREE_ROOT_NODE_ID.equals(attributes.get(TreeNode.TREENODE_ATTRIBUTE_ID)); } boolean display() { Object display = attributes.get(TreeNode.TREENODE_ATTRIBUTE_DISPLAY); return display == null || ENABLED.equals(display); } /** * 新增一个儿子节点。 * @param treeNode */ public void addChild(TreeNode treeNode) { children.add(treeNode); } /** * 获取子节点 * @return */ public List<TreeNode> getChildren() { return children; } /** * 禁止选择 */ public void disabled() { attributes.put(TREENODE_ATTRIBUTE_CANSELECTED, DISABLED); } /** * 启用选择 */ public void enabled() { attributes.put(TREENODE_ATTRIBUTE_CANSELECTED, ENABLED); } /** * 设置节点属性值 * * @param name * @param value */ public void setAttribute(String name, String value){ attributes.put(name, value); } }