/*
 * JBoss, the OpenSource J2EE webOS
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */

import org.jboss.aop.Bind;
import org.jboss.aop.InterceptorDef;
import org.jboss.aop.joinpoint.ConstructorInvocation;
import org.jboss.aop.joinpoint.FieldInvocation;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.MethodInvocation;
import org.jboss.aop.advice.Interceptor;


/**
 *
 * @author <a href="mailto:kabir.khan@jboss.org">Kabir Khan</a>
 * @version $Revision: 1.1.8.2 $
 */
@InterceptorDef
@Bind (pointcut = "all(POJO)")//All constructors and methods
//@Bind (pointcut = "execution(* POJO->*(..))")//All methods
//@Bind (pointcut = "execution(POJO->new(..))")//All constructors
public class SimpleInterceptor implements Interceptor
{
   public String getName() { return "SimpleInterceptor"; }

   public Object invoke(Invocation invocation) throws Throwable
   {
      try
      {
         if (invocation instanceof MethodInvocation)
         {
            MethodInvocation mi = (MethodInvocation)invocation;
            System.out.println("<<< Entering SimpleInterceptor for: " + mi.getMethod().toString());
         }
         else if (invocation instanceof ConstructorInvocation)
         {
            ConstructorInvocation ci = (ConstructorInvocation)invocation;
            System.out.println("<<< Entering SimpleInterceptor for: " + ci.getConstructor().toString());
         }
         else if (invocation instanceof ConstructorInvocation)
         {
            FieldInvocation fi = (FieldInvocation)invocation;
            System.out.println("<<< Entering SimpleInterceptor for: " + fi.getField().toString());
         }
         else
         {
            System.out.println("<<< Entering SimpleInterceptor for a caller invocation");
         }

         return invocation.invokeNext();
      }
      finally
      {
         System.out.println(">>> Leaving SimpleInterceptor");
      }
   }
}
