001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.tree; 017 018 import java.util.Enumeration; 019 020 import javax.swing.JTree; 021 import javax.swing.tree.TreeModel; 022 import javax.swing.tree.TreeNode; 023 import javax.swing.tree.TreePath; 024 025 public class TreeUtils { 026 public static String buildFormattedTreePath(TreeObject treeObject, boolean includeRoot, String delimSymbol) { 027 if (treeObject == null) { 028 return ""; 029 } 030 TreeObject parent = treeObject; 031 if (parent == null) { 032 return ""; 033 } 034 StringBuffer buffer = new StringBuffer(); 035 if (delimSymbol == null) { 036 delimSymbol = "/"; 037 } 038 boolean firstTime = true; 039 while (parent != null) { 040 TreeObject p = parent.getParent(); 041 if (p == null) { 042 if (includeRoot) { 043 buffer.insert(0, "/" + parent.getDisplayName() + "/"); 044 } 045 } 046 else { 047 if (firstTime) { 048 buffer.insert(0, parent.getDisplayName()); 049 firstTime = false; 050 } 051 else { 052 buffer.insert(0, parent.getDisplayName() + delimSymbol); 053 } 054 } 055 parent = p; 056 } 057 return buffer.toString(); 058 } 059 060 // If expand is true, expands all nodes in the tree. 061 // Otherwise, collapses all nodes in the tree. 062 public static void expandAll(JTree tree, boolean expand) { 063 TreeNode root = (TreeNode)tree.getModel().getRoot(); 064 // Traverse tree from root 065 expandAll(tree, new TreePath(root), expand); 066 } 067 068 // If expand is true, expands all nodes in the tree. 069 // Otherwise, collapses all nodes in the tree. 070 public static void expandLevels(JTree tree, int levels, boolean expand) { 071 TreeModel model = tree.getModel(); 072 if (model == null) { 073 return; 074 } 075 TreeNode root = (TreeNode)model.getRoot(); 076 // Traverse tree from root 077 expandLevels(tree, new TreePath(root), levels, expand); 078 } 079 080 public static void expandLevels(JTree tree, TreePath parent, int levels, boolean expand) { 081 // Traverse children 082 TreeNode node = (TreeNode)parent.getLastPathComponent(); 083 if (node.getChildCount() >= 0) { 084 for (Enumeration e = node.children(); e.hasMoreElements();) { 085 TreeNode n = (TreeNode)e.nextElement(); 086 TreePath path = parent.pathByAddingChild(n); 087 if (levels > 0) { 088 expandLevels(tree, path, --levels, expand); 089 } 090 } 091 } 092 093 // Expansion or collapse must be done bottom-up 094 if (expand) { 095 tree.expandPath(parent); 096 } 097 else { 098 tree.collapsePath(parent); 099 } 100 } 101 102 public static void expandAll(JTree tree, TreePath parent, boolean expand) { 103 // Traverse children 104 TreeNode node = (TreeNode)parent.getLastPathComponent(); 105 if (node.getChildCount() >= 0) { 106 for (Enumeration e = node.children(); e.hasMoreElements();) { 107 TreeNode n = (TreeNode)e.nextElement(); 108 TreePath path = parent.pathByAddingChild(n); 109 expandAll(tree, path, expand); 110 } 111 } 112 113 // Expansion or collapse must be done bottom-up 114 if (expand) { 115 tree.expandPath(parent); 116 } 117 else { 118 tree.collapsePath(parent); 119 } 120 } 121 122 }