- creating a visualize package for better organization before some
refactoring. PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/sandbox/graph/trunk@144580 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
1 parent
2a14dba733
commit
bf778b4dc0
4 files changed
+31
-8
No files matched your search
@@ -0,0 +1,171 @@
|
||||
package org.apache.commons.graph.visualize;
|
||||
|
||||
/* ====================================================================
|
||||
* The Apache Software License, Version 1.1
|
||||
*
|
||||
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||
* reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. The end-user documentation included with the redistribution,
|
||||
* if any, must include the following acknowledgment:
|
||||
* "This product includes software developed by the
|
||||
* Apache Software Foundation (http://www.apache.org/)."
|
||||
* Alternately, this acknowledgment may appear in the software itself,
|
||||
* if and wherever such third-party acknowledgments normally appear.
|
||||
*
|
||||
* 4. The names "Apache" and "Apache Software Foundation" and
|
||||
* "Apache BCEL" must not be used to endorse or promote products
|
||||
* derived from this software without prior written permission. For
|
||||
* written permission, please contact apache@apache.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "Apache",
|
||||
* "Apache BCEL", nor may "Apache" appear in their name, without
|
||||
* prior written permission of the Apache Software Foundation.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This software consists of voluntary contributions made by many
|
||||
* individuals on behalf of the Apache Software Foundation. For more
|
||||
* information on the Apache Software Foundation, please see
|
||||
* <http://www.apache.org/>.
|
||||
*/
|
||||
|
||||
import java.io.OutputStream;
|
||||
|
||||
import org.apache.commons.graph.Constants;
|
||||
import org.apache.commons.graph.Edge;
|
||||
import org.apache.commons.graph.Graph;
|
||||
import org.apache.commons.graph.Sequential;
|
||||
import org.apache.commons.graph.Vertex;
|
||||
|
||||
/**
|
||||
* Visualizes directed graphs into the
|
||||
* <A HREF="http://www.informatik.uni-bremen.de/~inform/forschung/daVinci/daVinci.html">
|
||||
* DaVinci</A> format. It can only be used for directed graphs and does not support
|
||||
* labeled edges very well, unfortunately. They have to be simulated via dummy vertices.
|
||||
*
|
||||
* Traverses graph with the Sequential visitor, since it uses invariants of that algorithm.
|
||||
*
|
||||
* @version $Id: DaVinciVisualizer.java,v 1.1 2001/11/29 14:24:23 jvanzyl Exp $
|
||||
* @author <A HREF="http://www.inf.fu-berlin.de/~dahm">M. Dahm</A>
|
||||
*/
|
||||
public class DaVinciVisualizer extends GraphVisualizer implements Constants {
|
||||
private Graph graph;
|
||||
private int no_edges, edges;
|
||||
private int no_vertices, vertices;
|
||||
|
||||
/**
|
||||
* @param out stream to print output to
|
||||
* @param verbose toggle verbosity of output
|
||||
*/
|
||||
public DaVinciVisualizer(OutputStream out, int verbose) {
|
||||
super(out, verbose);
|
||||
}
|
||||
|
||||
public void discoverGraph(Graph g) {
|
||||
graph = g;
|
||||
|
||||
no_vertices = g.getNoVertices();
|
||||
vertices = 0;
|
||||
out.println("[");
|
||||
}
|
||||
|
||||
public void finishGraph(Graph g) {
|
||||
out.println("]");
|
||||
out.close();
|
||||
}
|
||||
|
||||
public void discoverVertex(Vertex v) {
|
||||
String label = convertString(v.toString(verbose));
|
||||
//System.out.println("vertex:" + v.getIdent() + ":" + v);
|
||||
|
||||
println(1, "l(\"" + v.getIdent() + "\",");
|
||||
println(1, "n(\"anything\", [");
|
||||
println(2, "a(\"OBJECT\", \"" + label + "\"),");
|
||||
println(2, "a(\"FONTSTYLE\", \"bold\"),");
|
||||
println(2, "a(\"FONTFAMILY\", \"courier\")],");
|
||||
println(1, "["); // array of successor nodes
|
||||
|
||||
no_edges = graph.getNoEdges(v);
|
||||
edges = 0;
|
||||
}
|
||||
|
||||
public void finishVertex(Vertex v) {
|
||||
String str = (vertices < no_vertices - 1)? "]))," : "]))";
|
||||
println(1, str);
|
||||
vertices++;
|
||||
}
|
||||
|
||||
private static int label_counter=0;
|
||||
|
||||
private final String getEdgeAttribute() {
|
||||
if(graph.isDirected())
|
||||
return "";
|
||||
else
|
||||
return "a(\"_DIR\", \"none\"";
|
||||
}
|
||||
|
||||
public void discoverEdge(Edge e) {
|
||||
int u = graph.getSource(e).getIdent();
|
||||
int v = graph.getTarget(e).getIdent();
|
||||
String label = convertString(e.toString(verbose));
|
||||
|
||||
if(label.equals("")) {
|
||||
print(2, "l(\"" + u + "->" + v + "\", e(\"\", [" + getEdgeAttribute() +
|
||||
"], r(\"" + v + "\")))");
|
||||
} else { // Simulate labeled edge with intermediate node
|
||||
String dummy = "label" + label_counter++; // Dummy name for intermediate node
|
||||
|
||||
print(2, "l(\"" + u + "->" + dummy + "\", e(\"\", [a(\"_DIR\", \"none\")], " +
|
||||
"l(\"" + dummy + "\", n(\"anything\",[a(\"OBJECT\", \"" + label +
|
||||
"\"), a(\"_GO\", \"text\")], [l(\"" + dummy + "->" + v +
|
||||
"\", e(\"\",[" + getEdgeAttribute() + "], r(\"" + v + "\")))]))))");
|
||||
//System.out.println(graph.getTarget(e).getIdent() + ":" + graph.getTarget(e));
|
||||
}
|
||||
}
|
||||
|
||||
public void finishEdge(Edge e) {
|
||||
if(edges < no_edges - 1)
|
||||
out.println(", ");
|
||||
else
|
||||
out.print('\n');
|
||||
|
||||
edges++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Visualize graph g with this Visualizer.
|
||||
*
|
||||
* @param g graph to visualize
|
||||
* @param start node to start at
|
||||
*/
|
||||
public void visualize(Graph g, Vertex start) {
|
||||
new Sequential(this).start(g);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user