001 package org.picocontainer.gems.monitors.prefuse; 002 003 import java.util.Collection; 004 import java.util.HashMap; 005 import java.util.Map; 006 007 import org.picocontainer.gems.monitors.ComponentDependencyMonitor.Dependency; 008 009 import prefuse.data.Graph; 010 import prefuse.data.Node; 011 import prefuse.data.Schema; 012 import prefuse.data.tuple.TupleSet; 013 014 public class PrefuseDependencyGraph implements ComponentDependencyListener { 015 private Graph graph; 016 017 private Map nodes; 018 019 public PrefuseDependencyGraph() { 020 this.graph = initializeGraph(); 021 this.nodes = new HashMap(); 022 } 023 024 public void addDependency(Dependency dependency) { 025 Node componentNode = addNode(dependency.getComponentType()); 026 Node dependencyNode = addNode(dependency.getDependencyType()); 027 if (dependencyNode != null) { 028 graph.addEdge(componentNode, dependencyNode); 029 } 030 } 031 032 Collection getTypes() { 033 return nodes.keySet(); 034 } 035 036 Node[] getNodes() { 037 return (Node[]) nodes.values().toArray(new Node[nodes.size()]); 038 } 039 040 private Node addNode(Class type) { 041 if (type != null && !nodes.containsKey(type)) { 042 Node node = graph.addNode(); 043 node.set("type", type); 044 nodes.put(type, node); 045 } 046 return (Node) nodes.get(type); 047 } 048 049 private Graph initializeGraph() { 050 return getGraph(getSchema()); 051 } 052 053 private Graph getGraph(Schema schema) { 054 graph = new Graph(true); 055 graph.addColumns(schema); 056 return graph; 057 } 058 059 private Schema getSchema() { 060 Schema schema = new Schema(); 061 schema.addColumn("type", Class.class, null); 062 return schema; 063 } 064 065 public TupleSet getEdges() { 066 return graph.getEdges(); 067 } 068 069 public Graph getGraph() { 070 return graph; 071 } 072 }