//package de.twentyeleven.skysail.skysail.server.ext.osgideps; // //import java.awt.Color; //import java.awt.Dimension; //import java.awt.Rectangle; //import java.awt.geom.Rectangle2D; //import java.util.ArrayList; //import java.util.HashMap; //import java.util.List; //import java.util.Map; // //import javax.swing.JFrame; //import javax.swing.JPanel; // //import org.jgraph.JGraph; //import org.jgraph.graph.DefaultGraphCell; //import org.jgraph.graph.GraphConstants; //import org.jgrapht.ext.JGraphModelAdapter; //import org.jgrapht.graph.DefaultEdge; //import org.jgrapht.graph.ListenableDirectedGraph; //import org.osgi.framework.Bundle; //import org.osgi.framework.BundleContext; //import org.osgi.framework.InvalidSyntaxException; //import org.osgi.framework.ServiceReference; //import org.slf4j.Logger; //import org.slf4j.LoggerFactory; // //public class OsgiServicesVisualizer { // // private ListenableDirectedGraph<String, ?> g; // // private JGraph jgraph; // // private JGraphModelAdapter m_jgAdapter; // // private static final Dimension DEFAULT_SIZE = new Dimension(1030, 820); // // private static final Logger logger = LoggerFactory.getLogger(OsgiServicesVisualizer.class); // // public void buildGraphFromOsgiContext(BundleContext bundleContext) { // g = new ListenableDirectedGraph<String, DefaultEdge>(DefaultEdge.class); // // // create a visualization using JGraph, via an adapter // m_jgAdapter = new JGraphModelAdapter(g); // jgraph = new JGraph(m_jgAdapter); // adjustDisplaySettings(jgraph); // // List<Bundle> relevantBundles = determineSkysailBundles(bundleContext); // // try { // ServiceReference[] allServiceReferences = bundleContext.getAllServiceReferences(null, null); // for (ServiceReference ref : allServiceReferences) { // analyseServiceReference(relevantBundles, ref); // } // } catch (InvalidSyntaxException e) { // e.printStackTrace(); // } // // for (Bundle bundle : relevantBundles) { // ServiceReference[] registeredServices = bundle.getRegisteredServices(); // if (registeredServices == null) { // continue; // } // for (ServiceReference serviceReference : registeredServices) { // Bundle referencedBundle = serviceReference.getBundle(); // if (!relevantBundles.contains(referencedBundle)) { // addToVertices(relevantBundles, referencedBundle); // } // addEdge(bundle, referencedBundle); // } // } // // // position vertices nicely within JGraph component // // positionVertexAt("v1", 130, 40); // // positionVertexAt("v2", 60, 200); // // positionVertexAt("v3", 310, 230); // // positionVertexAt("v4", 380, 70); // // } // // private void addEdge(Bundle from, Bundle to) { // logger.info("adding edge from {} to {}", from.getSymbolicName(), to.getSymbolicName()); // DefaultEdge addedEdge = (DefaultEdge) g.addEdge(from.getSymbolicName(), to.getSymbolicName()); // // addedEdge. // } // // private void analyseServiceReference(List<Bundle> relevantBundles, ServiceReference ref) { // Bundle registeringBundle = ref.getBundle(); // // Bundle[] usingBundles = ref.getUsingBundles(); // if (usingBundles == null) { // return; // } // // logger.info("checking {} for services", registeringBundle.getSymbolicName()); // if (!relevantBundles.contains(registeringBundle.getSymbolicName())) { // addToVertices(relevantBundles, registeringBundle); // } // // for (Bundle referencingBundle : usingBundles) { // if (!relevantBundles.contains(referencingBundle)) { // addToVertices(relevantBundles, referencingBundle); // } // addEdge(referencingBundle, registeringBundle); // } // } // // private List<Bundle> determineSkysailBundles(BundleContext bundleContext) { // List<Bundle> relevantBundles = new ArrayList<Bundle>(); // Bundle[] bundles = bundleContext.getBundles(); // for (Bundle bundle : bundles) { // if (bundle.getSymbolicName().contains("skysail")) { // addToVertices(relevantBundles, bundle); // } // } // return relevantBundles; // } // // private void addToVertices(List<Bundle> relevantBundles, Bundle bundle) { // logger.info("adding {} to vertices", bundle.getSymbolicName()); // g.addVertex(bundle.getSymbolicName()); // relevantBundles.add(bundle); // } // // private void adjustDisplaySettings(JGraph jg) { // jg.setPreferredSize(DEFAULT_SIZE); // jg.setBackground(Color.GRAY); // } // // private void positionVertexAt(Object vertex, int x, int y) { // DefaultGraphCell cell = m_jgAdapter.getVertexCell(vertex); // Map attr = cell.getAttributes(); // Rectangle2D b = GraphConstants.getBounds(attr); // // GraphConstants.setBounds(attr, new Rectangle(x, y, (int) b.getWidth(), (int) b.getHeight())); // // Map cellAttr = new HashMap(); // cellAttr.put(cell, attr); // m_jgAdapter.edit(cellAttr, null, null, null); // } // // public void run() { // JFrame f = new JFrame(); // f.setSize(500, 500); // JPanel p = new JPanel(); // p.setSize(500, 500); // f.add(p); // p.add(jgraph); // f.setVisible(true); // } // // }