1
14 package demo.layout;
15
16 import y.base.DataProvider;
17 import y.base.EdgeMap;
18 import y.base.Node;
19 import y.base.NodeMap;
20 import y.layout.BufferedLayouter;
21 import y.layout.DefaultLayoutGraph;
22 import y.layout.LayoutGraph;
23 import y.layout.LayoutMultiplexer;
24 import y.layout.LayoutOrientation;
25 import y.layout.PortConstraint;
26 import y.layout.PortConstraintKeys;
27 import y.layout.grouping.GroupingKeys;
28 import y.layout.grouping.RecursiveGroupLayouter;
29 import y.layout.hierarchic.HierarchicLayouter;
30
31
39 public class RecursiveGroupLayouterDemo
40 {
41 public static void main(String args[])
42 {
43 LayoutGraph graph = new DefaultLayoutGraph();
44
45 Node[] v = new Node[10];
47 for(int i = 0; i < v.length; i++) {
48 v[i] = graph.createNode();
49 graph.setSize(v[i], 30,30);
50 }
51 int[][] e = {{0,1}, {0,2}, {0,3}, {4,0}, {5,0}, {0,7}, {6,0}, {6,8}, {8,7}};
52 for(int i = 0; i < e.length; i++) {
53 Node s = v[e[i][0]];
54 Node t = v[e[i][1]];
55 graph.createEdge(s,t);
56 }
57
58 EdgeMap spcMap = graph.createEdgeMap();
60 EdgeMap tpcMap = graph.createEdgeMap();
61 graph.addDataProvider(PortConstraintKeys.SOURCE_PORT_CONSTRAINT_KEY, spcMap);
62 graph.addDataProvider(PortConstraintKeys.TARGET_PORT_CONSTRAINT_KEY, tpcMap);
63 spcMap.set(v[0].getEdgeTo(v[7]), PortConstraint.create(PortConstraint.ANY_SIDE, true));
64 tpcMap.set(v[6].getEdgeTo(v[0]), PortConstraint.create(PortConstraint.ANY_SIDE, true));
65
66 EdgeMap sgMap = graph.createEdgeMap();
68 EdgeMap tgMap = graph.createEdgeMap();
69 graph.addDataProvider(PortConstraintKeys.SOURCE_GROUPID_KEY, sgMap);
70 graph.addDataProvider(PortConstraintKeys.TARGET_GROUPID_KEY, tgMap);
71 sgMap.set(v[0].getEdgeTo(v[1]), "G1");
72 sgMap.set(v[0].getEdgeTo(v[2]), "G1");
73 sgMap.set(v[0].getEdgeTo(v[3]), "G1");
74
75 tgMap.set(v[0].getEdgeFrom(v[4]), "G2");
76 tgMap.set(v[0].getEdgeFrom(v[5]), "G2");
77
78 NodeMap groupMap = graph.createNodeMap();
80 NodeMap pidMap = graph.createNodeMap();
81 NodeMap idMap = graph.createNodeMap();
82 graph.addDataProvider(GroupingKeys.GROUP_DPKEY, groupMap);
83 graph.addDataProvider(GroupingKeys.NODE_ID_DPKEY, idMap);
84 graph.addDataProvider(GroupingKeys.PARENT_NODE_ID_DPKEY, pidMap);
85 groupMap.setBool(v[9], true);
86 for(int i = 0; i < 6; i++) {
87 pidMap.set(v[i], v[9]);
88 }
89 for(int i = 0; i < v.length; i++) {
90 idMap.set(v[i], v[i]);
91 }
92
93 HierarchicLayouter innerHL = new HierarchicLayouter();
95 innerHL.setLayoutOrientation(LayoutOrientation.BOTTOM_TO_TOP);
96 HierarchicLayouter outerHL = new HierarchicLayouter();
97 outerHL.setLayoutOrientation(LayoutOrientation.LEFT_TO_RIGHT);
98 LayoutMultiplexer lm = new LayoutMultiplexer();
99 NodeMap layoutMap = graph.createNodeMap();
100 graph.addDataProvider(LayoutMultiplexer.LAYOUTER_DPKEY, layoutMap);
101 for(int i = 0; i < 6; i++) {
102 layoutMap.set(v[i], innerHL);
103 }
104 for(int i = 7; i < v.length; i++) {
105 layoutMap.set(v[i], outerHL);
106 }
107
108 RecursiveGroupLayouter rgl = new RecursiveGroupLayouter(lm);
110 new BufferedLayouter(rgl).doLayout(graph);
111
112 graph.removeNode(v[9]);
114
115 LayoutPreviewPanel lpp = new LayoutPreviewPanel(graph);
117 lpp.createFrame("RecursiveGroupLayouterDemo").setVisible(true);
118
119
120 Object[] key = graph.getDataProviderKeys();
122 for(int i = 0; i < key.length; i++) {
123 DataProvider dp = graph.getDataProvider(key[i]);
124 graph.removeDataProvider(key[i]);
125 if(dp instanceof NodeMap) {
126 graph.disposeNodeMap((NodeMap)dp);
127 }
128 else if(dp instanceof EdgeMap) {
129 graph.disposeEdgeMap((EdgeMap)dp);
130 }
131 }
132
133 }
134
135 }
136