package com.ycsoft.report.query.tree; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 多叉树节点 * @author new * * @param <T> */ public class QManyNode<T> { // 节点的内容 private QData<T> data; // 子节点容器 private Map<String, QManyNode<T>> childMap; //父节点 private QManyNode<T> parentNode; // 构造函数 public QManyNode() { this.data = null; this.parentNode=null; } public QManyNode(QData<T> data) { this.data = data; this.parentNode=null; } /** * 增加一个子节点 * @param childdata * @return QManyNode<T> */ public QManyNode<T> addChild(QData<T> childdata) { initChildMap(); // 如果已存在该节点则 执行节点内容的运算功能,否则装入该节点 if (childMap.containsKey(childdata.getKey())) { QManyNode<T> node=childMap.get(childdata.getKey()); node.getNodeData().operationData(childdata.getData()); return node; } else { QManyNode<T> node=new QManyNode<T>(childdata); node.parentNode=this; childMap.put(childdata.getKey(),node); return node; } } /** * 获取一个子节点ByData * @param childdata * @return */ public QManyNode<T> getChild(QData<T> childdata) { if (childMap == null||childdata==null) return null; return this.childMap.get(childdata.getKey()); } public void initChildMap() { if (childMap == null) { childMap = new HashMap<String, QManyNode<T>>(); } } /** * 按QData.key排序的子节点列表 * * @return */ public List<QManyNode<T>> getChildList() { if(childMap==null) return null; Object[] keys= getChildKeyS(); List<QManyNode<T>> list=new ArrayList<QManyNode<T>>(keys.length); for(Object key:keys) list.add(childMap.get(key.toString())); return list; } /** * 是否树叶 * * @return */ public boolean isLeaf() { if (childMap == null) return true; else return false; } /** * * @return */ public Object[] getChildKeyS() { if (childMap == null) return null; Object[] keys = childMap.keySet().toArray(); java.util.Arrays.sort(keys); return keys; } public QData<T> getNodeData() { return data; } public QManyNode<T> getParentNode() { return parentNode; } }