1 /* 2 * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 package com.sun.hotspot.igv.filter; 25 26 import com.sun.hotspot.igv.graph.*; 27 import java.util.ArrayList; 28 import java.util.List; 29 30 /** 31 * 32 * @author Thomas Wuerthinger 33 */ 34 public class RemoveInputsFilter extends AbstractFilter { 35 36 private List<RemoveInputsRule> rules; 37 private String name; 38 RemoveInputsFilter(String name)39 public RemoveInputsFilter(String name) { 40 this.name = name; 41 rules = new ArrayList<>(); 42 } 43 44 @Override getName()45 public String getName() { 46 return name; 47 } 48 49 @Override apply(Diagram diagram)50 public void apply(Diagram diagram) { 51 52 for (RemoveInputsRule r : rules) { 53 54 List<Figure> list = r.getSelector().selected(diagram); 55 for (Figure f : list) { 56 int z = 0; 57 List<InputSlot> last = new ArrayList<>(); 58 for (InputSlot is : f.getInputSlots()) { 59 if (z >= r.getStartingIndex() && z <= r.getEndIndex() && is.getConnections().size() > 0) { 60 StringBuilder sb = new StringBuilder(); 61 List<Connection> conns = is.getConnections(); 62 for (int i = 0; i < conns.size(); i++) { 63 Connection c = conns.get(i); 64 OutputSlot os = c.getOutputSlot(); 65 Figure pred = os.getFigure(); 66 if (i != 0) { 67 sb.append("<BR>"); 68 } 69 sb.append(pred.getLines()[0]); 70 } 71 is.removeAllConnections(); 72 is.setShortName("X"); 73 is.setText(sb.toString()); 74 last.add(is); 75 } else { 76 last.clear(); 77 } 78 z++; 79 } 80 81 if (last.size() > 3) { 82 InputSlot first = last.get(0); 83 first.setShortName("XX"); 84 85 StringBuilder sb = new StringBuilder(); 86 for (int i = 0; i < last.size(); i++) { 87 InputSlot is2 = last.get(i); 88 if (i != 0) { 89 sb.append("<BR>"); 90 } 91 sb.append(is2.getText()); 92 } 93 94 first.setText(sb.toString()); 95 96 for (int i = 1; i < last.size(); i++) { 97 f.removeSlot(last.get(i)); 98 } 99 } 100 } 101 } 102 } 103 addRule(RemoveInputsRule rule)104 public void addRule(RemoveInputsRule rule) { 105 rules.add(rule); 106 } 107 108 public static class RemoveInputsRule { 109 110 private Selector selector; 111 private int startingIndex; 112 private int endIndex; 113 RemoveInputsRule(Selector selector)114 public RemoveInputsRule(Selector selector) { 115 this(selector, 0); 116 } 117 RemoveInputsRule(Selector selector, int startIndex)118 public RemoveInputsRule(Selector selector, int startIndex) { 119 this(selector, startIndex, Integer.MAX_VALUE); 120 } 121 RemoveInputsRule(Selector selector, int startIndex, int endIndex)122 public RemoveInputsRule(Selector selector, int startIndex, int endIndex) { 123 this.startingIndex = startIndex; 124 this.endIndex = endIndex; 125 this.selector = selector; 126 } 127 getStartingIndex()128 public int getStartingIndex() { 129 return startingIndex; 130 } 131 getEndIndex()132 public int getEndIndex() { 133 return endIndex; 134 } 135 getSelector()136 public Selector getSelector() { 137 return selector; 138 } 139 } 140 } 141