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    }