Hi,
We have the need to handle optional Transformations (for Annotations
and more generally for user-introduced annotations).
Here's what Thomas and I are proposing:
1) We remove the TransformationManager component from the Rendering
module (public API). This means that calling code must lookup
Transformations directly.
2) We modify the Converter interface in the Rendering module in 2 ways:
- add a new signature that takes a list of Transformation as parameter
- modify the implementation for the signature that take no
Transformation params so that no Transformations are executed when
it's used (API breakage)
3) We add a XWiki configuration parameter in xwiki.properties to list
the transformations that must be executed (it's a list of component
hints) when a document is rendered. If this config param is not
defined then the default value will contain the Macro Transformation.
4) We introduce a new module called xwiki-presentation which will
contain code to handle XWiki Presentation stuff. For example:
- template handling
- displayers (document displayer, object displayers, etc)
- display configuration
- more to be defined but related to presentation
The idea would be to move stuff that is currently in XWiki/
XWikiDocument related to presentation there (for example
XWikiDocument.getRenderedContent could be replaced by
DocumentDisplayer.display(DocumentName, Syntax, Writer output) - to be
defined later).
5) In order to allow modules to not depend on xwiki-core we introduce
PresentationConfiguration in the new xwiki-presentation module defined
in 4) with a getViewTransformations() method corresponding to a
"presentation.viewTransformations" configuration parameter.
6) We introduce a new TransformationContext class similar to
MacroTransformationContext and modify the Transformation API to:
void transform(XDOM, TransformationContext) (instead of XDOM dom,
Syntax syntax)).
TransformationContext would contain 2 type of data:
- the syntax
- the list of transformations being executed (this is required by some
Macros. For ex the HTML macro needs it and other may need it too)
7) We remove the getPriority() method from the Transformation interface
8) We modify calling code: WYSIWYG, XMLRPC, etc to use the new
Converter API and to lookup PresentationConfiguration to get access to
the list of view transformations to be executed.
Here's my +1
Thanks
-Vincent
PS: A long and complex mail... sorry about that...