package org.jboss.seam.core; import java.lang.reflect.Method; import org.jboss.seam.annotations.RaiseEvent; import org.jboss.seam.annotations.intercept.AroundInvoke; import org.jboss.seam.annotations.intercept.Interceptor; import org.jboss.seam.bpm.BusinessProcessInterceptor; import org.jboss.seam.intercept.AbstractInterceptor; import org.jboss.seam.intercept.InvocationContext; import org.jboss.seam.transaction.RollbackInterceptor; import org.jboss.seam.transaction.TransactionInterceptor; /** * Raises Seam events connected with a bean lifecycle. * * @author Gavin King * */ @Interceptor(stateless=true, around={BijectionInterceptor.class, ConversationInterceptor.class, TransactionInterceptor.class, BusinessProcessInterceptor.class, RollbackInterceptor.class}) public class EventInterceptor extends AbstractInterceptor { private static final long serialVersionUID = -136300200838134612L; /*@PostConstruct public void postConstruct(InvocationContext ctx) { Events.instance().raiseEvent("org.jboss.seam.postConstruct." + component.getName()); } @PreDestroy public void preDestroy(InvocationContext ctx) { Events.instance().raiseEvent("org.jboss.seam.preDestroy." + component.getName()); } @PrePassivate public void prePassivate(InvocationContext ctx) { Events.instance().raiseEvent("org.jboss.seam.prePassivate." + component.getName()); } @PostActivate public void postActivate(InvocationContext ctx) { Events.instance().raiseEvent("org.jboss.seam.postActivate." + component.getName()); }*/ @AroundInvoke public Object aroundInvoke(InvocationContext ctx) throws Exception { Object result = ctx.proceed(); Method method = ctx.getMethod(); if ( result!=null || method.getReturnType().equals(void.class) ) { if ( method.isAnnotationPresent(RaiseEvent.class) ) { String[] types = method.getAnnotation(RaiseEvent.class).value(); if ( types.length==0 ) { Events.instance().raiseEvent( method.getName() ); } else { for (String type: types ) { Events.instance().raiseEvent(type); } } } } return result; } public boolean isInterceptorEnabled() { return getComponent().beanClassHasAnnotation(RaiseEvent.class); } }