This mapper should do mapping according to configuration in liferay-portlet.xml .
1. FriendlyUrlMapperFactory
it's a cache for mappers instances, every portlet instance can have one generic mapper with different config
2. GenericFriendlyUrlMapper
It reads extra path and split it to parameters and of course creates such path from parameters.
Actually it works only with fixed set of parameters, can be extended to use more sophisticated strategy.
3. PortalUtil - hacked to use GenericFriendlyUrlMapper for portlets which mapper class is not a class
4. PortletImpl - changed method getFriendlyURLMapper .
configuration
<friendly-url-mapper-class>puzzle,puzzType,id</friendly-url-mapper-class>
instead of class there is a coma separated list - first part is mapping, other parts are parameter names.