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 org.apache.log4j.Logger;
27  
28  /***
29   * TODO Add docs
30   *
31   * Created on 07.12.2004
32   * Contributing Author(s):
33   *
34   *   Misha Lifschitz <mishalifschitz at users.sourceforge.net> (Inital implementation)
35   *   Vlad Skarzhevskyy <vlads at users.sourceforge.net> (Inital implementation)
36   *
37   * @author vlads
38   * @version $Revision: 1.1 $ ($Author: vlads $)  $Date: 2004/12/08 07:53:28 $
39   */
40  public class PointcutModifierFiler extends MatchFilter {
41  
42      protected static final Logger log = Logger.getLogger(PointcutModifierFiler.class);
43      
44      private static Hashtable map = buildMap(); 
45      
46      private int modifier;
47      
48      public PointcutModifierFiler(String modifier) {
49          if (!this.setModifier(modifier)) {
50              throw new Error("Wrong modifier " + modifier);
51          }
52      }
53      
54      private static void mapPut(Hashtable hmap, String str, int mod) {
55          hmap.put(str, new Integer(mod));
56      }
57      
58      private static Hashtable buildMap() {
59          map = new Hashtable();
60          mapPut(map, "public", Modifier.PUBLIC);
61      	mapPut(map, "protected", Modifier.PROTECTED);	
62      	mapPut(map, "private", Modifier.PRIVATE);	 
63          mapPut(map, "abstract", Modifier.ABSTRACT);	
64      	mapPut(map, "static", Modifier.STATIC);	 
65      	mapPut(map, "final", Modifier.FINAL);		
66      	mapPut(map, "transient", Modifier.TRANSIENT);	
67      	mapPut(map, "volatile", Modifier.VOLATILE);	 
68      	mapPut(map, "synchronized", Modifier.SYNCHRONIZED);
69      	mapPut(map, "native", Modifier.NATIVE);	 
70      	mapPut(map, "strictfp", Modifier.STRICT);	 
71      	mapPut(map, "interface", Modifier.INTERFACE);
72      	return map;
73      }
74      
75      public boolean setModifier(String modifier) {
76          Integer i = (Integer)map.get(modifier.trim());
77          if (i == null) {
78              log.error("Wrong modifier " + modifier);
79              return false;
80          }
81          this.modifier = i.intValue();
82          return true;
83      }
84      
85      public int matchState(Object obj) {
86          if (!(obj instanceof Integer)) {
87              return MATCH_NO; 
88          }
89          
90          int mod = ((Integer)obj).intValue();
91          
92          if ((mod & this.modifier) != 0) {
93              if (debug) {
94                  log.debug("MATCH " + Modifier.toString(this.modifier) + " for :" + Modifier.toString(mod));
95              }
96              return MATCH_YES;
97          } else {
98              if (debug) {
99                  log.debug("NOTMATCH " + Modifier.toString(this.modifier) + " for :" + Modifier.toString(mod));
100             }
101             return MATCH_NO; 
102         }
103     }
104     
105     public void debug() {
106     	log.debug(Modifier.toString(this.modifier));
107     }
108     
109 }