blob: 3b78e1ebb15d6e0953885ba0c34a0fa58ced49e6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.draw2d.examples.graph;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.graph.CompoundDirectedGraph;
import org.eclipse.draw2d.graph.CompoundDirectedGraphLayout;
import org.eclipse.draw2d.graph.Edge;
import org.eclipse.draw2d.graph.EdgeList;
import org.eclipse.draw2d.graph.Node;
import org.eclipse.draw2d.graph.NodeList;
import org.eclipse.draw2d.graph.Subgraph;
/**
* A collection of compound graph tests.
* @author hudsonr
* @since 2.1
*/
public class CompoundGraphTests {
public static CompoundDirectedGraph aaaapull() {
Subgraph s1, s2;
Node a,b,e,j,m,n,y;
Node r,t;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
s1 = new Subgraph("Subgraph 1");
s2 = new Subgraph("Subgraph 2");
nodes.add(r = new Node("r", s2));
nodes.add(t = new Node("t", s2));
nodes.add(a = new Node("a", s1));
nodes.add(b = new Node("b", s1));
nodes.add(e = new Node("e", s1));
nodes.add(j = new Node("j", s1));
nodes.add(m = new Node("m", s1));
edges.add(new Edge(a, b));
edges.add(new Edge(b, e));
edges.add(new Edge(e, j));
edges.add(new Edge(m, t));
edges.add(new Edge(j, r));
edges.add(new Edge(a,r));
edges.add(new Edge(s1, s2));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
graph.nodes.add(s1);
graph.nodes.add(s2);
new CompoundDirectedGraphLayout().visit(graph);
return graph;
}
public static CompoundDirectedGraph aaaflowEditor() {
Subgraph diagram, flow, subflow1, subflow2;
Node a1, a2, a3;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
nodes.add(diagram = new Subgraph("Editor"));
nodes.add(flow = new Subgraph("Flow", diagram));
nodes.add(subflow1 = new Subgraph("Sub1", flow));
nodes.add(subflow2 = new Subgraph("Sub2", flow));
nodes.add(a1 = new Node("a1", diagram));
nodes.add(a2 = new Node("a2", subflow1));
nodes.add(a3 = new Node("a3", subflow2));
a1.width = a2.width = a3.width = 200;
a1.outgoingOffset = 1;
edges.add(new Edge(a1, flow));
edges.add(new Edge(a1, a2));
edges.add(new Edge(a2, a3));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
new CompoundDirectedGraphLayout()
.visit(graph);
return graph;
}
public static CompoundDirectedGraph chains() {
Subgraph s1, s2, s3, sb;
Node nx,n0,n1, n2, n3, n4, n5, n6, na, nb;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
nodes.add(s1 = new Subgraph("S1"));
nodes.add(s2 = new Subgraph("S2"));
nodes.add(s3 = new Subgraph("S3"));
nodes.add(sb = new Subgraph("SB"));
s1.setPadding(new Insets(10));
s1.innerPadding = new Insets(1);
s1.insets = new Insets(9);
edges.add(new Edge(s1, s2));
edges.add(new Edge(s1, sb));
edges.add(new Edge(sb, s3));
edges.add(new Edge(s2, s3));
nodes.add(n0 = new Node("0", s1));
nodes.add(nx = new Node("x", s1));
nodes.add(n1 = new Node("1", s1));
nodes.add(n2 = new Node("2", s1));
edges.add(new Edge(nx, n2));
edges.add(new Edge(n0, n2));
edges.add(new Edge(n1, n2));
nodes.add(n3 = new Node("3", s2));
nodes.add(n4 = new Node("4", s2));
edges.add(new Edge(n3, n4));
nodes.add(n5 = new Node("5", s3));
nodes.add(n6 = new Node("6", s3));
edges.add(new Edge(n5, n6));
nodes.add(na = new Node("a", sb));
nodes.add(nb = new Node("b", sb));
edges.add(new Edge(na, nb));
n1.width = 60;
n2.width = na.width = 70;
n3.width = 100;
n5.width = n6.width = 64;
n4.width = 150;
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
new CompoundDirectedGraphLayout().visit(graph);
return graph;
}
public static CompoundDirectedGraph flowChart() {
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
Subgraph diagram, s1, s2, s3, s4, s5, s6, s7, s8;
nodes.add(diagram = new Subgraph("diagram"));
nodes.add(s1 = new Subgraph("s1", diagram));
nodes.add(s2 = new Subgraph("s2", s1));
nodes.add(s3 = new Subgraph("s3", s1));
nodes.add(s4 = new Subgraph("s4", s1));
nodes.add(s5 = new Subgraph("s5", s1));
nodes.add(s6 = new Subgraph("s6", s1));
nodes.add(s7 = new Subgraph("s7", s1));
nodes.add(s8 = new Subgraph("s8", s1));
Node outer1, outer2, outer3;
nodes.add(outer1 = new Node("asdf", diagram));
nodes.add(outer2 = new Node("asfasdf", diagram));
nodes.add(outer3 = new Node("a3", diagram));
edges.add(new Edge(s3, s6));
edges.add(new Edge(s4, s7));
edges.add(new Edge(s6, s8));
edges.add(new Edge(outer1, outer3));
edges.add(new Edge(outer3, s1));
edges.add(new Edge(outer2, s1));
Node s2a, s2b, s2c;
nodes.add(s2a = new Node("BMW", s2));
nodes.add(s2b = new Node("Hawking", s2));
nodes.add(s2c = new Node("Smurfy", s2));
edges.add(new Edge(s2a, s2b));
edges.add(new Edge(s2a, s2c));
Node s3a, s3b;
nodes.add(s3a = new Node("Jammin", s3));
nodes.add(s3b = new Node("This is it", s3));
edges.add(new Edge(s3a, s3b));
nodes.add(new Node("catDog", s4));
Node s5a, s5b;
nodes.add(s5a = new Node("a1", s5));
nodes.add(s5b = new Node("a2", s5));
edges.add(new Edge(s5a, s5b));
Node s6a, s6b, s6c;
nodes.add(s6a = new Node("Hoop it up", s6));
nodes.add(s6b = new Node("Streeball", s6));
nodes.add(s6c = new Node("Downtown", s6));
edges.add(new Edge(s6b, s6c));
edges.add(new Edge(s6a, s6b));
Node s7a, s7b;
nodes.add(s7a = new Node("Thing 1", s7));
nodes.add(s7b = new Node("Thing 2", s7));
edges.add(new Edge(s7a, s7b));
Node s8a, s8b, s8c, s8d, s8e;
nodes.add(s8a = new Node("a1", s8));
nodes.add(s8b = new Node("a2", s8));
nodes.add(s8c = new Node("a3", s8));
nodes.add(s8d = new Node("a4", s8));
nodes.add(s8e = new Node("a5", s8));
edges.add(new Edge(s8a, s8c));
edges.add(new Edge(s8a, s8d));
edges.add(new Edge(s8b, s8c));
edges.add(new Edge(s8b, s8e));
edges.add(new Edge(s8c, s8e));
Node inner1, inner2, inner3, inner4, inner5, inner6, inner7, inner8, inner9,
inner10, inner11, inner12, inner13, inner14, inner15, inner16;
nodes.add(inner1 = new Node("buckyball", s1));
nodes.add(inner2 = new Node("d", s1));
nodes.add(inner3 = new Node("cheese", s1));
nodes.add(inner4 = new Node("dingleberry", s1));
nodes.add(inner5 = new Node("dinosaur", s1));
nodes.add(inner6 = new Node("foobar", s1));
nodes.add(inner7 = new Node("t30", s1));
nodes.add(inner8 = new Node("a21", s1));
nodes.add(inner9 = new Node("katarina", s1));
nodes.add(inner10 = new Node("zig zag", s1));
nodes.add(inner11 = new Node("a16", s1));
nodes.add(inner12 = new Node("a23", s1));
nodes.add(inner13 = new Node("a17", s1));
nodes.add(inner14 = new Node("a20", s1));
nodes.add(inner15 = new Node("a19", s1));
nodes.add(inner16 = new Node("a24", s1));
edges.add(new Edge(inner1, inner3));
edges.add(new Edge(inner2, inner4));
edges.add(new Edge(inner2, inner3));
edges.add(new Edge(inner3, inner5));
edges.add(new Edge(inner4, inner5));
edges.add(new Edge(inner4, inner6));
edges.add(new Edge(inner6, s6));
edges.add(new Edge(inner5, inner7));
edges.add(new Edge(inner7, inner8));
edges.add(new Edge(inner8, s5));
edges.add(new Edge(s3, inner9));
edges.add(new Edge(s4, inner9));
edges.add(new Edge(inner9, inner10));
edges.add(new Edge(s7, inner11));
edges.add(new Edge(s7, inner12));
edges.add(new Edge(inner11, inner13));
edges.add(new Edge(inner11, inner14));
edges.add(new Edge(inner11, inner15));
edges.add(new Edge(inner12, inner15));
edges.add(new Edge(inner12, inner16));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
new CompoundDirectedGraphLayout()
.visit(graph);
return graph;
}
public static CompoundDirectedGraph flowEditor1() {
Subgraph diagram, flow;
Node a1, a2, a4, a5, a6, a7, a8, x, y;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
nodes.add(diagram = new Subgraph("Editor"));
nodes.add(flow = new Subgraph("Flow", diagram));
nodes.add(a1 = new Node("a1", diagram));
nodes.add(a2 = new Node("a2", diagram));
nodes.add(a4 = new Node("a4", diagram));
nodes.add(a5 = new Node("a5", diagram));
nodes.add(a6 = new Node("a6", diagram));
nodes.add(a7 = new Node("a7", diagram));
nodes.add(a8 = new Node("a8", diagram));
edges.add(new Edge(a1, a2));
edges.add(new Edge(a2, a4));
edges.add(new Edge(a2, a5));
edges.add(new Edge(a2, a6));
edges.add(new Edge(a6, flow));
nodes.add(x = new Node("x", flow));
nodes.add(y = new Node("y", flow));
edges.add(new Edge(x, y));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
new CompoundDirectedGraphLayout()
.visit(graph);
return graph;
}
public static CompoundDirectedGraph flowEditor2() {
Subgraph diagram, flow;
Node a1, a2, a3, a4;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
nodes.add(diagram = new Subgraph("Editor"));
nodes.add(flow = new Subgraph("Flow", diagram));
nodes.add(a1 = new Node("a1", diagram));
nodes.add(a2 = new Node("a2", diagram));
nodes.add(a3 = new Node("a3", flow));
nodes.add(a4 = new Node("a4", flow));
edges.add(new Edge(a1, a2));
edges.add(new Edge(a2, a4));
edges.add(new Edge(a3, a2));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
new CompoundDirectedGraphLayout()
.visit(graph);
return graph;
}
public static CompoundDirectedGraph ShortestPassCase(){
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
Subgraph p = new Subgraph("parent");
nodes.add(p);
Node a = new Node("a", p);
nodes.add(a);
Node b = new Node("b", p);
nodes.add(b);
Node c = new Node("c", p);
nodes.add(c);
Node d = new Node("d", p);
nodes.add(d);
Node e = new Node("e", p);
nodes.add(e);
edges.add(new Edge(a, d));
edges.add(new Edge(a, c));
edges.add(new Edge(b, c));
edges.add(new Edge(b, d));
edges.add(new Edge(b, e));
edges.add(new Edge(c, d));
edges.add(new Edge(c, e));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
new CompoundDirectedGraphLayout().visit(graph);
return graph;
}
public static CompoundDirectedGraph tangledSubgraphs() {
Subgraph A, B, C, D;
Node a1, a2, b1, b2, c1, c2, d1, d2;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
nodes.add(A = new Subgraph("Subgraph A"));
nodes.add(B = new Subgraph("Subgraph B"));
nodes.add(C = new Subgraph("Subgraph C"));
nodes.add(D = new Subgraph("Subgraph D"));
// C.rowOrder = 2;
// B.rowOrder = 3;
nodes.add(a1 = new Node("a1", A));
nodes.add(a2 = new Node("a2", A));
edges.add(new Edge(a1, a2));
nodes.add(b1 = new Node("b1", B));
nodes.add(b2 = new Node("b2", B));
edges.add(new Edge(b1, b2));
nodes.add(c1 = new Node("c1", C));
nodes.add(c2 = new Node("c2", C));
edges.add(new Edge(c1, c2));
nodes.add(d1 = new Node("d1", D));
nodes.add(d2 = new Node("d2", D));
edges.add(new Edge(d1, d2));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
edges.add(new Edge(a1, d2));
edges.add(new Edge(d1, c2));
edges.add(new Edge(d1, b2));
new CompoundDirectedGraphLayout()
.visit(graph);
return graph;
}
public static CompoundDirectedGraph test1() {
Subgraph s1, s2;
Node n1, n2, n3, n4, n5, n6, n7;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
s1 = new Subgraph("Subgraph 1");
s2 = new Subgraph("Subgraph 2");
nodes.add(n1 = new Node("1", s1));
nodes.add(n2 = new Node("2", s1));
nodes.add(n3 = new Node("3", s1));
nodes.add(n4 = new Node("4", s2));
nodes.add(n5 = new Node("5", s2));
nodes.add(n6 = new Node("6", s2));
nodes.add(n7 = new Node("7", s2));
n1.width = 60;
n2.width = 70;
n3.width = 100;
n5.width = n6.width = 64;
n7.width = n4.width = 90;
edges.add(new Edge(n1, n3));
edges.add(new Edge(n2, n3));
edges.add(new Edge(n4, n5));
edges.add(new Edge(n4, n6));
edges.add(new Edge(n6, n7));
edges.add(new Edge(n5, n7));
edges.add(new Edge(n2, n5));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
graph.nodes.add(s1);
graph.nodes.add(s2);
new CompoundDirectedGraphLayout().visit(graph);
return graph;
}
public static CompoundDirectedGraph test2() {
Subgraph s1, s2, s1_1;
Node n1, n2, n3, n4, n5, n6, n7, n8;
NodeList nodes = new NodeList();
EdgeList edges = new EdgeList();
s1 = new Subgraph("Subgraph 1");
s2 = new Subgraph("Subgraph 2");
s1_1 = new Subgraph("Subgraph 1.1", s1);
nodes.add(s1);
nodes.add(s2);
nodes.add(s1_1);
nodes.add(n1 = new Node("1", s1));
nodes.add(n2 = new Node("2", s1));
nodes.add(n3 = new Node("3", s1));
nodes.add(n4 = new Node("4", s2));
nodes.add(n5 = new Node("5", s2));
nodes.add(n6 = new Node("6", s2));
nodes.add(n7 = new Node("7", s2));
nodes.add(n8 = new Node("8", s1_1));
n8.width = 80;
n1.width = 60;
n2.width = 70;
n3.width = 100;
n5.width = n6.width = 64;
n7.width = n4.width = 90;
edges.add(new Edge(n1, n2));
edges.add(new Edge(n2, n3));
// edges.add(new Edge(n1, n3));
edges.add(new Edge(n1, n8));
edges.add(new Edge(n1, n5));
edges.add(new Edge(n8, n3));
edges.add(new Edge(n4, n5));
edges.add(new Edge(n4, n6));
edges.add(new Edge(n6, n7));
edges.add(new Edge(n5, n7));
edges.add(new Edge(n2, n5));
CompoundDirectedGraph graph = new CompoundDirectedGraph();
graph.nodes = nodes;
graph.edges = edges;
new CompoundDirectedGraphLayout()
.visit(graph);
return graph;
}
}