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]