1
2
3
4
5
6
7
8
9
10 package edu.uci.ics.jung.visualization.subLayout;
11
12 import java.awt.geom.Point2D;
13
14 import edu.uci.ics.jung.algorithms.layout.Layout;
15 import edu.uci.ics.jung.graph.Forest;
16 import edu.uci.ics.jung.graph.util.TreeUtils;
17
18 public class TreeCollapser {
19
20 @SuppressWarnings({ "unchecked", "rawtypes" })
21 public void collapse(Layout layout, Forest tree, Object subRoot) throws InstantiationException, IllegalAccessException {
22
23
24 Forest subTree = TreeUtils.getSubTree(tree, subRoot);
25 Object parent = null;
26 Object edge = null;
27 if(tree.getPredecessorCount(subRoot) > 0) {
28 parent = tree.getPredecessors(subRoot).iterator().next();
29 edge = tree.getInEdges(subRoot).iterator().next();
30 }
31 tree.removeVertex(subRoot);
32 if(parent != null) {
33 tree.addEdge(edge, parent, subTree);
34 } else {
35 tree.addVertex(subTree);
36 }
37
38 layout.setLocation(subTree, (Point2D)layout.apply(subRoot));
39 }
40
41 @SuppressWarnings({ "unchecked", "rawtypes" })
42 public void expand(Forest tree, Forest subTree) {
43
44 Object parent = null;
45 Object edge = null;
46 if(tree.getPredecessorCount(subTree) > 0) {
47 parent = tree.getPredecessors(subTree).iterator().next();
48 edge = tree.getInEdges(subTree).iterator().next();
49 }
50 tree.removeVertex(subTree);
51 TreeUtils.addSubTree(tree, subTree, parent, edge);
52 }
53 }