/* ================================================================== * 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.Map; import com.jinhe.tss.core.web.dispaly.IDataEncoder; import com.jinhe.tss.core.web.dispaly.XmlPrintWriter; /** * <p> TreeEncoder.java </p> * * Tree对象:生成Tree控件所需要的xml数据 * */ public class TreeEncoder implements IDataEncoder { static final String TREE_NODE_NAME = "treeNode"; static final String TREE_ROOT_NODE_ID = "_rootId"; static final String TREE_ROOT_NODE_NAME = "全部"; /** 默认节点属性转换器:没有任何转换 */ final static ITreeTranslator DEFAULT_TRANSLATOR = new ITreeTranslator() { public Map<String, Object> translate(Map<String, Object> attributes) { return attributes; } }; /** 默认树解析器:单层树解析器 */ final static ITreeParser DEFAULT_TREE_PARSER = new SimpleTreeParser(); private Object data ; // 源数据 private ITreeParser parser; // 解析器 private ITreeTranslator translator = DEFAULT_TRANSLATOR; private TreeNodeOptionsEncoder optionsEncoder; // 树节点选项编码器 private boolean needRootNode = true; // 是否需要根节点 private boolean rootCanSelect = true; // 跟节点是否可以选择 private String rootNodeName = TREE_ROOT_NODE_NAME; // 根节点名称,允许更改 //单层树构造器 public TreeEncoder(Object data) { this(data, DEFAULT_TREE_PARSER); } //自带解析器的构造器 public TreeEncoder(Object data, ITreeParser parser) { this.data = data; this.parser = parser; } /** * 生成xml数据 * * @return * @throws Exception */ public String toXml() { StringBuffer sb = new StringBuffer("<actionSet>"); if (optionsEncoder != null) { sb.append(optionsEncoder.toXml()); } TreeNode root = parser.parse(data); // 解析完成后,node为根节点 if (root != null) { root.initTreeNode(TREE_ROOT_NODE_ID, rootNodeName, needRootNode); if (!rootCanSelect) { root.disabled(); } sb.append(root.toXml(TREE_NODE_NAME, translator)); } return sb.append("</actionSet>").toString(); } public void print(XmlPrintWriter out) { out.append(toXml()); } /** * 设置是否需要根节点,默认为 true * @param needRootNode */ public void setNeedRootNode(boolean needRootNode) { this.needRootNode = needRootNode; } /** * 设置根节点的名称,默认为“全部” * @param rootNodeName */ public void setRootNodeName(String rootNodeName) { this.rootNodeName = rootNodeName; } /** * 设置根节点是否可选。 * @param rootCanSelect */ public void setRootCanSelect(boolean rootCanSelect) { this.rootCanSelect = rootCanSelect; } /** * 设置树节点的操作权限编码。 * @param optionsEncoder */ public void setOptionsEncoder(TreeNodeOptionsEncoder optionsEncoder) { this.optionsEncoder = optionsEncoder; } /** * <p> 设置树节点属性转换工具 </p> * @param translator */ public void setTranslator(ITreeTranslator translator){ this.translator = translator; } }