All parts of CDK areCdkGeneratorArchitecture that are stored in the single 'context' object, therefore it is easy to configure particular build. The same context also keeps project settings ( source and output folders, tag library url, source files ). All work are done in the Annotation Processor, so it would be used as Maven plugin and as APT from IDE.
Annotations processor:Currently, the component, behavior, converter and renderer classes annotations are parsed, JavaDoc comments are stored as 'description' property hence we have a single point for library documentation. Standard JSF attributes were exported as faces-config fragments that used from APT and may be included into xml configuration as well. Code has been refactored to make new processors for additional JSF classes as easy as possible.
To be done:
Validator, FacesEvent, class annotations, test and tag information.
Faces-config.xml parser.Faces-config.xml parser works with 'component', 'converter','behavior' and 'render-kit' sections, with attributes and extensions tags. It configured with xinclude support. The same parser is used to include '@Attributes' references and standard JSF components definitions, therefore they could be used from annotations and included into faces-config.xml by xinclude directive. Generator merges information from both sources with highest precedence for xml.
Generation of output files.
Component class builder is implemented as FreeMarker template parser. Faces-config.xml file generator implemented by JAXB marshaller.
Template compiler processes template file and generates Java code.
The following things are supported:
- HTML tags with attributes
- CDK tags: if/choose/when/otherwise/object/call/body
- Composite tags interface/implementation
- EL expressions supported by JBoss EL (except projections)
Maven plugin:Maven plugin runs whole build project, using Maven CDK plugin configuration. Two interration tests have been created to test annotations-based and xml configurations.
Near Term Tasks
- Process annotations for JSF Validator, TagHandler FacesEvent
- Validate model
- Generate test classes
- Record Build errors
- Make build incremental
- Create generators for all remained classes.
- Integration tests
- Generate files for documentation
- Keep wiki articles up to date.
- Templates compiler:
Longer Term Tasks
- Templates compiler
Reporting of compilation errors via CDK(slipped for A2) RF-8308
- Handling for template-declared attributes RF-8309
- Support for disabled components RF-8310
Implement better support for template code reuse(either via XInclude or analogs for Facelets templating tags) (XInclude is there, slipped for A2) RF-8311 ForEach tag support(slipped for A2) RF-8312
Requirements for ALPHA2
- Documentation should be generated
Estimation on Effort and Time
- Templates compiler:
Optimized version of pass through attributes rendering - 3-4 days
- Unit tests for code generation - 2 days
- Review code & fix TODOs - 1-2 days
- Wiki documentation update - 2 days
Reporting of compilation errors via CDK - 2 days
- Handling for template-declared attributes - 2-3 days
- Support for disabled components - 2 days
Implement better support for template code reuse (either via XInclude or analogs for Facelets templating tags) XInclude - already there Facelets templating - 7-10 days ForEach tag support - 1.5 days