001 package org.tynamo.conversations.services;
002
003 import org.apache.tapestry5.ioc.Invocation;
004 import org.apache.tapestry5.ioc.MethodAdvice;
005 import org.apache.tapestry5.ioc.services.AspectDecorator;
006 import org.apache.tapestry5.services.Cookies;
007
008 public class RequestHandlerDecoratorImpl implements RequestHandlerDecorator {
009 private final AspectDecorator aspectDecorator;
010
011 private final ConversationManager conversationManager;
012
013 private final Cookies cookies;
014
015 public RequestHandlerDecoratorImpl(AspectDecorator aspectDecorator, ConversationManager conversationManager, Cookies cookies) {
016 this.aspectDecorator = aspectDecorator;
017 this.conversationManager = conversationManager;
018 this.cookies = cookies;
019 }
020
021 public <T> T build(Class<T> serviceInterface, T delegate) {
022
023 MethodAdvice advice = new MethodAdvice() {
024 public void advise(Invocation invocation) {
025 conversationManager.activateConversation(invocation.getParameter(0));
026 invocation.proceed();
027 }
028 };
029
030 return aspectDecorator.build(serviceInterface, delegate, advice, String.format("<Conversational context interceptor for %s>", serviceInterface.getName()));
031 }
032 }