package com.rekoe.tree.service; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringEscapeUtils; import com.rekoe.tree.entity.Tree; import com.rekoe.tree.entity.TreeNode; /** * 抽象树节点服务层 * */ public abstract class AbstractTreeNodeService implements TreeNodeService { public StringBuffer getHTML(Tree tree, Map parameters) { StringBuffer html = new StringBuffer(); List nodes = getTreeNodes(tree, parameters); if (nodes == null || nodes.size() == 0) { return null; } html.append(""); return html; } /** * 获取子节点 * * @param parent * 树 * @param parameters * 参数 * @return 子节点 */ protected abstract List getTreeNodes(Tree parent, Map parameters); /** * 处理参数 * * @param handlers * html * @param params * 参数 */ protected void prepareParameters(StringBuffer handlers, Map params) { if (params == null) return; StringBuffer result = new StringBuffer(); Iterator iterKeys = params.keySet().iterator(); int count = 0; while (iterKeys.hasNext()) { if (count > 0) result.append("&"); count++; String key = iterKeys.next(); Object value = params.get(key); if (value != null) { if (value instanceof String) { result.append(key).append("=").append(value.toString()); } else if (value instanceof String[]) { String[] arrs = (String[]) value; for (String string : arrs) { if (string == null) { result.append(key).append("="); } else { result.append(key).append("=").append(string); } } } else { throw new RuntimeException("Not support parameter: " + key + "=" + value);// TODO } } else { result.append(key).append("="); } } if (result.length() > 0) { this.prepareAttribute(handlers, "param", result.toString()); } } /** * Prepares an attribute if the value is not null, appending it to the the * given StringBuffer. * * @param handlers * The StringBuffer that output will be appended to. * @param name * 属性名称 * @param value * 属性值 */ protected void prepareAttribute(StringBuffer handlers, String name, Object value) { if (value != null) { handlers.append(" "); handlers.append(name); handlers.append("=\""); handlers.append(value); handlers.append("\""); } } /** * @param tree * 树 * @param treeNode * 节点 * @return 是否是叶子节点 */ protected boolean isLeaf(Tree tree, TreeNode treeNode) { return treeNode.isLeaf() || tree.isLeaf(); } }