/* * Copyright 2015 JBoss, by Red Hat, Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.uberfire.ext.wires.core.trees.client.layout.treelayout; /** * Represents a tree to be used by the {@link TreeLayout}. * <p> * The TreeForTreeLayout interface is designed to best match the implemented * layout algorithm and to ensure the algorithm's time complexity promises in * all possible cases. However in most situation a client must not deal with all * details of this interface and can directly use the * {@link AbstractTreeForTreeLayout} to implement this * interface. * <p> * Also see <a href="package-summary.html">this overview</a>. * @param <TreeNode> <p/> * <p> * Adapted from https://code.google.com/p/treelayout/ to be available to GWT clients * <p> * @author Udo Borkowski (ub@abego.org) */ public interface TreeForTreeLayout<TreeNode> { /** * Returns the the root of the tree. * <p> * Time Complexity: O(1) * @return the root of the tree */ TreeNode getRoot(); /** * Tells if a node is a leaf in the tree. * <p> * Time Complexity: O(1) * @param node * @return true iff node is a leaf in the tree, i.e. has no children. */ boolean isLeaf(TreeNode node); /** * Tells if a node is a child of a given parentNode. * <p> * Time Complexity: O(1) * @param node * @param parentNode * @return true iff the node is a child of the given parentNode */ boolean isChildOfParent(TreeNode node, TreeNode parentNode); /** * Returns the children of a parent node. * <p> * Time Complexity: O(1) * @param parentNode [!isLeaf(parentNode)] * @return the children of the given parentNode, from first to last */ Iterable<TreeNode> getChildren(TreeNode parentNode); /** * Returns the children of a parent node, in reverse order. * <p> * Time Complexity: O(1) * @param parentNode [!isLeaf(parentNode)] * @return the children of given parentNode, from last to first */ Iterable<TreeNode> getChildrenReverse(TreeNode parentNode); /** * Returns the first child of a parent node. * <p> * Time Complexity: O(1) * @param parentNode [!isLeaf(parentNode)] * @return the first child of the parentNode */ TreeNode getFirstChild(TreeNode parentNode); /** * Returns the last child of a parent node. * <p> * <p> * Time Complexity: O(1) * @param parentNode [!isLeaf(parentNode)] * @return the last child of the parentNode */ TreeNode getLastChild(TreeNode parentNode); }