On 5 mar 2008, at 06.46, Vjeran Marcinko wrote:

Anyway, sometimes I deploy my Tapestry application to various customers which want to have dfferent text messages or maybe even outlook of some pages. I can use CSS for some of it, but lets say that I want to pick different page/global .property file for displaying different messages stored in them.

Actually, perfect solution for me would be some kindof Locale which could be set initially through Tapestry configuration, so I could have smething like:

Home.html
Home_customer1.html
Home_customer2.html

I would solve this by defining my own PageTemplateLocator (and similar for properties too). It would need a service 'YourCustomerMode' which would be
inserted into the template constructor:

First, in AppModule.java:

public PageTemplateLocator buildMyPageLocator(
        @ContextProvider AssetFactory contextAssetFactory,
        ComponentClassResolver componentClassResolver,
        YourCustomerMode customer) {
return new MyTemplateLocator(contextAssetFactory.getRootResource(), componentClassResolver, customer);
}
        
public static void contributeAliasOverrides(
        @InjectService("MyPageLocator") PageTemplateLocator locator,
        Configuration<AliasContribution<PageTemplateLocator>> configuration) {
configuration.add(AliasContribution.create(PageTemplateLocator.class, locator));
}

and the MyTemplateLocator.java:

public class MyTemplateLocator implements PageTemplateLocator
{
        private final Resource _contextRoot;
        private final ComponentClassResolver _resolver;
        private final YourCustomerMode _customerMode;
        
public MyTemplateLocator(Resource contextRoot, ComponentClassResolver resolver, YourCustomerMode customerMode)
        {
                _contextRoot = contextRoot;
                _resolver = resolver;
                _ customerMode = customerMode;
        }
        
public Resource findPageTemplateResource(ComponentModel model, Locale locale)
        {
                String className = model.getComponentClassName();
                if(!className.contains(".pages."))
                        return null;
                
String logicalName = _resolver.resolvePageClassNameToPageName(className);
                int slashx = logicalName.lastIndexOf('/');
                if(slashx > 0)
                {
                        String simpleClassName = 
InternalUtils.lastTerm(className);
                        logicalName = logicalName.substring(0, slashx + 1) + 
simpleClassName;
                }
                
String path = format("%s_%s.html", logicalName, _customerMode.getCurrentCustomerName());
                return _contextRoot.forFile(path).forLocale(locale);
        }
}

// Andreas Pardeike

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to