/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ import org.jboss.aop.joinpoint.Invocation; import org.jboss.aop.joinpoint.MethodInvocation; import org.jboss.aop.joinpoint.ConstructorInvocation; import org.jboss.aop.joinpoint.FieldInvocation; import org.jboss.aop.joinpoint.FieldReadInvocation; import org.jboss.aop.joinpoint.FieldWriteInvocation; import org.jboss.aop.advice.Interceptor; import org.jboss.aop.annotation.AnnotationElement; /** * * @author Bill Burke * @version $Revision: 1.1 $ */ public class TraceInterceptor implements Interceptor { public String getName() { return "TraceInterceptor"; } private void printSingle(single s) { System.out.println("@single (\"" + s.value() + "\")"); } private void printComplex(complex c) { System.out.print("@complex (ch='" + c.ch() + "', "); System.out.print("\"" + c.string() + "\", "); System.out.print("flt=" + c.flt() + ", "); System.out.println("dbl=" + c.dbl() + ", ...blah blah blah YOU GET THE IDEA..."); } public Object invoke(Invocation invocation) throws Throwable { String msg = ""; if (invocation instanceof MethodInvocation) { msg = "executing method " + ((MethodInvocation)invocation).getMethod().toString(); single s = (single)AnnotationElement.getAnyAnnotation(((MethodInvocation)invocation).getMethod(), single.class); printSingle(s); complex c = (complex)AnnotationElement.getAnyAnnotation(((MethodInvocation)invocation).getMethod(), complex.class); printComplex(c); } else if (invocation instanceof ConstructorInvocation) { msg = "executing constructor " + ((ConstructorInvocation)invocation).getConstructor(); single s = (single)AnnotationElement.getAnyAnnotation(((ConstructorInvocation)invocation).getConstructor(), single.class); printSingle(s); complex c = (complex)AnnotationElement.getAnyAnnotation(((ConstructorInvocation)invocation).getConstructor(), complex.class); printComplex(c); } else if (invocation instanceof FieldReadInvocation) { msg = "read field name: " + ((FieldReadInvocation)invocation).getField(); single s = (single)AnnotationElement.getAnyAnnotation(((FieldInvocation)invocation).getField(), single.class); printSingle(s); complex c = (complex)AnnotationElement.getAnyAnnotation(((FieldInvocation)invocation).getField(), complex.class); printComplex(c); } else if (invocation instanceof FieldWriteInvocation) { msg = "write field name: " + ((FieldWriteInvocation)invocation).getField(); single s = (single)AnnotationElement.getAnyAnnotation(((FieldInvocation)invocation).getField(), single.class); printSingle(s); complex c = (complex)AnnotationElement.getAnyAnnotation(((FieldInvocation)invocation).getField(), complex.class); printComplex(c); } try { System.out.println("<<< Trace : " + msg); return invocation.invokeNext(); } finally { System.out.println(">>> Leaving Trace"); } } }