Module categories:
==================

The modules in Lenya are currently split up into the following categories:

* modules-core
  This set of modules implements the core functionality of Lenya.
  Modules in the core will not have any dependencies outside of the core.


* modules
  This is where most of the add-on functionality goes: support for specific 
  editors, document types, the nifty new feature of the day, etc.


Directory Layout:
=================

Each module should adhere to the following directory layout (subdirectories
if appropriate, take a look at the core modules if in doubt):

mymodule/
  config/                    configuration files
    module.xml               module descriptor
    cocoon-xconf/            patches for cocoon.xconf:
      component-mycomponent.xconf
      usecase-myusecase.xconf     
  usecases/
    myusecase.jx             usecase view
  java/
    src/                     Java source files
    lib/                     Java libraries
  xslt/                      XSLT stylesheets
  sitemap.xmap               main module sitemap


module.xml
==========

Each module must contain a description file config/module.xml:

<module xmlns="http://apache.org/lenya/module/1.0">
  <!-- the ID *must* start with the package name of 
       your custom Java code -->
  <id>org.myproject.lenya.modules.myeditor</id>
  <!-- build dependencies; see note below -->
  <depends module="org.apache.lenya.modules.usecase"/>
  <depends module="org.apache.lenya.modules.webdav"/>
  <!-- the Java package your module belongs to -->
FIXME: why is this needed? afaiu it could be gleaned from the id...
  <package>org.myproject.lenya.modules</package>
  <!-- a version string -->
FIXME: what does this do? just for information, or is there version
management?
  <version>0.1-dev</version>
  <!-- a short name for your module -->
  <name>My Own Editor</name>
  <!-- the required lenya version -->
FIXME: is this actually used?
  <lenya-version>2.0-dev</lenya-version>
  <!-- a detailed description of your module -->
  <description>
    This is my own editor.
    For more information, visit http://myproject.org/editor.
  </description>
</module>

NOTE: be careful to specify the depencies correctly. The <depends/> element
is meant for java code dependencies only, i.e. issues that affect
compilation. If a module merely links to another module's usecases in its
views, that does not qualify as a dependency (although maybe it should at
some point in the future).


see also:
=========

Please refer to the online docs at
http://lenya.apache.org/docs/1_4/reference/modules/index.html.
