com.opensymphony.module.sitemesh.mapper
Class AgentDecoratorMapper

java.lang.Object
  extended by com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper
      extended by com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper
All Implemented Interfaces:
DecoratorMapper

public class AgentDecoratorMapper
extends AbstractDecoratorMapper

The AgentDecoratorMapper can determine the user-agent (i.e. web-browser) requesting a page, and map to a suitable Decorator.

This can be useful for supplying different versions of the same content for different browsers (e.g. vanilla HTML for Lynx, complex tables and frames for Netscape, extra stuff for IE5, etc).

This can also be used to enhance search-engine ratings by using a 'bait and switch' system - this involves showing a search-engine friendly of the content to spiders only.

When AgentDecoratorMapper is in the chain, it will request the appropriate Decorator from its parent. It will then add an extention to the filename of the Decorator, and if that file exists it shall be used as the Decorator instead. For example, if the Decorator path is /blah.jsp and the detected user-agent is ie, the path /blah-ie.jsp shall be used.

The agent mappings are configured by passing properties with match. as a prefix. For example: 'match.MSIE'=ie , 'match.Lynx'=plain .

Version:
$Revision: 1.3 $
Author:
Joe Walnes
See Also:
DecoratorMapper

Field Summary
private  Map map
           
 
Fields inherited from class com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper
config, parent
 
Constructor Summary
AgentDecoratorMapper()
           
 
Method Summary
 Decorator getDecorator(HttpServletRequest request, Page page)
          Delegate to parent.
private  String getExt(String userAgent)
          Get extention for user-agent.
 void init(Config config, Properties properties, DecoratorMapper parent)
          Set parent.
private  void initMap(Properties props)
          Initialize user-agent mappings.
private static String modifyPath(String path, String ext)
          Change /abc/def.jsp into /abc/def-XYZ.jsp
 
Methods inherited from class com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper
getNamedDecorator
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

map

private Map map
Constructor Detail

AgentDecoratorMapper

public AgentDecoratorMapper()
Method Detail

init

public void init(Config config,
                 Properties properties,
                 DecoratorMapper parent)
          throws InstantiationException
Description copied from class: AbstractDecoratorMapper
Set parent.

Specified by:
init in interface DecoratorMapper
Overrides:
init in class AbstractDecoratorMapper
Parameters:
config - Config supplied by Servlet or Filter.
properties - Any initialization properties (specific to implementation).
Throws:
InstantiationException - should be thrown if the implementation cannot be initialized properly.

getDecorator

public Decorator getDecorator(HttpServletRequest request,
                              Page page)
Description copied from class: AbstractDecoratorMapper
Delegate to parent.

Specified by:
getDecorator in interface DecoratorMapper
Overrides:
getDecorator in class AbstractDecoratorMapper

getExt

private String getExt(String userAgent)
Get extention for user-agent.


modifyPath

private static String modifyPath(String path,
                                 String ext)
Change /abc/def.jsp into /abc/def-XYZ.jsp


initMap

private void initMap(Properties props)
Initialize user-agent mappings.


www.opensymphony.com/sitemesh/