You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by jeffrey ai <jf...@gmail.com> on 2007/12/01 00:41:13 UTC

T5: Personalizing page and component template

Hi Folks,

We have a need to provide personalized page for different user groups, so I
tweaked some T5 services to make it possible to use personalized template
based on a request parameter. 

I would like put the general idea here in case you guys are interested. Also
since I have change some T5 internal services, I am wondering whether I have
missed something. Your advice are quite welcome.

Basically, I decorated 2 T5 internal services -- ComponentTemplateSource and
PagePool.
* ComponentTemplateSource is responsible to look up templates, so I have
changed it to request-aware and load template based on the user group.
* PagePool is responsible to pool pages, so I have changed it to
request-aware too and pool pages based on user group.

Although I used T5 decorator facility to intercept calls to both services,
it's not real decorating behavior as defined in GoF pattern. My decorators
will handle all calls, they won't even pass calls to decoratees -- the
original services. I am a little concerned whether my tweak would have some
side effects.

---------- Code Snippet of my AppModule.java
	public ComponentTemplateSource decorateComponentTemplateSource(
			Class<ComponentTemplateSource> serviceInterface, Object delegate, String
serviceId, Logger logger,
			TemplateParser parser, PageTemplateLocator locator, RequestGlobals
requestGlobals )
	{
		final MyComponentTemplateSourceImpl service = new
MyComponentTemplateSourceImpl(
				parser, locator, requestGlobals );

		_updateListenerHub.addUpdateListener( service );

		return service;
	}

	public PagePool decoratePagePool( Class<PagePool> serviceInterface, Object
delegate, String serviceId,
			Logger logger, PageLoader pageLoader, ThreadLocale threadLocale,
ComponentClassResolver resolver,
			RequestGlobals requestGlobals, ThreadString threadString,
			ComponentMessagesSource componentMessagesSource, ComponentTemplateSource
componentTemplateSource )
	{
		final MyPagePoolImpl service = new MyPagePoolImpl( logger, pageLoader,
threadLocale,
				resolver, requestGlobals, threadString );

		// This covers invalidations due to changes to classes

		pageLoader.addInvalidationListener( service );

		// This covers invalidation due to changes to message catalogs (properties
files)

		componentMessagesSource.addInvalidationListener( service );

		// ... and this covers invalidations due to changes to templates

		componentTemplateSource.addInvalidationListener( service );

		return service;
	}
----------

Thanks for any advice.
Jeffrey Ai

-- 
View this message in context: http://www.nabble.com/T5%3A-Personalizing-page-and-component-template-tf4925841.html#a14098291
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: T5: Personalizing page and component template

Posted by jeffrey ai <jf...@gmail.com>.
Anybody, any advice?


jeffrey ai wrote:
> 
> Hi Folks,
> 
> We have a need to provide personalized page for different user groups, so
> I tweaked some T5 services to make it possible to use personalized
> template based on a request parameter. 
> 
> I would like put the general idea here in case you guys are interested.
> Also since I have change some T5 internal services, I am wondering whether
> I have missed something. Your advice are quite welcome.
> 
> Basically, I decorated 2 T5 internal services -- ComponentTemplateSource
> and PagePool.
> * ComponentTemplateSource is responsible to look up templates, so I have
> changed it to request-aware and load template based on the user group.
> * PagePool is responsible to pool pages, so I have changed it to
> request-aware too and pool pages based on user group.
> 
> Although I used T5 decorator facility to intercept calls to both services,
> it's not real decorating behavior as defined in GoF pattern. My decorators
> will handle all calls, they won't even pass calls to decoratees -- the
> original services. I am a little concerned whether my tweak would have
> some side effects.
> 
> ---------- Code Snippet of my AppModule.java
> 	public ComponentTemplateSource decorateComponentTemplateSource(
> 			Class<ComponentTemplateSource> serviceInterface, Object delegate,
> String serviceId, Logger logger,
> 			TemplateParser parser, PageTemplateLocator locator, RequestGlobals
> requestGlobals )
> 	{
> 		final MyComponentTemplateSourceImpl service = new
> MyComponentTemplateSourceImpl(
> 				parser, locator, requestGlobals );
> 
> 		_updateListenerHub.addUpdateListener( service );
> 
> 		return service;
> 	}
> 
> 	public PagePool decoratePagePool( Class<PagePool> serviceInterface,
> Object delegate, String serviceId,
> 			Logger logger, PageLoader pageLoader, ThreadLocale threadLocale,
> ComponentClassResolver resolver,
> 			RequestGlobals requestGlobals, ThreadString threadString,
> 			ComponentMessagesSource componentMessagesSource,
> ComponentTemplateSource componentTemplateSource )
> 	{
> 		final MyPagePoolImpl service = new MyPagePoolImpl( logger, pageLoader,
> threadLocale,
> 				resolver, requestGlobals, threadString );
> 
> 		// This covers invalidations due to changes to classes
> 
> 		pageLoader.addInvalidationListener( service );
> 
> 		// This covers invalidation due to changes to message catalogs
> (properties files)
> 
> 		componentMessagesSource.addInvalidationListener( service );
> 
> 		// ... and this covers invalidations due to changes to templates
> 
> 		componentTemplateSource.addInvalidationListener( service );
> 
> 		return service;
> 	}
> ----------
> 
> Thanks for any advice.
> Jeffrey Ai
> 
> 

-- 
View this message in context: http://www.nabble.com/T5%3A-Personalizing-page-and-component-template-tf4925841.html#a14140075
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org