KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > alt > jiapi > tool > EventTool


1 package alt.jiapi.tool;
2
3 import java.lang.reflect.Method JavaDoc;
4 import java.lang.reflect.InvocationTargetException JavaDoc;
5 import java.util.StringTokenizer JavaDoc;
6
7 import alt.jiapi.InstrumentationContext;
8 import alt.jiapi.InstrumentationDescriptor;
9 import alt.jiapi.JiapiException;
10 import alt.jiapi.reflect.Loader;
11 import alt.jiapi.reflect.JiapiClass;
12
13 import alt.jiapi.event.FieldEvent;
14 import alt.jiapi.event.FieldEventProducer;
15 import alt.jiapi.event.FieldListener;
16
17 import alt.jiapi.event.MethodEvent;
18 import alt.jiapi.event.MethodEventProducer;
19 import alt.jiapi.event.MethodListener;
20
21 import alt.jiapi.util.Bootstrapper;
22 import alt.jiapi.util.InstrumentingClassLoader;
23
24 /**
25  * Class EventTool.
26  *
27  * @author Mika Riekkinen
28  */

29 public class EventTool implements FieldListener, MethodListener {
30     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
31         try {
32             new EventTool(args);
33         }
34         catch(ClassNotFoundException JavaDoc cnfe) {
35             System.out.println(cnfe);
36         }
37         catch(NoSuchMethodException JavaDoc nsme) {
38             System.out.println("No 'public static void main(String[])' method found in " + args[0]);
39         }
40     }
41
42     public EventTool(String JavaDoc[] args) throws JiapiException, ClassNotFoundException JavaDoc, NoSuchMethodException JavaDoc, IllegalAccessException JavaDoc, InvocationTargetException JavaDoc {
43         String JavaDoc globalInclude = System.getProperty("include");
44         String JavaDoc globalExclude = System.getProperty("exclude");
45
46         String JavaDoc feInclude = System.getProperty("field:include");
47         String JavaDoc feExclude = System.getProperty("field:exclude");
48
49         String JavaDoc meInclude = System.getProperty("method:include");
50         String JavaDoc meExclude = System.getProperty("method:exclude");
51
52         // Configure:
53
InstrumentationContext ctx = new InstrumentationContext();
54         InstrumentationDescriptor fid = new InstrumentationDescriptor();
55         InstrumentationDescriptor mid = new InstrumentationDescriptor();
56         
57         // Add global inclusion and exclusion rules for both
58
// field and method descriptors
59
if (globalInclude != null) {
60             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(globalInclude, ",");
61             while(st.hasMoreTokens()) {
62                 String JavaDoc rule = st.nextToken();
63                 fid.addInclusionRule(rule);
64                 mid.addInclusionRule(rule);
65             }
66         }
67         if (globalExclude != null) {
68             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(globalExclude, ",");
69             while(st.hasMoreTokens()) {
70                 String JavaDoc rule = st.nextToken();
71                 fid.addExclusionRule(rule);
72                 mid.addExclusionRule(rule);
73             }
74         }
75
76         // Add event producer specific inclusion and exclusion rules
77
if (feInclude != null) {
78             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(feInclude, ",");
79             while(st.hasMoreTokens()) {
80                 String JavaDoc rule = st.nextToken();
81                 fid.addInclusionRule(rule);
82             }
83         }
84         if (feExclude != null) {
85             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(feExclude, ",");
86             while(st.hasMoreTokens()) {
87                 String JavaDoc rule = st.nextToken();
88                 fid.addExclusionRule(rule);
89             }
90         }
91
92         if (meInclude != null) {
93             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(meInclude, ",");
94             while(st.hasMoreTokens()) {
95                 String JavaDoc rule = st.nextToken();
96                 mid.addInclusionRule(rule);
97             }
98         }
99         if (meExclude != null) {
100             StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(meExclude, ",");
101             while(st.hasMoreTokens()) {
102                 String JavaDoc rule = st.nextToken();
103                 mid.addExclusionRule(rule);
104             }
105         }
106
107         
108         // Use event API:
109
// Events for field access
110
FieldEventProducer fieldEventProducer = new FieldEventProducer(fid);
111         fieldEventProducer.addFieldListener(this);
112
113         // Events for method access
114
MethodEventProducer methodEventProducer = new MethodEventProducer(mid);
115         methodEventProducer.addMethodListener(this);
116
117         // Add field and method descriptors to context
118
ctx.addInstrumentationDescriptor(fid);
119         ctx.addInstrumentationDescriptor(mid);
120
121
122         Class JavaDoc c = InstrumentingClassLoader.createClassLoader(ctx).loadClass(args[0]);
123         Method JavaDoc method = c.getMethod("main", new Class JavaDoc[] {String JavaDoc[].class});
124         
125         String JavaDoc[] __args = new String JavaDoc[args.length - 1];
126         for (int i = 0; i < __args.length; i++) {
127             __args[i] = args[i+1];
128         }
129         
130         method.invoke(c, new Object JavaDoc[] { __args });
131     }
132
133
134
135     // FieldListener:
136
public void fieldChanging(FieldEvent fe) {
137         System.out.println("Field " + fe.getFieldName() + " is changing");
138     }
139     public void fieldSet(FieldEvent fe) {
140         System.out.println("Field " + fe.getFieldName() + " is set");
141     }
142
143     public void fieldGet(FieldEvent fe) {
144         System.out.println("Field " + fe.getFieldName() + " has been get");
145     }
146
147     // MethodListener
148
public void methodEntered(MethodEvent event) {
149         System.out.println("Method " + event.getClassName() + "." +
150                            event.getMethodName() + " entered.");
151     }
152        
153     public void methodExited(MethodEvent event) {
154         System.out.println("Method " + event.getClassName() + "." +
155                            event.getMethodName() + " exited.");
156     }
157 }
158
Popular Tags