//$Id: SeamInvocationContext.java 5537 2007-06-25 23:59:31Z gavin $ package org.jboss.seam.intercept; import java.lang.reflect.Method; import java.util.List; import java.util.Map; /** * Adapts from EJB interception to Seam component interceptors * * @author Gavin King */ class SeamInvocationContext implements InvocationContext { private final EventType eventType; private final InvocationContext context; private final List<Interceptor> interceptors; private final List<Object> userInterceptors; int location = 0; public SeamInvocationContext(InvocationContext context, EventType type, List<Object> userInterceptors, List<Interceptor> interceptors) { this.context = context; this.interceptors = interceptors; this.userInterceptors = userInterceptors; this.eventType = type; } public Object getTarget() { return context.getTarget(); } public Map getContextData() { return context.getContextData(); } public Method getMethod() { return context.getMethod(); } public Object[] getParameters() { return context.getParameters(); } public Object proceed() throws Exception { if ( location==interceptors.size() ) { return context.proceed(); } else { Object userInterceptor = userInterceptors.get(location); Interceptor interceptor = interceptors.get(location); location++; switch (eventType) { case AROUND_INVOKE: if ( interceptor.isOptimized() ) { return ( (OptimizedInterceptor) userInterceptor ).aroundInvoke(this); } else { return interceptor.aroundInvoke(this, userInterceptor); } case POST_CONSTRUCT: return interceptor.postConstruct(this, userInterceptor); case PRE_DESTORY: return interceptor.preDestroy(this, userInterceptor); case PRE_PASSIVATE: return interceptor.prePassivate(this, userInterceptor); case POST_ACTIVATE: return interceptor.postActivate(this, userInterceptor); default: throw new IllegalArgumentException("no InvocationType"); } } } public void setParameters(Object[] params) { context.setParameters(params); } }