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);
}
}
}
}