View Javadoc
1   /*
2    * Copyright (c) 2005, The JUNG Authors
3    * All rights reserved.
4    *
5    * This software is open-source under the BSD license; see either "license.txt"
6    * or https://github.com/jrtom/jung/blob/master/LICENSE for a description.
7    *
8    * Created on Aug 23, 2005
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      	// get a sub tree from subRoot
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  }