You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.2 KiB
Java
195 lines
5.2 KiB
Java
package de.unibremen.informatik.hets.graphviz;
|
|
|
|
/*
|
|
import org.apache.log4j.Logger;
|
|
import uk.ac.man.cs.mig.util.graph.graph.Graph;
|
|
import uk.ac.man.cs.mig.util.graph.layout.GraphLayoutEngine;
|
|
import uk.ac.man.cs.mig.util.graph.layout.dotlayoutengine.dotparser.DotParameterSetter;
|
|
import uk.ac.man.cs.mig.util.graph.layout.dotlayoutengine.dotparser.DotParser;
|
|
import uk.ac.man.cs.mig.util.graph.layout.dotlayoutengine.dotparser.ParseException;
|
|
import uk.ac.man.cs.mig.util.graph.outputrenderer.GraphOutputRenderer;
|
|
import uk.ac.man.cs.mig.util.graph.outputrenderer.impl.DotOutputGraphRenderer;
|
|
import uk.ac.man.cs.mig.util.graph.renderer.impl.DefaultEdgeLabelRenderer;
|
|
import uk.ac.man.cs.mig.util.graph.renderer.impl.DefaultNodeLabelRenderer;
|
|
*/
|
|
import de.unibremen.informatik.hets.graphviz.dotparser.DotParser;
|
|
|
|
import java.io.*;
|
|
|
|
/**
|
|
* User: matthewhorridge<br>
|
|
* The Univeristy Of Manchester<br>
|
|
* Medical Informatics Group<br>
|
|
* Date: Jan 16, 2004<br><br>
|
|
*
|
|
* matthew.horridge@cs.man.ac.uk<br>
|
|
* www.cs.man.ac.uk/~horridgm<br><br>
|
|
*
|
|
*/
|
|
public class DotGraphLayoutEngine
|
|
{
|
|
//private static Logger log = Logger.getLogger(DotGraphLayoutEngine.class);
|
|
//private GraphOutputRenderer renderer;
|
|
|
|
public static final int LAYOUT_LEFT_TO_RIGHT = 0;
|
|
public static final int LAYOUT_TOP_TO_BOTTOM = 1;
|
|
private int layoutDirection = LAYOUT_LEFT_TO_RIGHT;
|
|
|
|
public DotGraphLayoutEngine()
|
|
{
|
|
//renderer = new DotOutputGraphRenderer(new DefaultNodeLabelRenderer(), new DefaultEdgeLabelRenderer());
|
|
|
|
}
|
|
|
|
/*
|
|
public void setGraphOutputRenderer(GraphOutputRenderer renderer)
|
|
{
|
|
this.renderer = renderer;
|
|
}
|
|
*/
|
|
|
|
/**
|
|
* Lays out the specified <code>Graph</code>
|
|
* @param g The <code>Graph</code>
|
|
*/
|
|
public synchronized Graph layoutGraph(File file)
|
|
{
|
|
long t0, t1, t2;
|
|
Graph g = new Graph();
|
|
Node n0 = new Node("0");
|
|
Node n1 = new Node("1");
|
|
Node n2 = new Node("2");
|
|
Node n3 = new Node("3");
|
|
Node n4 = new Node("4");
|
|
Node n5 = new Node("5");
|
|
g.add(n0);
|
|
g.add(n1);
|
|
g.add(n2);
|
|
g.add(n3);
|
|
g.add(n4);
|
|
g.add(n5);
|
|
Edge e0 = new Edge(n0, n1, "0", 1);
|
|
Edge e1 = new Edge(n0, n2, "1", 1);
|
|
Edge e2 = new Edge(n0, n3, "2", 1);
|
|
Edge e3 = new Edge(n0, n4, "3", 1);
|
|
Edge e4 = new Edge(n3, n0, "4", 1);
|
|
Edge e5 = new Edge(n4, n5, "5", 1);
|
|
g.add(e0);
|
|
g.add(e1);
|
|
g.add(e2);
|
|
g.add(e3);
|
|
g.add(e4);
|
|
g.add(e5);
|
|
|
|
DotProcess process = new DotProcess();
|
|
|
|
// Render the graph in DOT and send it to the
|
|
// DOT Process the be laid out
|
|
/*
|
|
if(layoutDirection == LAYOUT_LEFT_TO_RIGHT)
|
|
{
|
|
renderer.setRendererOption(DotOutputGraphRenderer.LAYOUT_DIRECTION, "LR");
|
|
}
|
|
else
|
|
{
|
|
renderer.setRendererOption(DotOutputGraphRenderer.LAYOUT_DIRECTION, "TB");
|
|
}
|
|
*/
|
|
|
|
//DotLayoutEngineProperties properties = DotLayoutEngineProperties.getInstance();
|
|
|
|
/*
|
|
renderer.setRendererOption(DotOutputGraphRenderer.RANK_SPACING, Double.toString(properties.getRankSpacing()));
|
|
|
|
renderer.setRendererOption(DotOutputGraphRenderer.SIBLING_SPACING, Double.toString(properties.getSiblingSpacing()));
|
|
*/
|
|
|
|
|
|
try
|
|
{
|
|
//File file = File.createTempFile("OWLVizScratch", null);
|
|
|
|
//file.deleteOnExit();
|
|
|
|
//log.debug("TRACE(DotGraphLayoutEngine): TempFile: " + file.getAbsolutePath());
|
|
|
|
//FileOutputStream fos = new FileOutputStream(file);
|
|
|
|
//renderer.renderGraph(g, fos);
|
|
|
|
//fos.close();
|
|
|
|
if(process.startProcess(file.getAbsolutePath()) == false)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
|
|
// Read outputrenderer from process and parse it
|
|
|
|
InputStream is = null;
|
|
|
|
|
|
|
|
is = new FileInputStream(file);
|
|
|
|
// InputStream is = process.getReader();
|
|
|
|
if(is != null)
|
|
{
|
|
try
|
|
{
|
|
DotParameterSetter paramSetter = new DotParameterSetter();
|
|
|
|
//paramSetter.setGraph(g);
|
|
paramSetter.setGraph(g);
|
|
|
|
DotParser.parse(paramSetter, is);
|
|
}
|
|
catch(ParseException e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
|
|
t1 = System.currentTimeMillis();
|
|
|
|
// parser.parse(is);
|
|
|
|
process.killProcess();
|
|
|
|
process = null;
|
|
}
|
|
|
|
t2 = System.currentTimeMillis();
|
|
}
|
|
catch(IOException ioEx)
|
|
{
|
|
ioEx.printStackTrace();
|
|
}
|
|
|
|
|
|
return g;
|
|
}
|
|
|
|
/**
|
|
* Sets the direction of the layout.
|
|
* @param layoutDirection The layout direction. This should be one of
|
|
* the constants <code>DotGraphLayoutEngine.LAYOUT_LEFT_TO_RIGHT</code> or
|
|
* <code>DotGraphLayoutEngine.LAYOUT_TOP_TO_BOTTOM</code>.
|
|
*/
|
|
public void setLayoutDirection(int layoutDirection)
|
|
{
|
|
this.layoutDirection = layoutDirection;
|
|
}
|
|
|
|
/**
|
|
* Gets the layout direction.
|
|
* @return The direction of the layout. <code>DotGraphLayoutEngine.LAYOUT_LEFT_TO_RIGHT</code> or
|
|
* <code>DotGraphLayoutEngine.LAYOUT_TOP_TO_BOTTOM</code>.
|
|
*/
|
|
public int getLayoutDirection()
|
|
{
|
|
return layoutDirection;
|
|
}
|
|
}
|