All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.featherfly.common.structure.tree.TreeNodeModel Maven / Gradle / Ivy

package cn.featherfly.common.structure.tree;

import java.util.Comparator;
import java.util.List;

/**
 * 

* TreeNodeModel,树结构模型. *

* * @param 树模型 * @author zhongj */ public interface TreeNodeModel> { /** * 根节点的DEPTH值 */ int ROOT_DEPTH = 0; // ******************************************************************** // TreeNode method 整个节点范围 // ******************************************************************** /** * 返回当前节点的所有祖先节点. * 即 父节点,父节点的父节点...一直到根节点. * 顺序为最开始为父节点,最后的为根节点. * @return 当前节点的所有祖先节点 */ List getAncestors(); /** * 判断传入节点是否是当前节点的祖先节点,等价{@link #isProgeny(TreeNodeModel)}. * 即 父节点,父节点的父节点...一直到根节点 * @param ancestor 查找节点 * @return 传入节点是否是当前节点的祖先节点 */ boolean hasAncestor(T ancestor); /** * 判断当前节点是否是传入节点的后裔,等价{@link #hasAncestor(TreeNodeModel)}. * 即 子节点,子节点的子节点....遍历整个节点树 * @param ancestor 查找节点 * @return 当前节点是否是传入节点的后裔 */ boolean isProgeny(T ancestor); /** * 返回该节点下的所有子孙节点(包含下级的下级,不包含该节点). * @return 该节点下的所有子孙节点(包含下级的下级,不包含该节点) */ List getProgenys(); /** * 返回该节点及其所有子孙节点(包含该节点) * @return 该节点及其所有子孙节点(包含该节点) */ List getEveryNode(); /** * 判断传入节点是否是当前节点的后裔,等价{@link #isAncestor(TreeNodeModel)}. * 即 子节点,子节点的子节点....遍历整个节点树 * @param progeny 查找节点 * @return 传入节点是否是当前节点的后裔 */ boolean hasProgeny(T progeny); /** * 判断当前节点是否是传入节点的祖先节点,等价{@link #hasProgeny(TreeNodeModel)}. * 即 父节点,父节点的父节点...一直到根节点 * @param progeny 查找节点 * @return 当前节点是否是传入节点的祖先节点 */ boolean isAncestor(T progeny); /** * 从子孙节点中找到指定节点,并将其返回. * @param progeny 查找节点 * @return 子孙节点中与传入节点相同的节点 */ T findProgeny(T progeny); /** * 从子孙节点中找到指定id的节点,并将其返回 * @param progenyId 查找节点ID * @return 子孙节点中与传入节点ID相同的节点 */ T findProgeny(String progenyId); /** * 从子孙节点中找到第一个匹配的节点,并将其返回(包含自身) * @param matcher 匹配器 * @return 自身节点以及子孙节点中第一个匹配的节点 */ T findTreeNode(TreeNodeMatcher matcher); /** * 从子孙节点中找到指定节点,并将其返回(包含自身) * @param node 查找节点 * @return 自身节点以及子孙节点中与传入节点相同的节点 */ T findTreeNode(T node); /** * 从子孙节点中找到指定id的节点,并将其返回(包含自身) * @param nodeId 超找节点ID * @return 自身节点以及子孙节点中与传入节点ID相同的节点 */ T findTreeNode(String nodeId); /** * 该节点及其所有子节点使用传入执行器进行操作 * 深度优先 * @param executor 执行器 */ void each(NodeExecutor executor); // ******************************************************************** // TreeNode method 上下级节点范围 // ******************************************************************** /** * 返回指定子节点的序列值(index) * @param childNode 子节点 * @return 指定子节点的序列值(index) */ int indexOf(T childNode); /** * 返回自己的位置 * @return 自己的位置 */ int getPosition(); /** * 返回传入节点是否是当前节点的子节点,等价{@link #isParent(TreeNodeModel)}. * @param childNode 子节点 * @return 是否是当前节点的子节点 */ boolean hasChildNode(T childNode); /** * 判断当前节点是否是传入节点的子节点 * @param parentNode 父节点 * @return 判断当前节点是否是传入节点的子节点 */ boolean isChildNode(T parentNode); /** * 返回当前节点是否是传入节点的父节点,等价{@link #hasChildNode(TreeNodeModel)}. * @param childNode 子节点 * @return 当前节点是否是传入节点的父节点 */ boolean isParent(T childNode); /** * 返回子节点的数量 * @return 子节点的数量 */ int getChildSize(); /** * 添加子节点 * @param childNode 子节点 */ void addChildNode(T childNode); /** * 批量添加子节点 * @param childNodes 子节点 */ void addChildNodes(@SuppressWarnings("unchecked") T...childNodes); /** * 批量添加子节点 * @param childNodes 子节点 */ void addChildNodes(List childNodes); /** * 在指定位置插入子节点 * @param childNode 子节点 * @param index 插入位置 */ void insertChildNode(T childNode, int index); /** * 在指定节点(refChildNode)之前插入(insertChildNode) * 如果找不到refChildNode就插入在最后 * @param childNode 子节点 * @param refChildNode 插入参考节点 */ void insertChildNodeBefore(T childNode, T refChildNode); /** * 在指定节点(refChildNode)之前插入(insertChildNode) * 如果找不到refChildNode就插入在最后 * @param childNode 子节点 * @param refChildNode 插入参考节点 */ void insertChildNodeAfter(T childNode, T refChildNode); /** * 移出子节点 * @param childNode 子节点 */ void removeChildNode(T childNode); /** * 移出所有子节点 */ void removeChildNodes(); /** * 替换指定节点 * @param newChild 新节点 * @param oldChild 待替换节点 */ void replaceChild(T newChild, T oldChild); /** * 如果传入节点存在,替换节点,不存在就添加 * @param child 子节点 */ void mergeChild(T child); /** * 将当前节点从其父节点移出 */ void remove(); /** * 返回第一个子节点 * @return 第一个子节点,没有子节点返回null */ T getFirstChild(); /** * 返回最后一个子节点 * @return 最后一个子节点,没有子节点返回null */ T getLastChild(); /** * 返回相邻的下一个节点 * @return 没有相邻的下一个节点返回null */ T getNextSibling(); /** * 返回相邻的上一个节点 * @return 没有相邻的上一个节点返回null; */ T getPreviousSibling(); /** * 当前节点是否是第一个节点. * 只有当前一个节点时,返回true * @return 当前节点是否是第一个节点 */ boolean isFirst(); /** * 当前节点是否是最后一个节点. * 只有当前一个节点时,返回true * @return 当前节点是否是最后一个节点 */ boolean isLast(); /** * 通过传入的指定比较器对该节点的子节点进行排序 * @param comparator 比较器 */ void sort(Comparator comparator); /** * 通过传入的指定比较器对该节点的子节点进行排序. * 如果containProgeny为真会排序所有子孙节点(子节点的子节点) * @param comparator 比较器 * @param containProgeny 是否包含子孙节点 */ void sort(Comparator comparator, boolean containProgeny); // ******************************************************************** // setter and getter // ******************************************************************** /** *

* 获取唯一标识 *

* * @return 唯一标识 */ String getId(); /** *

* 返回是否是根 *

* @return 是否是跟 */ boolean isRoot(); /** *

* 返回是否是叶节点(没有子节点) *

* @return 是否是叶节点 */ boolean isLeaf(); /** * 返回depth * @return depth */ int getDepth(); /** *

* 返回上级 *

* * @return 上级 */ T getParent(); /** *

* 返回直属下级 *

* * @return 直属下级 */ List getChildNodes(); /** *

* 复制 *

* @return 复制的对象 */ T clone(); /** *

* 复制节点并改变为根节点 *

* @return 复制的对象 */ T cloneAsRoot(); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy