/******************************************************************************* * 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; } }