View Javadoc

1   /*
2    * Jour - java profiler and monitoring library
3    *
4    * Copyright (C) 2004 Jour team
5    *
6    * This library is free software; you can redistribute it and/or
7    * modify it under the terms of the GNU Library General Public
8    * License as published by the Free Software Foundation; either
9    * version 2 of the License, or (at your option) any later version.
10   *
11   * This library is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   * Library General Public License for more details.
15   *
16   * You should have received a copy of the GNU Library General Public
17   * License along with this library; if not, write to the
18   * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19   * Boston, MA  02111-1307, USA.
20   */
21  package net.sf.jour.filter;
22  
23  import java.lang.reflect.Modifier;
24  import java.util.Hashtable;
25  
26  import net.sf.jour.log.Logger;
27  
28  /**
29   * TODO Add docs
30   * 
31   * Created on 07.12.2004 Contributing Author(s):
32   * 
33   * Misha Lifschitz <mishalifschitz at users.sourceforge.net> (Inital
34   * implementation) Vlad Skarzhevskyy <vlads at users.sourceforge.net> (Inital
35   * implementation)
36   * 
37   * @author vlads
38   * @version $Revision: 46 $ ($Author: vlads $) $Date: 2006-11-19 16:52:09 -0500
39   *          (Sun, 19 Nov 2006) $
40   */
41  public class PointcutModifierFiler extends MatchFilter {
42  
43  	protected static final Logger log = Logger.getLogger();
44  
45  	private static Hashtable map = buildMap();
46  
47  	private int modifier;
48  
49  	public PointcutModifierFiler(String modifier) {
50  		if (!this.setModifier(modifier)) {
51  			throw new Error("Wrong modifier " + modifier);
52  		}
53  	}
54  
55  	private static void mapPut(Hashtable hmap, String str, int mod) {
56  		hmap.put(str, new Integer(mod));
57  	}
58  
59  	private static Hashtable buildMap() {
60  		map = new Hashtable();
61  		mapPut(map, "public", Modifier.PUBLIC);
62  		mapPut(map, "protected", Modifier.PROTECTED);
63  		mapPut(map, "private", Modifier.PRIVATE);
64  		mapPut(map, "abstract", Modifier.ABSTRACT);
65  		mapPut(map, "static", Modifier.STATIC);
66  		mapPut(map, "final", Modifier.FINAL);
67  		mapPut(map, "transient", Modifier.TRANSIENT);
68  		mapPut(map, "volatile", Modifier.VOLATILE);
69  		mapPut(map, "synchronized", Modifier.SYNCHRONIZED);
70  		mapPut(map, "native", Modifier.NATIVE);
71  		mapPut(map, "strictfp", Modifier.STRICT);
72  		mapPut(map, "interface", Modifier.INTERFACE);
73  		return map;
74  	}
75  
76  	public boolean setModifier(String modifier) {
77  		Integer i = (Integer) map.get(modifier.trim());
78  		if (i == null) {
79  			log.error("Wrong modifier " + modifier);
80  			return false;
81  		}
82  		this.modifier = i.intValue();
83  		return true;
84  	}
85  
86  	public int matchState(Object obj) {
87  		if (!(obj instanceof Integer)) {
88  			return MATCH_NO;
89  		}
90  
91  		int mod = ((Integer) obj).intValue();
92  
93  		if ((mod & this.modifier) != 0) {
94  			if (debug) {
95  				log.debug("MATCH " + Modifier.toString(this.modifier) + " for :" + Modifier.toString(mod));
96  			}
97  			return MATCH_YES;
98  		} else {
99  			if (debug) {
100 				log.debug("NOTMATCH " + Modifier.toString(this.modifier) + " for :" + Modifier.toString(mod));
101 			}
102 			return MATCH_NO;
103 		}
104 	}
105 
106 	public void debug() {
107 		log.debug(Modifier.toString(this.modifier));
108 	}
109 
110 }