RemoveInputsFilter.java revision 1472:c18cbe5936b8
1214518Srpaulo/* 2190214Srpaulo * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. 3190214Srpaulo * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4190214Srpaulo * 5190214Srpaulo * This code is free software; you can redistribute it and/or modify it 6190214Srpaulo * under the terms of the GNU General Public License version 2 only, as 7190214Srpaulo * published by the Free Software Foundation. 8190214Srpaulo * 9190214Srpaulo * This code is distributed in the hope that it will be useful, but WITHOUT 10190214Srpaulo * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11190214Srpaulo * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12190214Srpaulo * version 2 for more details (a copy is included in the LICENSE file that 13190214Srpaulo * accompanied this code). 14190214Srpaulo * 15190214Srpaulo * You should have received a copy of the GNU General Public License version 16190214Srpaulo * 2 along with this work; if not, write to the Free Software Foundation, 17190214Srpaulo * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18190214Srpaulo * 19190214Srpaulo * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20190214Srpaulo * or visit www.oracle.com if you need additional information or have any 21190214Srpaulo * questions. 22190214Srpaulo * 23190214Srpaulo */ 24190214Srpaulopackage com.sun.hotspot.igv.filter; 25190214Srpaulo 26190214Srpauloimport com.sun.hotspot.igv.graph.Connection; 27190214Srpauloimport com.sun.hotspot.igv.graph.Diagram; 28190214Srpauloimport com.sun.hotspot.igv.graph.Figure; 29190214Srpauloimport com.sun.hotspot.igv.graph.InputSlot; 30190214Srpauloimport com.sun.hotspot.igv.graph.OutputSlot; 31190214Srpauloimport com.sun.hotspot.igv.graph.Selector; 32190214Srpauloimport java.util.ArrayList; 33190214Srpauloimport java.util.List; 34190214Srpaulo 35190214Srpaulo/** 36190214Srpaulo * 37190214Srpaulo * @author Thomas Wuerthinger 38190214Srpaulo */ 39190214Srpaulopublic class RemoveInputsFilter extends AbstractFilter { 40190214Srpaulo 41190214Srpaulo private List<RemoveInputsRule> rules; 42190214Srpaulo private String name; 43190214Srpaulo 44190214Srpaulo public RemoveInputsFilter(String name) { 45190214Srpaulo this.name = name; 46190214Srpaulo rules = new ArrayList<RemoveInputsRule>(); 47190214Srpaulo } 48190214Srpaulo 49190214Srpaulo public String getName() { 50190214Srpaulo return name; 51190214Srpaulo } 52190214Srpaulo 53190214Srpaulo public void apply(Diagram diagram) { 54190214Srpaulo 55190214Srpaulo for (RemoveInputsRule r : rules) { 56190214Srpaulo 57214518Srpaulo List<Figure> list = r.getSelector().selected(diagram); 58235426Sdelphij for (Figure f : list) { 59214518Srpaulo int z = 0; 60190214Srpaulo List<InputSlot> last = new ArrayList<InputSlot>(); 61190214Srpaulo for (InputSlot is : f.getInputSlots()) { 62190214Srpaulo if (z >= r.getStartingIndex() && z <= r.getEndIndex() && is.getConnections().size() > 0) { 63190214Srpaulo StringBuilder sb = new StringBuilder(); 64190214Srpaulo List<Connection> conns = is.getConnections(); 65190214Srpaulo for (int i = 0; i < conns.size(); i++) { 66190214Srpaulo Connection c = conns.get(i); 67190214Srpaulo OutputSlot os = c.getOutputSlot(); 68190214Srpaulo Figure pred = os.getFigure(); 69190214Srpaulo if (i != 0) { 70190214Srpaulo sb.append("<BR>"); 71190214Srpaulo } 72190214Srpaulo sb.append(pred.getLines()[0]); 73 } 74 is.removeAllConnections(); 75 is.setShortName("X"); 76 is.setName(sb.toString()); 77 last.add(is); 78 } else { 79 last.clear(); 80 } 81 z++; 82 } 83 84 if (last.size() > 3) { 85 InputSlot first = last.get(0); 86 first.setShortName("XX"); 87 88 StringBuilder sb = new StringBuilder(); 89 for (int i = 0; i < last.size(); i++) { 90 InputSlot is2 = last.get(i); 91 if (i != 0) { 92 sb.append("<BR>"); 93 } 94 sb.append(is2.getName()); 95 } 96 97 first.setName(sb.toString()); 98 99 for (int i = 1; i < last.size(); i++) { 100 f.removeSlot(last.get(i)); 101 } 102 } 103 } 104 } 105 } 106 107 public void addRule(RemoveInputsRule rule) { 108 rules.add(rule); 109 } 110 111 public static class RemoveInputsRule { 112 113 private Selector selector; 114 private int startingIndex; 115 private int endIndex; 116 117 public RemoveInputsRule(Selector selector) { 118 this(selector, 0); 119 } 120 121 public RemoveInputsRule(Selector selector, int startIndex) { 122 this(selector, startIndex, Integer.MAX_VALUE); 123 } 124 125 public RemoveInputsRule(Selector selector, int startIndex, int endIndex) { 126 this.startingIndex = startIndex; 127 this.endIndex = endIndex; 128 this.selector = selector; 129 } 130 131 public int getStartingIndex() { 132 return startingIndex; 133 } 134 135 public int getEndIndex() { 136 return endIndex; 137 } 138 139 public Selector getSelector() { 140 return selector; 141 } 142 } 143} 144