[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