1 /* 2 * Copyright (c) 2003-2008, by Henrik Arro and Contributors 3 * 4 * This file is part of JSeq, a tool to automatically create 5 * sequence diagrams by tracing program execution. 6 * 7 * See <http://jseq.sourceforge.net> for more information. 8 * 9 * JSeq is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of 12 * the License, or (at your option) any later version. 13 * 14 * JSeq is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public License 20 * along with JSeq. If not, see <http://www.gnu.org/licenses/>. 21 */ 22 23 package th.co.edge.jseq; 24 25 /** 26 * A <code>Filter</code> that only accepts <code>Activation</code>s with 27 * method names that do not match a given exclude pattern. 28 */ 29 public class ClassExclusionFilter implements ActivationList.Filter { 30 private String excludePattern; 31 32 /** 33 * Creates a new <code>ClassExclusionFilter</code> with the given method 34 * name exclude pattern. If the pattern starts or ends with "*", all method 35 * names with the correct suffix or prefix, respectively, are accepted. 36 * 37 * <p> 38 * For example, the pattern "foo.Bar.baz" would only match a method named 39 * "baz" in the class foo.bar, "*.baz" would match any method named "baz" in 40 * any class, and "foo.Bar.*" would match all method in the class foo.Bar. 41 * 42 * @param excludePattern 43 * the exclude pattern to use for this filter instance, possibly 44 * starting or ending with the wildcard "*" 45 */ 46 public ClassExclusionFilter(String excludePattern) { 47 this.excludePattern = excludePattern; 48 } 49 50 /** 51 * Returns <code>true</code> if and only if the given 52 * <code>Activation</code> represents a method call where the class name 53 * plus method name matches the exclude pattern used by this filter. 54 * 55 * @param activation 56 * the <code>Activation</code> to check for matching method 57 * name 58 * 59 * @return <code>true</code> if <code>activation</code> represents a 60 * method call that matches the exclude pattern used by this filter 61 */ 62 public boolean accept(Activation activation) { 63 String fullMethodName = 64 activation.getClassName() + "." + activation.getMethod().name(); 65 boolean accepted = true; 66 if (excludePattern.endsWith("*")) { 67 String prefix = 68 excludePattern.substring(0, excludePattern.length() - 1); 69 accepted = !fullMethodName.startsWith(prefix); 70 } else if (excludePattern.startsWith("*")) { 71 String suffix = excludePattern.substring(1); 72 accepted = !fullMethodName.endsWith(suffix); 73 } else { 74 accepted = !fullMethodName.equals(excludePattern); 75 } 76 return accepted; 77 } 78 }