KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jacorb > test > notification > CallerResolver


1 package org.jacorb.test.notification;
2
3 import java.io.PrintWriter JavaDoc;
4 import java.io.StringWriter JavaDoc;
5 import java.util.StringTokenizer JavaDoc;
6
7 public class CallerResolver {
8
9     public String JavaDoc getCaller() {
10         String JavaDoc stackTrace = makeStackTrace();
11         StringTokenizer JavaDoc lineTokenizer = new StringTokenizer JavaDoc(stackTrace, "\n");
12         while (lineTokenizer.hasMoreTokens()) {
13             String JavaDoc line = lineTokenizer.nextToken().trim();
14             if (line.startsWith("at " + getClass().getName() + ".getCaller")) {
15                 if (lineTokenizer.hasMoreTokens()) {
16                     return extractClassName(lineTokenizer.nextToken());
17                 }
18             }
19         }
20         return null;
21     }
22
23
24     public String JavaDoc makeStackTrace() {
25         try {
26             throw new RuntimeException JavaDoc("INTENTIONAL");
27         } catch (RuntimeException JavaDoc re) {
28             StringWriter JavaDoc sw = new StringWriter JavaDoc();
29             re.printStackTrace(new PrintWriter JavaDoc(sw));
30             return sw.toString();
31         }
32     }
33
34
35     String JavaDoc extractClassName(String JavaDoc stackTraceLine) {
36         //get rid of the leading indentation
37
String JavaDoc className = stackTraceLine.trim();
38         // get rid of the "at " before the class name
39
className = className.substring(3);
40         // get rid of the source file/line number info
41
className = className.substring(0, className.indexOf('('));
42         // get rid of the method name
43
className = className.substring(0, className.lastIndexOf('.'));
44
45         return className;
46     }
47 }
48
Popular Tags