Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Gendoc/developerResources/PropertiesExample
Contents
Presentation
The goal of the example is creating a tag named "Properties" which allows the registration of parameters using properties file. The properties file will be referenced through an attribute named "path". This attribute would be able to contain reference to gendoc variables (${project_loc}, ${input_directory}....)
Contributing
Open a bug
first step is to create a new Bug categorized as an enhancement. In our example the created bug is : https://bugs.eclipse.org/bugs/show_bug.cgi?id=484129
Code
The code source of this example can be visible through these 2 gerrit contributions :
Global Idea
The good way to create a tag in gendoc is :
- create a handler (implements org.eclipse.gendoc.tags.ITagHandler) which analyze the tag
- create a service (extends org.eclipse.gendoc.services.AbstractService or implements org.eclipse.gendoc.services.IService) which will do business work
It is a common practice in gendoc to separate handlers and services
- Services can be overridden by developers so initial behavior can be changed
- It forces the developer to separate tha analysis of the tag and the business code
Service
Tag Handler
Fill the extension : org.eclipse.gendoc.tags to create new tag
- the tag contains one attribute : "path" which is required and typed java.lang.String
- reference a class you will create : org.eclipse.gendoc.tags.handlers.impl.properties.PropertiesTagHandler
Some mechanisms exist in gendoc to plug operation on tag analysis, to automatically get them our class inherits from org.eclipse.gendoc.tags.handlers.impl.AbstractServicesTagHandler
The methods to implement in PropertiesTagHandler.java are doRun and runAttributes. - doRun is the method call to run a tag. ie when the content of the tag is replaced by a new content. In the properties case we want to remove the content so we only have to return an empty String :
public String doRun(ITag tag) throws GenDocException {
super.doRun(tag); return "";
}
- runAttributes is the method called when the attributes are analyzed. In our case the runAttributes method will :
- replace parameters (like project_loc) [1] - check if the file exists (and raise an error if it is not the case) [2] - call the PropertiesService to load and process the properties file [3]
/!\ In this example the parameters replacement and the file check are made in tag handler. It could be moved to the Service if you want to have tag easier to override.
protected String runAttributes(ITag tag, String value) throws GenDocException ... // [1] : for (String key : tag.getAttributes().keySet()) {
if (RegisteredTags.PROPERTIES_PATH.equalsIgnoreCase(key)){ IConfigurationService configService = GendocServices.getDefault().getService(IConfigurationService.class); String path = configService.replaceParameters(tag.getAttributes().get(key));
...
// [2] : IGendocDiagnostician logger = GendocServices.getDefault().getService(IGendocDiagnostician.class); logger.addDiagnostic(IStatus.ERROR,"file containing properties : " + path + " does not exist", null);
...
// [3] IPropertiesService propertiesService = GendocServices.getDefault().getService(IPropertiesService.class); propertiesService.setPropertiesFile(f);