[jboss-cvs] JBossAS SVN: r106808 - in projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher: analysis and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 19 09:12:44 EDT 2010


Author: alesj
Date: 2010-07-19 09:12:43 -0400 (Mon, 19 Jul 2010)
New Revision: 106808

Added:
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/AbstractHtmlRenderer.java
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/SubGraphRenderer.java
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/layout/NoopGraphLayout.java
Modified:
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/GrapherServlet.java
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/graph/AbstractGraphCreator.java
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/ComponentTypes.java
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultGraphLayoutMapper.java
   projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultRendererMapper.java
Log:
Initial analysis renderer.

Modified: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/GrapherServlet.java
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/GrapherServlet.java	2010-07-19 08:56:26 UTC (rev 106807)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/GrapherServlet.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -31,6 +31,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.logging.Logger;
 import org.jboss.mc.servlet.vdf.api.KernelControllerVDFConnector;
@@ -62,6 +63,7 @@
    private String previous;
 
    private KernelController controller;
+   private boolean initialized;
 
    private GraphComponentMapper<GraphCreator> creatorMapper;
    private GraphComponentMapper<DependencyType> dependencyTypeMapper;
@@ -72,6 +74,8 @@
    @SuppressWarnings("unchecked")
    public void init(ServletConfig config) throws ServletException
    {
+      super.init(config);
+
       ServletContext context = config.getServletContext();
       KernelControllerVDFConnector connector = new KernelControllerVDFConnector(context);
       if (connector.isValid() == false)
@@ -79,13 +83,6 @@
 
       controller = connector.getUtility();
 
-      creatorMapper = createMapper(config.getInitParameter("creator"), GrapherConstants.CREATOR_MAPPER, GraphCreator.class);
-      dependencyTypeMapper = createMapper(config.getInitParameter("dependency"), GrapherConstants.DEPENDENCY_TYPE_MAPPER, DependencyType.class);
-      layoutMapper = createMapper(config.getInitParameter("layout"), GrapherConstants.LAYOUT_MAPPER, GraphLayout.class);
-
-      rendererMapper = createMapper(config.getInitParameter("renderer"), GrapherConstants.RENDERER_MAPPER, Renderer.class);
-      rendererMapper.init(Collections.singletonMap("format", config.getInitParameter("format")));
-
       // apply headless graphics
       previous = System.setProperty(AWT_HEADLESS_FLAG, "true");
       if ("false".equals(previous))
@@ -94,6 +91,24 @@
       }
    }
 
+   /**
+    * Initialize mappers.
+    */
+   private synchronized void initalizeMappers()
+   {
+      if (initialized == false)
+      {
+         initialized = true;
+
+         creatorMapper = createMapper("CreatorMapper", GrapherConstants.CREATOR_MAPPER, GraphCreator.class);
+         dependencyTypeMapper = createMapper("DependencyMapper", GrapherConstants.DEPENDENCY_TYPE_MAPPER, DependencyType.class);
+         layoutMapper = createMapper("LayoutMapper", GrapherConstants.LAYOUT_MAPPER, GraphLayout.class);
+
+         rendererMapper = createMapper("RendererMapper", GrapherConstants.RENDERER_MAPPER, Renderer.class);
+         rendererMapper.init(Collections.singletonMap("format", getServletConfig().getInitParameter("format")));
+      }
+   }
+
    @Override
    public void destroy()
    {
@@ -113,6 +128,8 @@
     */
    protected void doRenderGraph(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
+      initalizeMappers();
+
       GraphCreator creator = creatorMapper.mapComponent(request);
 
       if (log.isTraceEnabled())
@@ -170,9 +187,21 @@
       if (reference == null)
          return defaultInstance;
 
+      ControllerContext context = controller.getInstalledContext(reference);
+      if (context != null)
+      {
+         Object target = context.getTarget();
+         //noinspection unchecked
+         return GraphComponentMapper.class.cast(target);
+      }
+
+      String className = getServletConfig().getInitParameter(reference);
+      if (className == null)
+         return defaultInstance;
+
       try
       {
-         Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(reference);
+         Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
          Object object = clazz.newInstance();
          //noinspection unchecked
          return GraphComponentMapper.class.cast(object);

Added: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/AbstractHtmlRenderer.java
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/AbstractHtmlRenderer.java	                        (rev 0)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/AbstractHtmlRenderer.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.mctools.grapher.analysis;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.jboss.mctools.grapher.render.Renderer;
+
+import org.jgraph.JGraph;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public abstract class AbstractHtmlRenderer implements Renderer
+{
+   public void render(JGraph graph, OutputStream writer, int inset) throws IOException
+   {
+      writer.write("<html>".getBytes());
+      writer.write("<head>".getBytes());
+      writer.write("<body>".getBytes());
+      doAnalyse(graph, writer);
+      writer.write("</body>".getBytes());
+      writer.write("</html>".getBytes());
+   }
+
+   /**
+    * Do analyse graph.
+    *
+    * @param graph the graph
+    * @param writer the writer
+    * @throws IOException for any IO error
+    */
+   protected abstract void doAnalyse(JGraph graph, OutputStream writer) throws IOException;
+}

Added: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/SubGraphRenderer.java
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/SubGraphRenderer.java	                        (rev 0)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/analysis/SubGraphRenderer.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -0,0 +1,115 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.mctools.grapher.analysis;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.mctools.grapher.graph.GVertex;
+import org.jboss.util.graph.Edge;
+import org.jboss.util.graph.Vertex;
+
+import org.jgraph.JGraph;
+
+/**
+ * Get all disjunct max sub graphs of given graph,
+ * and find its potential roots; vertices that have no incoming edges.
+ *  
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class SubGraphRenderer extends AbstractHtmlRenderer
+{
+   @Override
+   protected void doAnalyse(JGraph graph, OutputStream writer) throws IOException
+   {
+      List<Set<Vertex>> groups = new ArrayList<Set<Vertex>>();
+      Set<Vertex> visited = new HashSet<Vertex>();
+
+      Object[] cells = graph.getRoots();
+      for (Object cell : cells)
+      {
+         if (cell instanceof GVertex)
+         {
+            GVertex gv = (GVertex) cell;
+            Vertex v = gv.getVertex();
+            if (visited.contains(v) == false)
+            {
+               Set<Vertex> group = new HashSet<Vertex>();
+               groups.add(group);
+
+               visitVertex(v, group);
+
+               visited.addAll(group);
+            }
+         }
+      }
+
+      int i = 0;
+      for (Set<Vertex> sv : groups)
+      {
+         writer.write(("<ul>Group #" + (i++)).getBytes());
+         List<Vertex> roots = new ArrayList<Vertex>();
+         for (Vertex v : sv)
+         {
+            if (v.getIncomingEdgeCount() == 0)
+               roots.add(v);
+
+            writer.write(("<li>" + v + "</li>").getBytes());
+         }
+         writer.write(("</ul>Roots: " + roots.size()).getBytes());
+      }
+   }
+
+   @SuppressWarnings("unchecked")
+   private void visitVertex(Vertex current, Set<Vertex> group)
+   {
+      if (group.contains(current))
+         return;
+
+      group.add(current);
+
+      List<Edge> incoming = current.getIncomingEdges();
+      if (incoming != null && incoming.isEmpty() == false)
+      {
+         for (Edge e : incoming)
+         {
+            Vertex v = e.getFrom();
+            visitVertex(v, group);
+         }
+      }
+
+      List<Edge> outgoing = current.getOutgoingEdges();
+      if (outgoing != null && outgoing.isEmpty() == false)
+      {
+         for (Edge e : outgoing)
+         {
+            Vertex v = e.getTo();
+            visitVertex(v, group);
+         }
+      }
+   }
+}

Modified: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/graph/AbstractGraphCreator.java
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/graph/AbstractGraphCreator.java	2010-07-19 08:56:26 UTC (rev 106807)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/graph/AbstractGraphCreator.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -147,38 +147,41 @@
          for(DependencyItem item : items)
          {
             Object dependencyId = dtype.getDependency(item);
-            GraphCell dependency = cells.get(dependencyId);
-            ControllerContext dependant = null;
-            if (dependency == null || (excludedTypes != null && excludedTypes.length > 0))
+            if (dependencyId != null)
             {
-               dependant = controller.getContext(dependencyId, null);
-               if (dependant != null)
+               GraphCell dependency = cells.get(dependencyId);
+               ControllerContext dependant = null;
+               if (dependency == null || (excludedTypes != null && excludedTypes.length > 0))
                {
-                  if (isComponentExcluded(dependant, excludedTypes))
+                  dependant = controller.getContext(dependencyId, null);
+                  if (dependant != null)
                   {
-                     if (log.isTraceEnabled())
-                        log.trace("Component is excluded [" + Arrays.asList(excludedTypes) + "]: " + dependant);
+                     if (isComponentExcluded(dependant, excludedTypes))
+                     {
+                        if (log.isTraceEnabled())
+                           log.trace("Component is excluded [" + Arrays.asList(excludedTypes) + "]: " + dependant);
 
-                     return;
+                        return;
+                     }
+
+                     dependency = getCell(cells, objects, dependant);
                   }
-
-                  dependency = getCell(cells, objects, dependant);
+                  else
+                  {
+                     dependency = createCell(dependencyId);
+                     cells.put(dependencyId, dependency);
+                     objects.add(dependency);
+                  }
                }
-               else
-               {
-                  dependency = createCell(dependencyId);
-                  cells.put(dependencyId, dependency);
-                  objects.add(dependency);
-               }
-            }
 
-            ControllerState state = item.getWhenRequired();
-            Object[] order = dtype.getEdgeOrder(owner, dependency);
-            Edge edge = factory.createEdge(state != null ? state.getStateString() : "UNKNOWN", (GraphCell)order[0], (GraphCell)order[1], cs);
-            objects.add(edge);
+               ControllerState state = item.getWhenRequired();
+               Object[] order = dtype.getEdgeOrder(owner, dependency);
+               Edge edge = factory.createEdge(state != null ? state.getStateString() : "UNKNOWN", (GraphCell)order[0], (GraphCell)order[1], cs);
+               objects.add(edge);
 
-            if (dependant != null && doRecurse(dependant))
-               handleContext(controller, dtype, cells, objects, attributes, cs, dependant, excludedTypes);
+               if (dependant != null && doRecurse(dependant))
+                  handleContext(controller, dtype, cells, objects, attributes, cs, dependant, excludedTypes);
+            }
          }
       }
    }

Copied: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/layout/NoopGraphLayout.java (from rev 104079, projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/layout/DefaultGraphLayout.java)
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/layout/NoopGraphLayout.java	                        (rev 0)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/layout/NoopGraphLayout.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.mctools.grapher.layout;
+
+import org.jgraph.JGraph;
+
+/**
+ * Noop graph layout.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class NoopGraphLayout implements GraphLayout
+{
+   public void applyLayout(JGraph graph)
+   {
+   }
+}
\ No newline at end of file

Modified: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/ComponentTypes.java
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/ComponentTypes.java	2010-07-19 08:56:26 UTC (rev 106807)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/ComponentTypes.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -57,6 +57,7 @@
       mapControllerContextClass("core", BeanKernelRegistryEntry.class, Color.RED);
       mapControllerContextClass("ext", AbstractKernelRegistryEntry.class, Color.ORANGE);
       mapControllerContextClass("mbean", "org.jboss.system.microcontainer.ServiceControllerContext", Color.MAGENTA);
+      mapControllerContextClass("osgi", "org.jboss.osgi.framework.bundle.OSGiServiceState", Color.PINK);
       mapControllerContextClass("dep", "org.jboss.deployers.plugins.deployers.DeploymentControllerContext", Color.GREEN);
    }
 
@@ -141,7 +142,7 @@
    /**
     * Get excluded types.
     *
-    * @param all exclude all
+    * @param all exclude none
     * @param excludes the excludes
     * @return excluded types
     */

Modified: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultGraphLayoutMapper.java
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultGraphLayoutMapper.java	2010-07-19 08:56:26 UTC (rev 106807)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultGraphLayoutMapper.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -61,6 +61,8 @@
       map.put("isom", "com.jgraph.layout.graph.JGraphISOMLayout");
       map.put("org", "com.jgraph.layout.tree.OrganizationalChart");
       map.put("grid", "com.jgraph.layout.simpl.SimpleGridLayout");
+
+      map.put("noop", "org.jboss.mctools.grapher.layout.NoopGraphLayout");
    }
 
    protected String getKey()

Modified: projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultRendererMapper.java
===================================================================
--- projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultRendererMapper.java	2010-07-19 08:56:26 UTC (rev 106807)
+++ projects/mc-tools/grapher/trunk/src/main/java/org/jboss/mctools/grapher/map/DefaultRendererMapper.java	2010-07-19 13:12:43 UTC (rev 106808)
@@ -25,6 +25,7 @@
 import java.util.Map;
 
 import org.jboss.mctools.grapher.GrapherConstants;
+import org.jboss.mctools.grapher.analysis.SubGraphRenderer;
 import org.jboss.mctools.grapher.render.GIFRenderer;
 import org.jboss.mctools.grapher.render.HtmlRenderer;
 import org.jboss.mctools.grapher.render.JPGRenderer;
@@ -48,11 +49,16 @@
    public DefaultRendererMapper()
    {
       renderers = new HashMap<String, Renderer>();
+
+      // image renderers
       renderers.put("html", new HtmlRenderer());
       renderers.put("svg", new SVGRenderer());
       renderers.put("jpg", new JPGRenderer());
       renderers.put("png", new PNGRenderer());
       renderers.put("gif", new GIFRenderer());
+
+      // analysis renderers
+      renderers.put("sub-graph", new SubGraphRenderer());
    }
 
    @Override



More information about the jboss-cvs-commits mailing list