I hope the preceding 2 parts have given you an elementary understanding of how WebDeco works. This last part outlines the building blocks of the WebDeco architecture in a reference style and in more detail. If you like to have even more detail, follow the links to the JavaDocs as soon they are available. :-)
The servlet filter provides the glue between the servlet container like tomcat, the Spring Framework and WebDeco. It also gets called in every request and starts the request processing logic.
This class contains the core processing logic of plausj. It is configured using a Spring bean context. The following building blocks are passed to that class as direct properties or as properties of properties. It must be named webDeco inside the bean context for lookup. And the lookup is only done to the local spring bean context.
Classes that implement this interface are responsible for mapping request data to a specific decoration. Their method getDecoration takes the Servlet request and response as input and may or may not return an instance of Decoration. Matcher implementations are listed added to a list that is supplied to the WebDeco class as property. On every request this list is iterated over in order of occurrence until a Matcher returns a Decoration instance.
This class is a simple Java Bean holding references to the elements of a use case decoration. It contains a getter/setter for an object implementing the Template interface. It also contains getter/setter pair for a list of objects implementing the interface SubContentTask.
Classes that implement this interface are able to do the templating job. That means they encapsulate some kind of view technology like JSP/JSTL or velocity. Further they provide a way to add the use case content and the common page content to the final output.
Implementing classes are responsible for delivering a common page content element. That means either the generate it or the aggregate it from somewhere (e.g. a servlet or another server).
Ok. Thats all for the moment. I hope it made things a bit clear (for me it did. :-) ). Now watch me coding the 0.5 zero release.
The End