private void expandCurrentlySelectedNode()

in src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java [1072:1138]


    private void expandCurrentlySelectedNode() {
        TreePath[] paths = logTree.getSelectionPaths();

        if (paths == null) {
            return;
        }

        logger.debug("Expanding all children of selected node");

        for (TreePath path : paths) {
            /**
             * TODO this is commented out, right now it expands all nodes including the root, so if there is a large tree..... look out.
             */

            //      /**
            //       * Handle an expansion of the Root node by only doing the first level.
            //       * Safe...
            //       */
            //      if (path.getPathCount() == 1) {
            //        logTree.expandPath(path);
            //
            //        return;
            //      }

            DefaultMutableTreeNode treeNode =
                (DefaultMutableTreeNode) path.getLastPathComponent();

            Enumeration depthEnum = treeNode.depthFirstEnumeration();

            if (!depthEnum.hasMoreElements()) {
                break;
            }

            List<Integer> depths = new ArrayList<>();

            while (depthEnum.hasMoreElements()) {
                depths.add(
                    ((DefaultMutableTreeNode) depthEnum.nextElement()).getDepth());
            }

            Collections.sort(depths);
            Collections.reverse(depths);

            int maxDepth = depths.get(0);

            if (maxDepth > WARN_DEPTH) {
                logger.warn("Should warn user, depth=" + maxDepth);
            }

            depthEnum = treeNode.depthFirstEnumeration();

            while (depthEnum.hasMoreElements()) {
                DefaultMutableTreeNode node =
                    (DefaultMutableTreeNode) depthEnum.nextElement();

                if (node.isLeaf() && node.getParent() != null) {
                    TreeNode[] nodes =
                        ((DefaultMutableTreeNode) node.getParent()).getPath();
                    TreePath treePath = new TreePath(nodes);

                    logger.debug("Expanding path:" + treePath);

                    logTree.expandPath(treePath);
                }
            }
        }
    }