001 /***************************************************************************** 002 * Copyright (C) PicoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the LICENSE.txt file. * 007 * * 008 * Original code by * 009 *****************************************************************************/ 010 package org.picocontainer.gems.monitors.prefuse; 011 012 import java.util.Collection; 013 import java.util.HashMap; 014 import java.util.Map; 015 016 import org.picocontainer.gems.monitors.ComponentDependencyMonitor.Dependency; 017 018 import prefuse.data.Graph; 019 import prefuse.data.Node; 020 import prefuse.data.Schema; 021 import prefuse.data.tuple.TupleSet; 022 023 public final class PrefuseDependencyGraph implements ComponentDependencyListener { 024 private Graph graph; 025 026 private final Map nodes; 027 028 public PrefuseDependencyGraph() { 029 this.graph = initializeGraph(); 030 this.nodes = new HashMap(); 031 } 032 033 public void addDependency(final Dependency dependency) { 034 Node componentNode = addNode(dependency.getComponentType()); 035 Node dependencyNode = addNode(dependency.getDependencyType()); 036 if (dependencyNode != null) { 037 graph.addEdge(componentNode, dependencyNode); 038 } 039 } 040 041 Collection getTypes() { 042 return nodes.keySet(); 043 } 044 045 Node[] getNodes() { 046 return (Node[]) nodes.values().toArray(new Node[nodes.size()]); 047 } 048 049 private Node addNode(final Class type) { 050 if (type != null && !nodes.containsKey(type)) { 051 Node node = graph.addNode(); 052 node.set("type", type); 053 nodes.put(type, node); 054 } 055 return (Node) nodes.get(type); 056 } 057 058 private Graph initializeGraph() { 059 return getGraph(getSchema()); 060 } 061 062 private Graph getGraph(final Schema schema) { 063 graph = new Graph(true); 064 graph.addColumns(schema); 065 return graph; 066 } 067 068 private Schema getSchema() { 069 Schema schema = new Schema(); 070 schema.addColumn("type", Class.class, null); 071 return schema; 072 } 073 074 public TupleSet getEdges() { 075 return graph.getEdges(); 076 } 077 078 public Graph getGraph() { 079 return graph; 080 } 081 }