package tk.amberide.ide.swing.tree;
// @author santhosh kumar T - santhosh@in.fiorano.com
import javax.swing.*;
import javax.swing.tree.TreePath;
import java.util.StringTokenizer;
public class Trees {
// is path1 descendant of path2?
public static boolean isDescendant(TreePath path1, TreePath path2) {
int count1 = path1.getPathCount();
int count2 = path2.getPathCount();
if (count1 <= count2) {
return false;
}
while (count1 != count2) {
path1 = path1.getParentPath();
count1--;
}
return path1.equals(path2);
}
public static String getExpansionState(JTree tree, int row) {
TreePath rowPath = tree.getPathForRow(row);
StringBuilder buf = new StringBuilder();
int rowCount = tree.getRowCount();
for (int i = row; i < rowCount; i++) {
TreePath path = tree.getPathForRow(i);
if (i == row || isDescendant(path, rowPath)) {
if (tree.isExpanded(path)) {
buf.append(",").append(String.valueOf(i - row));
}
} else {
break;
}
}
return buf.toString();
}
public static void restoreExpanstionState(JTree tree, int row, String expansionState) {
StringTokenizer stok = new StringTokenizer(expansionState, ",");
while (stok.hasMoreTokens()) {
int token = row + Integer.parseInt(stok.nextToken());
tree.expandRow(token);
}
}
}