Return-Path:
Forrest can be extended with the addition of plugins. This document
- describes what a plugin is and outlines the plugin infrastructure so
- that you can start building your own Forrest extensions.
+ Forrest can be extended with the addition of plugins. This document
+ describes what a plugin is and outlines the plugin infrastructure so
+ that you can start building your own Forrest extensions.
+ A Forrest plugin is a set of resources and configuration files that
- extend the functionality of Forrest. They will typically consist of a
- sitemap, zero or more stylesheets and zero or more schemas. The plugins sitemap is mounted by Forrest's sitemap after the project
- specific sitemap but before the Forrest default matchers. This allows
- a plugin to override/extend default Forrest behaviour. By adopting a
- plugin model we can keep the core of Forrest tightly
- focused on the basic functionality, whilst still facilitating extensions
- to suit individual projects needs.
+ A Forrest plugin is a set of resources and configuration files that
+ extend the functionality of Forrest. They will typically consist of a
+ sitemap, zero or more stylesheets and zero or more schemas.
+
+ The plugins sitemap is mounted by Forrest's sitemap after the project
+ specific sitemap but before the Forrest default matchers. This allows a
+ plugin to override/extend default Forrest behaviour. By adopting a
+ plugin model we can keep the core of Forrest tightly focused on the
+ basic functionality, whilst still facilitating extensions to suit
+ individual projects needs.
+ There are three types of plugin, Technically you can name a plugin anything you like with one
- small restriction (see below). However, we
- do have some naming conventions that we recomend you follow. This is
- to minimise the chances of collision between plugins from different
- developers. The name should be structured like a java package name, and should
- include a relevant reverse domain name. For example:
+ Technically you can name a plugin anything you like with one small
+ restriction (see below). However, we do have some naming conventions
+ that we recomend you follow. This is to minimise the chances of
+ collision between plugins from different developers.
+
+ The name should be structured like a java package name, and should
+ include a relevant reverse domain name. For example:
+ Where
+ Where In order to fully understand the applicability of Forrest Plugins we
- will consider an extension to the way in which Forrest defines the
- structure of the site. By default Forrest uses a site.xml file to
- define navigation through the site and a tabs.xml file to define the
- tabs across the top of the page. But what if we want to use a different
- file to describe site structure? For example, what if we want to use an
- IMS Manifest file from the SCORM content package standards
- (http://www.adlnet.org/). An IMS Manifest file describes the structure of a site. It is also
- possible to define a set of rules for extracting tab information from
- such a file. Consequently, it is possible to use an IMSManifest file to
- create Forrest's site.xml and tabs.xml files. The advantage would be that
- we can then use SCORM compliant content objects within Forrest. Unfortunately, IMS Manifests are much more complex than site.xml and
- tabs.xml files. Therefore, not all users will want to use them. Adding
- the functionality as an optional plugin seems to be the ideal
- solution.
+ In order to fully understand the applicability of Forrest Plugins we
+ will consider an extension to the way in which Forrest defines the
+ structure of the site. By default Forrest uses a site.xml file to
+ define navigation through the site and a tabs.xml file to define the
+ tabs across the top of the page. But what if we want to use a
+ different file to describe site structure? For example, what if we
+ want to use an IMS Manifest file from the SCORM content package
+ standards (http://www.adlnet.org/).
+
+ An IMS Manifest file describes the structure of a site. It is also
+ possible to define a set of rules for extracting tab information from
+ such a file. Consequently, it is possible to use an IMSManifest file
+ to create Forrest's site.xml and tabs.xml files. The advantage would
+ be that we can then use SCORM compliant content objects within
+ Forrest.
+
+ Unfortunately, IMS Manifests are much more complex than site.xml and
+ tabs.xml files. Therefore, not all users will want to use them. Adding
+ the functionality as an optional plugin seems to be the ideal
+ solution.
+ Plugins will need to conform to a specified directory structure.
- This mirrors the default forrest directory structure:
+ Plugins will need to conform to a specified directory structure. This
+ mirrors the default forrest directory structure:
+ If we consider the IMS Manifest Plugin described above, we see that we
- will need the following files and directory structure:
+ If we consider the IMS Manifest Plugin described above, we see that we
+ will need the following files and directory structure:
+ The sitemap.xmap file will override the default behaviour for the
- navigation generation matchers in Forrest, for example, it contains
- a matcher as follows:input
,
- output
and internal
. Each plugin has a
- specific role to play and extends a different part of Forrest:PLUGIN_TYPE
is either "internal", "input" or
- "output" and PLUGIN_NAME"
is a suitable name chosen by
- yourself.PLUGIN_TYPE
is either "internal", "input" or
+ "output" and PLUGIN_NAME"
is a suitable name chosen by
+ yourself.
+
- See the - Using Plugins - for an overview of how the plugin installation system works and the places and order - that will be searched. -
- -When Forrest installs a plugin it downloads a zip of the plugin code and
- extracts it into the plugins
directory of Forrest and an entry is made
- in a temporary sitemap that manages plugins for your content object.
- For example, installing the
- IMSManifest plugin described above will result in the following entry
- being added to the this temporary sitemap:
+ See the Using Plugins for an overview + of how the plugin installation system works and the places and order + that will be searched. +
+
+ When Forrest installs a plugin it downloads a zip of the plugin code and
+ extracts it into the plugins
directory of Forrest and an
+ entry is made in a temporary sitemap that manages plugins for your
+ content object. For example, installing the IMSManifest plugin described
+ above will result in the following entry being added to the this
+ temporary sitemap:
+
To be more accurate, the entries are made in one of three temporary - sitemaps, input.xmap, output.xmap and resources.xmap. These temporary - sitemaps are rebuilt each time the content object is built or run, thus - we are always guarenteed of having the right plugins installed.
- + ]]> ++ To be more accurate, the entries are made in one of three temporary + sitemaps, input.xmap, output.xmap and resources.xmap. These temporary + sitemaps are rebuilt each time the content object is built or run, thus + we are always guarenteed of having the right plugins installed. +
++ If you want to build a plugin you might like to start with our + HowTo on Building Plugins. +
If you want to build a plugin you might like to start with our - HowTo on Building Plugins.
-Forrest provides the core functionality for generating documentation - in various output formats from a range of input formats. However, it - does not end there. Forrest can be extended through the addition of - plugins. This document serves as an introduction to the Forrest - plugin mechanism.
- ++ Forrest provides the core functionality for generating documentation in + various output formats from a range of input formats. However, it does + not end there. Forrest can be extended through the addition of plugins. + This document serves as an introduction to the Forrest plugin mechanism. +
You can run the command forrest available-plugins
to get
- a list of the known plugins for Forrest.
If you would like to have your own plugin added to this list then - contact the developer mailing list.
+
+ You can run the command forrest available-plugins
to get
+ a list of the known plugins for Forrest.
+
+ If you would like to have your own plugin added to this list then + contact the developer mailing list. +
If a site requires one or more plugins then the site designer will
- have to list them in the project.required.plugins
property
- in the projects forrest.properties
file. When Forrest
- builds the site it will automatically discover the plugins and install
- them. In otherwords, the user needs do nothing.
For example,
-- will cause Forrest to load the plugins called "org.apache.forrest.plugin.input.OpenOffice.org" and - "org.apache.forrest.plugin.input.simplifiedDocbook".
-In the absence of a version number for the plugin (as is the case in the example above)
- the most recent version that is applicabe to your release of Forrest will be used. This
- may result in unexpected behaviour if a new version of the plugin has been released that
- is incompatible with your current site. To force Forrest into using a specific version of
- a plugin you should add "-VERSION_NUMBER" to the end of the plugin name. For example,
- to force forrest to use the 1.0 version of the OpenOffice.org plugin you would use
- org.apache.forrest.plugin.input.OpenOffice.org-1.0
. If you define a version of the
- plugin that does not exist then it will fall back to using the most recent version available.
- This feature is useful when
- developing a new site as you can quickly force a plugin upgrade by deleting all installed
- plugins (use the command 'ant cleanPlugins'). However, this might result in the installation
- of an in-development plugin, therefore in a production environment you should always specify
- a known working version.
+ If a site requires one or more plugins then the site designer will
+ have to list them in the project.required.plugins
+ property in the projects forrest.properties
file. When
+ Forrest builds the site it will automatically discover the plugins and
+ install them. In otherwords, the user needs do nothing.
+
+ For example, +
++ will cause Forrest to load the plugins called + "org.apache.forrest.plugin.input.OpenOffice.org" and + "org.apache.forrest.plugin.input.simplifiedDocbook". +
+
+ In the absence of a version number for the plugin (as is the case in
+ the example above) the most recent version that is applicabe to your
+ release of Forrest will be used. This may result in unexpected
+ behaviour if a new version of the plugin has been released that is
+ incompatible with your current site. To force Forrest into using a
+ specific version of a plugin you should add "-VERSION_NUMBER" to the
+ end of the plugin name. For example, to force forrest to use the 1.0
+ version of the OpenOffice.org plugin you would use
+ org.apache.forrest.plugin.input.OpenOffice.org-1.0
. If
+ you define a version of the plugin that does not exist then it will
+ fall back to using the most recent version available. This feature is
+ useful when developing a new site as you can quickly force a plugin
+ upgrade by deleting all installed plugins (use the command 'ant
+ cleanPlugins'). However, this might result in the installation of an
+ in-development plugin, therefore in a production environment you
+ should always specify a known working version.
+
+ This is fairly complex, so here is a simple overview. If you want to + know the details you need to read the rest of this section. For most + people this overview will be sufficient. +
++ Forrest will try and retrieve a plugin from local source files + first, if that fails it will look on a remote distribution server. + Once it finds a copy of the plugin it will deploy it to the local + Forrest instance and use it from there. +
+
+ The local directories that will be searched are defined in the
+ project.required.plugins.src
property, which is defined
+ in the forrest.properties
file. By default this is set
+ to
+ ${forrest.home}/plugins,${forrest.home}/whiteboard/plugins
,
+ which means that these two directories will be searched for plugins.
+
+ If you have a collection of local plugins you would like Forrest to
+ use then you need to add the directory to this property. For
+ example:
+ project.required.plugins.src=${forrest.home}/plugins,${forrest.home}/whiteboard/plugins,/export/forrest_plugins
+
+ You can add this line to your projects
+ forrest.properties
file. However, it may be more
+ convenient to add it to a forrest.properties
file in
+ your users home directory.
+
This is fairly complex, so here is a simple overview. If you want to know the - details you need to read the rest of this section. For most people this overview - will be sufficient.
- -Forrest will try and retrieve a plugin from local source files first, if that - fails it will look on a remote distribution server. Once it finds a copy of the - plugin it will deploy it to the local Forrest instance and use it from there.
- -The local directories that will be searched are defined in the project.required.plugins.src
- property, which is defined in the forrest.properties
file. By default
- this is set to ${forrest.home}/plugins,${forrest.home}/whiteboard/plugins
,
- which means that these two directories will be searched for plugins.
If you have a collection of local plugins you would like Forrest to use then you
- need to add the directory to this property. For example:
- project.required.plugins.src=${forrest.home}/plugins,${forrest.home}/whiteboard/plugins,/export/forrest_plugins
You can add this line to your projects forrest.properties
file. However,
- it may be more convenient to add it to a forrest.properties
file
- in your users home directory.
Forrest uses a fall back mecanism to find the plugins to install for a project.
-For an unversionned plugin, Forrest tries to get it from :
-project.required.plugins.src
property)For a versionned plugin, Forrest tries to get :
-project.required.plugins.src
property)project.required.plugins.src
property again)By default, forrest looks into the two following directories to find plugins sources : ${forrest.home}/plugins
and ${forrest.home}/whiteboard/plugins
.
- It is possible to add other sources locations by specifying the project.required.plugins.src
property
- in the projects forrest.properties
file.
For example,
-
- will add the project specific directory ${project.home}/plugins
to the list of directories to search in.
If sources are not found, forrest will try to get them from the Web. Forrest knows the plugins description with plugins descriptors files - in which plugins are described as follows :
-+ For an unversionned plugin, Forrest tries to get it from : +
+project.required.plugins.src
property)+ For a versionned plugin, Forrest tries to get : +
+project.required.plugins.src
property)project.required.plugins.src
property again)
+ By default, forrest looks into the two following directories to find
+ plugins sources : ${forrest.home}/plugins
and
+ ${forrest.home}/whiteboard/plugins
. It is possible to add
+ other sources locations by specifying the
+ project.required.plugins.src
property in the projects
+ forrest.properties
file.
+
+ For example, +
+
+ will add the project specific directory
+ ${project.home}/plugins
to the list of directories to
+ search in.
+
+ If sources are not found, forrest will try to get them from the Web. + Forrest knows the plugins description with plugins + descriptors files in which plugins are described as follows : +
+The url to download the different plugins is indicated in this file.
-By default, forrest gets the two following plugins descriptors files : http://forrest.apache.org/plugins/plugins.xml
and http://forrest.apache.org/plugins/whiteboard-plugins.xml
.
- It is possible to add other plugins descriptors files by specifying the forrest.plugins.descriptors
property
- in the projects forrest.properties
file.
For example,
-
- will add the project specific plugins descriptors file file:///${project.home}/plugins/plugins.xml
to the list of descriptors.
+ The url to download the different plugins is indicated in this file. +
+
+ By default, forrest gets the two following plugins descriptors files :
+ http://forrest.apache.org/plugins/plugins.xml
and
+ http://forrest.apache.org/plugins/whiteboard-plugins.xml
.
+ It is possible to add other plugins descriptors files by specifying
+ the forrest.plugins.descriptors
property in the projects
+ forrest.properties
file.
+
+ For example, +
+
+ will add the project specific plugins descriptors file
+ file:///${project.home}/plugins/plugins.xml
to the list
+ of descriptors.
+
If you need to add specific behaviour to an existing plugin, you should first consider - whether your changes will be of use to all users of the plugin or not. If they are of - general use then you can edit the plugin source files in their original location (i.e. - not in the build directory). Once you have completed your changes please - prepare a patch - and submit it for inclusion in code base.
- -If your changes are specific to your own use of the plugin you can create a local - copy of the plugin for this. However, we strongly advise against this - since you will need to manually update your plugin each time a new release of the original - is made. In the vast majority of cases local enhancements to a plugin wil be of use - to the wider communtiy. Please donate back to the project and help keep it vibrant and - useful. See the Further Reading section at the end of this document for links to - documents with more information.
++ If you need to add specific behaviour to an existing plugin, you should + first consider whether your changes will be of use to all users of the + plugin or not. If they are of general use then you can edit the plugin + source files in their original location (i.e. not in the build + directory). Once you have completed your changes please + prepare a patch and submit it for + inclusion in code base. +
++ If your changes are specific to your own use of the plugin you can + create a local copy of the plugin for this. However, we strongly advise + against this since you will need to manually update your plugin each + time a new release of the original is made. In the vast majority of + cases local enhancements to a plugin wil be of use to the wider + communtiy. Please donate back to the project and help keep it vibrant + and useful. See the Further Reading section at the end of this document + for links to documents with more information. +
The plugin functionality was introduced in version 0.7 of Forrest.
- At this time some of the functionality previously in Forrest was
- extracted into a plugin. However, we have not broken backward
- compatability with earlier versions. In the absence of a
- project.required.plugins
property in the projects
- forrest.properties
file all plugins that contain
- functionality previously part of Forrest itself will be loaded
- automatically. Unless you intend to use new functionality provided
- by a plugin you will not need to make any changes to your project.
If you do require additional plugin functionality, be sure to
- include all required plugins in the
- project.required.plugins
property in the project's
- forrest.properties
. You can view
- main/webapp/default-forrest.properties
- to see the names of plugins that provide previously core
- functionality.
It is also worth noting that there is a small performance
- improvement if you remove plugins that are not in use. Therefore,
- if you do not use one or more of the plugins named in the
- project.required.plugins
property of
- main/webapp/default-forrest.properties
- it is recomended that you override this value in your project's
- forrest.properties
file.
+ The plugin functionality was introduced in version 0.7 of Forrest. At
+ this time some of the functionality previously in Forrest was extracted
+ into a plugin. However, we have not broken backward compatability with
+ earlier versions. In the absence of a
+ project.required.plugins
property in the projects
+ forrest.properties
file all plugins that contain
+ functionality previously part of Forrest itself will be loaded
+ automatically. Unless you intend to use new functionality provided by a
+ plugin you will not need to make any changes to your project.
+
+ If you do require additional plugin functionality, be sure to include
+ all required plugins in the project.required.plugins
+ property in the project's forrest.properties
. You can view
+ main/webapp/default-forrest.properties
to see the names of
+ plugins that provide previously core functionality.
+
+ It is also worth noting that there is a small performance improvement if
+ you remove plugins that are not in use. Therefore, if you do not use one
+ or more of the plugins named in the
+ project.required.plugins
property of
+ main/webapp/default-forrest.properties
it is recomended
+ that you override this value in your project's
+ forrest.properties
file.
+
Clashes between plugins can occur. For example, the simplified-docbook
- and full docbook plugins may try and process the same files. In this
- instance the one that is mounted first will take precedence. Plugins
- are mounted in the order they appear in the
- project.required.plugins
property, therefore the mounting
- order and therefore processing precedence is under user control.
+ Clashes between plugins can occur. For example, the simplified-docbook
+ and full docbook plugins may try and process the same files. In this
+ instance the one that is mounted first will take precedence. Plugins are
+ mounted in the order they appear in the
+ project.required.plugins
property, therefore the mounting
+ order and therefore processing precedence is under user control.
+
All documentation about Apache Forrest is managed as a Forrest-built project located in the - site-author directory of forrest/trunk SVN. The Apapce Forrest website is updated by generating static pages from - the site-author-project and committing them to the forrest/site SVN, which is then - 'svn checkout' on the forrest.apache.org webserver to create the website.
-- See other notes for the Documentation Coordinator role. -
-Do once, create $FORREST_HOME/deploy.svn.settings file. These - credentials are needed by forrestbot so that it can do your 'svn add' - and 'svn commit' etc. to the forrest/site/ repository. The - deploy.svn.settings file looks like:
-+ All documentation about Apache Forrest is managed as a Forrest-built + project located in the site-author directory of forrest/trunk SVN. The + Apapce Forrest website is updated by generating static pages from the + site-author-project and committing them to the forrest/site SVN, which + is then 'svn checkout' on the forrest.apache.org webserver to create the + website. +
++ See other notes for the Documentation Coordinator + role. +
++ Do once, create $FORREST_HOME/deploy.svn.settings file. These + credentials are needed by forrestbot so that it can do your 'svn add' + and 'svn commit' etc. to the forrest/site/ repository. The + deploy.svn.settings file looks like: +
+Generating and publishing the main docs is very easy using a local forrestbot: -
- -+ Generating and publishing the main docs is very easy using a local + forrestbot: +
+This builds the documentation locally then deploys it by committing - it to the forrest/site SVN. - Then a cronjob on the server will automatically publish it. However, if - instant turnaround is required, then do this: -
-+ This builds the documentation locally then deploys it by committing it + to the + forrest/site + SVN. Then a cronjob on the server will automatically publish it. + However, if instant turnaround is required, then do this: +
+- Publishing documentation for a particular plugin is done by: -
-+ Publishing documentation for a particular plugin is done by: +
+- See further information in the - buildPlugin doc. -
-See some general notes about managing - project websites. -
-There have been a few explantions of our docs processing on the forrest-dev mail list. - Need to glean the info from them. Here is the content of some:
-+ See some general notes about managing + project + websites. +
++ There have been a few explantions of our docs processing on the + forrest-dev mail list. Need to glean the info from them. Here is the + content of some: +
+Some more notes that need to be integrated above ... -
-Note that forrestbot does not remove docs from the forrest/site SVN (FOR-392). - So need to manually delete: 'cd /svn/forrest/site; svn delete oldDoc'. - Then remove it from the forrestbot work directories: - 'cd $FORREST_HOME/site-author; rm build/forrest-docs/oldDoc; rm work/svn-deploy/forrest-docs/oldDoc'. -
--The generated docs are in build/forrest-docs -which is the name given to it in the forrestbot descriptor (site-author/publish.xml). -Here is a trick for reviewing changes that forrestbot is ready to deploy ... -
-+ Some more notes that need to be integrated above ... +
++ Note that forrestbot does not remove docs from the forrest/site SVN + (FOR-392). So need to manually delete: 'cd /svn/forrest/site; svn delete + oldDoc'. Then remove it from the forrestbot work directories: 'cd + $FORREST_HOME/site-author; rm build/forrest-docs/oldDoc; rm + work/svn-deploy/forrest-docs/oldDoc'. +
++ The generated docs are in build/forrest-docs which is the name given to + it in the forrestbot descriptor (site-author/publish.xml). Here is a + trick for reviewing changes that forrestbot is ready to deploy ... +
+