001    package org.tynamo.conversations.services;
002    
003    import java.io.IOException;
004    import java.util.Properties;
005    
006    import org.apache.tapestry5.ioc.Configuration;
007    import org.apache.tapestry5.ioc.MappedConfiguration;
008    import org.apache.tapestry5.ioc.ServiceBinder;
009    import org.apache.tapestry5.ioc.annotations.Match;
010    import org.apache.tapestry5.services.LibraryMapping;
011    import org.apache.tapestry5.services.PersistentFieldStrategy;
012    import org.apache.tapestry5.services.Request;
013    import org.apache.tapestry5.services.RequestGlobals;
014    
015    public class ConversationModule {
016            private static final String version;
017            static {
018                    Properties moduleProperties = new Properties();
019                    String aVersion = "unversioned"; 
020                    try {
021                            moduleProperties.load(ConversationModule.class.getResourceAsStream("module.properties"));
022                            aVersion = moduleProperties.getProperty("module.version");
023                    } catch (IOException e) {
024                            // ignore
025                    }
026                    version = aVersion;
027            }
028    
029            public static void bind(ServiceBinder binder) {
030                    binder.bind(RequestHandlerDecorator.class, RequestHandlerDecoratorImpl.class);
031                    binder.bind(ConversationManager.class, ConversationManagerImpl.class);
032            }
033    
034            public static void contributeComponentClassResolver(Configuration<LibraryMapping> configuration) {
035                    configuration.add(new LibraryMapping("conversation", "org.tynamo.conversations"));
036            }
037    
038            public static void contributeClasspathAssetAliasManager(MappedConfiguration<String, String> configuration) {
039                    configuration.add("tynamo-conversations-" + version, "org/tynamo/conversations");
040            }
041    
042            public static void contributePersistentFieldManager(MappedConfiguration<String, PersistentFieldStrategy> configuration, RequestGlobals requestGlobals,
043                            Request request, ConversationManager conversationManager) {
044                    configuration.add("conversation", new ConversationalPersistentFieldStrategy(request, conversationManager));
045            }
046    
047            public static <T> T decorateComponentRequestHandler(Class<T> serviceInterface, T delegate, RequestHandlerDecorator decorator) {
048                    return decorator.build(serviceInterface, delegate);
049            }
050    
051    }