/**
*
*/
import java.util.Hashtable;
import java.util.List;
import org.eclipse.draw2d.graph.DirectedGraph;
import org.eclipse.draw2d.graph.DirectedGraphLayout;
import org.eclipse.draw2d.graph.Edge;
import org.eclipse.draw2d.graph.Node;
import agg.editor.impl.EdArc;
import agg.editor.impl.EdGraph;
import agg.editor.impl.EdNode;
/**
* @author olga
*
*/
public class DirectedDraw2dGraphLayout extends DirectedGraph {
final Hashtable<EdNode, Node> ednode2node = new Hashtable<EdNode, Node>();
EdGraph edgraph;
/**
*
*/
public DirectedDraw2dGraphLayout() {
}
/**
*
*/
public DirectedDraw2dGraphLayout(final EdGraph graph) {
this.setGraph(graph);
}
public void setGraph(final EdGraph graph) {
this.edgraph = graph;
convertToDirectedGraph();
}
public void applyLayout() {
if (this.edgraph == null)
return;
long time1 = System.currentTimeMillis();
final DirectedGraphLayout layouter = new DirectedGraphLayout();
layouter.visit(this);
convertFromDirectedGraph();
System.out.println("*** DirectedGraph layout don in "
+(System.currentTimeMillis()-time1)+"ms");
}
@SuppressWarnings("unchecked")
private void convertToDirectedGraph() {
if (this.edgraph != null) {
List<EdNode> aggnodes = this.edgraph.getVisibleNodes();
for (int i=0; i<aggnodes.size(); i++) {
EdNode elem = aggnodes.get(i);
Node n = new Node(elem);
n.x = elem.getX();
n.y = elem.getY();
n.width = elem.getWidth();
n.height = elem.getHeight();
this.nodes.add(n);
this.ednode2node.put(elem, n);
}
List<EdArc> aggarcs = this.edgraph.getArcs();
for (int i=0; i<aggarcs.size(); i++) {
EdArc elem = aggarcs.get(i);
Node src = this.ednode2node.get(elem.getSource());
Node tar = this.ednode2node.get(elem.getTarget());
if (src != null && tar != null) {
Edge e = new Edge(elem, src, tar);
this.edges.add(e);
}
}
}
}
private void convertFromDirectedGraph() {
if (this.edgraph != null) {
List<EdNode> aggnodes = this.edgraph.getNodes();
for (int i=0; i<aggnodes.size(); i++) {
EdNode elem = aggnodes.get(i);
Node n = this.ednode2node.get(elem);
if (n != null) {
elem.setX(n.x);
elem.setY(n.y);
}
}
this.edgraph.straightAllArcs();
}
}
}