1 package org.picocontainer.gems.monitors.prefuse; 2 3 import java.util.Collection ; 4 import java.util.HashMap ; 5 import java.util.Map ; 6 7 import org.picocontainer.gems.monitors.ComponentDependencyMonitor.Dependency; 8 9 import prefuse.data.Graph; 10 import prefuse.data.Node; 11 import prefuse.data.Schema; 12 import prefuse.data.tuple.TupleSet; 13 14 public class PrefuseDependencyGraph implements ComponentDependencyListener { 15 private Graph graph; 16 17 private Map nodes; 18 19 public PrefuseDependencyGraph() { 20 this.graph = initializeGraph(); 21 this.nodes = new HashMap (); 22 } 23 24 public void addDependency(Dependency dependency) { 25 Node componentNode = addNode(dependency.getComponentType()); 26 Node dependencyNode = addNode(dependency.getDependencyType()); 27 if (dependencyNode != null) { 28 graph.addEdge(componentNode, dependencyNode); 29 } 30 } 31 32 Collection getTypes() { 33 return nodes.keySet(); 34 } 35 36 Node[] getNodes() { 37 return (Node[]) nodes.values().toArray(new Node[nodes.size()]); 38 } 39 40 private Node addNode(Class type) { 41 if (type != null && !nodes.containsKey(type)) { 42 Node node = graph.addNode(); 43 node.set("type", type); 44 nodes.put(type, node); 45 } 46 return (Node) nodes.get(type); 47 } 48 49 private Graph initializeGraph() { 50 return getGraph(getSchema()); 51 } 52 53 private Graph getGraph(Schema schema) { 54 graph = new Graph(true); 55 graph.addColumns(schema); 56 return graph; 57 } 58 59 private Schema getSchema() { 60 Schema schema = new Schema(); 61 schema.addColumn("type", Class .class, null); 62 return schema; 63 } 64 65 public TupleSet getEdges() { 66 return graph.getEdges(); 67 } 68 69 public Graph getGraph() { 70 return graph; 71 } 72 } 73 | Popular Tags |