KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jbet > ClassFilter


1 /*
2  * JBET - Java Binary Enhancement Tool
3  * Copyright (c) 2003 Networks Associates Technology, Inc.
4  *
5  * This software was developed under DARPA/SPAWAR contract
6  * N66001-00-C-8602 "SPMA" as part of the
7  * DARPA OASIS research program.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */

30
31 package jbet;
32
33 /* A set of classes, default is everything.
34    At least check(String) must be implemented by a subclass.
35
36    @author Andrew Reisse
37 */

38
39 abstract public class ClassFilter
40 {
41     public boolean check (String JavaDoc name) throws ClassFileException { return check (Jbet.loader.getClass (name)); }
42     public boolean check (ClassInfo cr) throws ClassFileException { return check (cr.name ()); }
43
44     public static final ClassFilter ALL = new ClassFilter() {
45         public boolean check (String JavaDoc name) {
46         return true;
47         }
48     };
49     public static final ClassFilter NONE = new ClassFilter() {
50         public boolean check (String JavaDoc name) {
51         return false;
52         }
53     };
54
55     /* The set of Java standard library classes */
56
57     public static final ClassFilter JAVA = new ClassFilter() {
58         public boolean check (String JavaDoc name) {
59         return name.startsWith ("java/") || name.startsWith ("sun/") || name.startsWith ("com/sun/") ||
60             name.startsWith ("javax/");
61         }
62     };
63
64     public ClassFilter invert () {
65     final ClassFilter This = this;
66     return new ClassFilter () {
67         public boolean check (String JavaDoc name) throws ClassFileException {
68             return !This.check (name);
69         }
70
71         public boolean check (ClassInfo cr) throws ClassFileException {
72             return !This.check (cr);
73         }
74         };
75     }
76
77     public static ClassFilter subtract (final ClassFilter a, final ClassFilter b) {
78     return new ClassFilter() {
79         public boolean check (String JavaDoc name) throws ClassFileException {
80             if (b.check (name))
81             return false;
82             return a.check (name);
83         }
84
85         public boolean check (ClassInfo cr) throws ClassFileException {
86             if (b.check (cr))
87             return false;
88             return a.check (cr);
89         }
90         };
91     }
92 }
93
Popular Tags