blob: 425054a579d16b960a32b40fb1aea41b3aac06b8 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9-dev">
<meta name="Forrest-skin-name" content="pelt">
<title>Modules</title>
<link type="text/css" href="../../../../skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="../../../../skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="../../../../skin/print.css" rel="stylesheet">
<link type="text/css" href="../../../../skin/profile.css" rel="stylesheet">
<script src="../../../../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../../../../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../../../../skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="../../../../favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
|breadtrail
+-->
<div class="breadtrail">
<a href="http://www.apache.org/">apache</a> &gt; <a href="http://lenya.apache.org/">lenya</a><script src="../../../../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
|header
+-->
<div class="header">
<!--+
|start group logo
+-->
<div class="grouplogo">
<a href=""><img class="logoImage" alt="Lenya" src="../../../../images/apache-lenya-light.png" title=""></a>
</div>
<!--+
|end group logo
+-->
<!--+
|start Project Logo
+-->
<div class="projectlogo">
<a href=""></a>
</div>
<!--+
|end Project Logo
+-->
<!--+
|start Search
+-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="lenya.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with ');" size="25" name="q" id="query" type="text" value="Search the site with ">&nbsp;
<input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
|end search
+-->
<!--+
|start Tabs
+-->
<ul id="tabs">
<li>
<a class="unselected" href="../../../../index.html">Project</a>
</li>
<li>
<a class="unselected" href="../../../../docs/index.html">Developer</a>
</li>
<li>
<a class="unselected" href="../../../../community/index.html">Community</a>
</li>
<li class="current">
<a class="selected" href="../../../../docs/2_0_x/index.html">Version 2.0</a>
</li>
<li>
<a class="unselected" href="../../../../docs/1_2_x/index.html">Version 1.2</a>
</li>
</ul>
<!--+
|end Tabs
+-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
|start Subtabs
+-->
<div id="level2tabs"></div>
<!--+
|end Endtabs
+-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
// --></script>
</div>
<!--+
|breadtrail
+-->
<div class="breadtrail">
&nbsp;
</div>
<!--+
|start Menu, mainarea
+-->
<!--+
|start Menu
+-->
<div id="menu">
<div onclick="SwitchMenu('menu_selected_1.1', '../../../../skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('../../../../skin/images/chapter_open.gif');">Version 2.0</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../../../docs/2_0_x/index.html">Index</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/faq.html">FAQs</a>
</div>
<div onclick="SwitchMenu('menu_1.1.3', '../../../../skin/')" id="menu_1.1.3Title" class="menutitle">Installation</div>
<div id="menu_1.1.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/installation/index.html">Download</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/installation/subversion.html">Subversion Access</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/installation/source_version.html">Install Instructions</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.4', '../../../../skin/')" id="menu_1.1.4Title" class="menutitle">Tutorials</div>
<div id="menu_1.1.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/newpublication/index.html">Create a Publication</a>
</div>
<div onclick="SwitchMenu('menu_1.1.4.2', '../../../../skin/')" id="menu_1.1.4.2Title" class="menutitle">Create a Resource Type</div>
<div id="menu_1.1.4.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/resourcetype/part1.html">Declaration</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/resourcetype/part2.html">Creation</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/resourcetype/part3.html">Presentation</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/resourcetype/part4.html">Editing (One-Form)</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/resourcetype/part5.html">Editing (BXE)</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.4.3', '../../../../skin/')" id="menu_1.1.4.3Title" class="menutitle">Implement a Usecase</div>
<div id="menu_1.1.4.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/usecase/part1.html">Prerequisites</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/usecase/part2.html">The Usecase</a>
</div>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/setupide/index.html">Setting up Eclipse</a>
</div>
<div onclick="SwitchMenu('menu_1.1.4.5', '../../../../skin/')" id="menu_1.1.4.5Title" class="menutitle">Proxying</div>
<div id="menu_1.1.4.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/proxy/proxying.html">Proxying</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/proxy/proxy.html">mod_proxy</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/proxy/mod_proxy_ajp.html">mod_proxy_ajp</a>
</div>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/bestpractises.html">Best Practises</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/production.html">Production Checklist</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/tutorials/tests.html">Writing Tests</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5', '../../../../skin/')" id="menu_1.1.5Title" class="menutitle">Concepts</div>
<div id="menu_1.1.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/concepts/publication.html">Publication</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/concepts/documents.html">Working with Documents</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/concepts/authoring_live.html">Authoring and Live mode</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/concepts/wysiwyg.html">WYSIWYG</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.1.6', '../../../../skin/')" id="menu_selected_1.1.6Title" class="menutitle" style="background-image: url('../../../../skin/images/chapter_open.gif');">Technical Reference</div>
<div id="menu_selected_1.1.6" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/lenya-sitemaps.html">Overview of Lenya Sitemaps</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/repository/index.html">Repository</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/ac.html">Access Control Specification</a>
</div>
<div onclick="SwitchMenu('menu_1.1.6.4', '../../../../skin/')" id="menu_1.1.6.4Title" class="menutitle">Usecase Framework</div>
<div id="menu_1.1.6.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/usecase-framework/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/usecase-framework/abstractusecase.html">AbstractUsecase</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.6.5', '../../../../skin/')" id="menu_1.1.6.5Title" class="menutitle">Publications</div>
<div id="menu_1.1.6.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/publication/configuration.html">Configuration</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/publication/publication-templating/index.html">Publication Templating</a>
</div>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/resource-types.html">Resource Types</a>
</div>
<div class="menupage">
<div class="menupagetitle">Modules</div>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/metadata.html">Meta data</a>
</div>
<div onclick="SwitchMenu('menu_1.1.6.9', '../../../../skin/')" id="menu_1.1.6.9Title" class="menutitle">Protocols</div>
<div id="menu_1.1.6.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/protocols/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/protocols/lenya.html">lenya Protocol</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/protocols/lenya-document.html">lenya-document Protocol</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/protocols/site.html">site Protocol</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/protocols/lenyadoc.html">lenyadoc Protocol</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.6.10', '../../../../skin/')" id="menu_1.1.6.10Title" class="menutitle">URLs and Links</div>
<div id="menu_1.1.6.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/urlMapping.html">URL Mapping</a>
</div>
<div class="menuitem">
<a href="../../../../docs/2_0_x/reference/link-management.html">Link Management</a>
</div>
</div>
</div>
<div class="menuitem">
<a href="../../../../apidocs/2.0/index.html">Core API</a>
</div>
<div onclick="SwitchMenu('menu_1.1.8', '../../../../skin/')" id="menu_1.1.8Title" class="menutitle">Core Modules</div>
<div id="menu_1.1.8" class="menuitemgroup">
<div onclick="SwitchMenu('menu_1.1.8.1', '../../../../skin/')" id="menu_1.1.8.1Title" class="menutitle">ac</div>
<div id="menu_1.1.8.1" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/ac/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/ac/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.2', '../../../../skin/')" id="menu_1.1.8.2Title" class="menutitle">acusecases</div>
<div id="menu_1.1.8.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/acusecases/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/acusecases/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.3', '../../../../skin/')" id="menu_1.1.8.3Title" class="menutitle">administration</div>
<div id="menu_1.1.8.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/administration/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/administration/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.4', '../../../../skin/')" id="menu_1.1.8.4Title" class="menutitle">cache</div>
<div id="menu_1.1.8.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/cache/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/cache/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.5', '../../../../skin/')" id="menu_1.1.8.5Title" class="menutitle">janitor</div>
<div id="menu_1.1.8.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/janitor/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/janitor/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.6', '../../../../skin/')" id="menu_1.1.8.6Title" class="menutitle">ldap</div>
<div id="menu_1.1.8.6" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/ldap/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/ldap/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.7', '../../../../skin/')" id="menu_1.1.8.7Title" class="menutitle">linking</div>
<div id="menu_1.1.8.7" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/linking/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/linking/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.8', '../../../../skin/')" id="menu_1.1.8.8Title" class="menutitle">observation</div>
<div id="menu_1.1.8.8" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/observation/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/observation/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.9', '../../../../skin/')" id="menu_1.1.8.9Title" class="menutitle">properties</div>
<div id="menu_1.1.8.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/properties/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/properties/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.10', '../../../../skin/')" id="menu_1.1.8.10Title" class="menutitle">sitemanagement</div>
<div id="menu_1.1.8.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/sitemanagement/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/sitemanagement/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.11', '../../../../skin/')" id="menu_1.1.8.11Title" class="menutitle">templating</div>
<div id="menu_1.1.8.11" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/templating/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/templating/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.12', '../../../../skin/')" id="menu_1.1.8.12Title" class="menutitle">usecase</div>
<div id="menu_1.1.8.12" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/usecase/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/usecase/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.8.13', '../../../../skin/')" id="menu_1.1.8.13Title" class="menutitle">workflow</div>
<div id="menu_1.1.8.13" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/workflow/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/workflow/index.html">API</a>
</div>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9', '../../../../skin/')" id="menu_1.1.9Title" class="menutitle">Standard Modules</div>
<div id="menu_1.1.9" class="menuitemgroup">
<div onclick="SwitchMenu('menu_1.1.9.1', '../../../../skin/')" id="menu_1.1.9.1Title" class="menutitle">blog</div>
<div id="menu_1.1.9.1" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/blog/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/blog/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.2', '../../../../skin/')" id="menu_1.1.9.2Title" class="menutitle">bxe</div>
<div id="menu_1.1.9.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/bxe/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/bxe/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.3', '../../../../skin/')" id="menu_1.1.9.3Title" class="menutitle">cforms</div>
<div id="menu_1.1.9.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/cforms/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/cforms/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.4', '../../../../skin/')" id="menu_1.1.9.4Title" class="menutitle">collection</div>
<div id="menu_1.1.9.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/collection/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/collection/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.5', '../../../../skin/')" id="menu_1.1.9.5Title" class="menutitle">contactform</div>
<div id="menu_1.1.9.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/contactform/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/contactform/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.6', '../../../../skin/')" id="menu_1.1.9.6Title" class="menutitle">development</div>
<div id="menu_1.1.9.6" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/development/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/development/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.7', '../../../../skin/')" id="menu_1.1.9.7Title" class="menutitle">editors</div>
<div id="menu_1.1.9.7" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/editors/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/editors/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.8', '../../../../skin/')" id="menu_1.1.9.8Title" class="menutitle">export</div>
<div id="menu_1.1.9.8" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/export/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/export/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.9', '../../../../skin/')" id="menu_1.1.9.9Title" class="menutitle">fckeditor</div>
<div id="menu_1.1.9.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/fckeditor/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/fckeditor/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.10', '../../../../skin/')" id="menu_1.1.9.10Title" class="menutitle">kupu</div>
<div id="menu_1.1.9.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/kupu/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/kupu/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.11', '../../../../skin/')" id="menu_1.1.9.11Title" class="menutitle">languageselector</div>
<div id="menu_1.1.9.11" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/languageselector/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/languageselector/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.12', '../../../../skin/')" id="menu_1.1.9.12Title" class="menutitle">lenyadoc</div>
<div id="menu_1.1.9.12" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/lenyadoc/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/lenyadoc/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.13', '../../../../skin/')" id="menu_1.1.9.13Title" class="menutitle">linkcheck</div>
<div id="menu_1.1.9.13" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/linkcheck/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/linkcheck/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.14', '../../../../skin/')" id="menu_1.1.9.14Title" class="menutitle">links</div>
<div id="menu_1.1.9.14" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/links/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/links/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.15', '../../../../skin/')" id="menu_1.1.9.15Title" class="menutitle">lucene</div>
<div id="menu_1.1.9.15" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/lucene/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/lucene/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.16', '../../../../skin/')" id="menu_1.1.9.16Title" class="menutitle">migration</div>
<div id="menu_1.1.9.16" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/migration/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/migration/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.17', '../../../../skin/')" id="menu_1.1.9.17Title" class="menutitle">neutron</div>
<div id="menu_1.1.9.17" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/neutron/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/neutron/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.18', '../../../../skin/')" id="menu_1.1.9.18Title" class="menutitle">news</div>
<div id="menu_1.1.9.18" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/news/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/news/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.19', '../../../../skin/')" id="menu_1.1.9.19Title" class="menutitle">notification</div>
<div id="menu_1.1.9.19" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/notification/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/notification/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.20', '../../../../skin/')" id="menu_1.1.9.20Title" class="menutitle">opendocument</div>
<div id="menu_1.1.9.20" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/opendocument/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/opendocument/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.21', '../../../../skin/')" id="menu_1.1.9.21Title" class="menutitle">prettyprinting</div>
<div id="menu_1.1.9.21" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/prettyprinting/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/prettyprinting/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.22', '../../../../skin/')" id="menu_1.1.9.22Title" class="menutitle">profiling</div>
<div id="menu_1.1.9.22" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/profiling/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/profiling/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.23', '../../../../skin/')" id="menu_1.1.9.23Title" class="menutitle">resource</div>
<div id="menu_1.1.9.23" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/resource/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/resource/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.24', '../../../../skin/')" id="menu_1.1.9.24Title" class="menutitle">simplesite</div>
<div id="menu_1.1.9.24" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/simplesite/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/simplesite/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.25', '../../../../skin/')" id="menu_1.1.9.25Title" class="menutitle">sitetree</div>
<div id="menu_1.1.9.25" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/sitetree/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/sitetree/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.26', '../../../../skin/')" id="menu_1.1.9.26Title" class="menutitle">sourcerepository</div>
<div id="menu_1.1.9.26" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/sourcerepository/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/sourcerepository/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.27', '../../../../skin/')" id="menu_1.1.9.27Title" class="menutitle">svg</div>
<div id="menu_1.1.9.27" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/svg/roundedcorners.html">Rounded Corners</a>
</div>
<div class="menuitem">
<a href="../../../../docs/modules/svg/resizeimages.html">Resizing Images</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/svg/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.28', '../../../../skin/')" id="menu_1.1.9.28Title" class="menutitle">tinymce</div>
<div id="menu_1.1.9.28" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/tinymce/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/tinymce/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.29', '../../../../skin/')" id="menu_1.1.9.29Title" class="menutitle">usecasedocument</div>
<div id="menu_1.1.9.29" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/usecasedocument/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/usecasedocument/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.30', '../../../../skin/')" id="menu_1.1.9.30Title" class="menutitle">webdav</div>
<div id="menu_1.1.9.30" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/webdav/index.html">Getting started</a>
</div>
<div class="menuitem">
<a href="../../../../docs/modules/webdav/monitoring.html">Monitoring</a>
</div>
<div class="menuitem">
<a href="../../../../docs/modules/webdav/webdav.html">WebDAV Servers</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/webdav/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.31', '../../../../skin/')" id="menu_1.1.9.31Title" class="menutitle">xhtml</div>
<div id="menu_1.1.9.31" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/xhtml/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/xhtml/index.html">API</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9.32', '../../../../skin/')" id="menu_1.1.9.32Title" class="menutitle">xopus</div>
<div id="menu_1.1.9.32" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/modules/xopus/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../../../../apidocs/2.0/modules/xopus/index.html">API</a>
</div>
</div>
</div>
</div>
<div id="credit">
<hr>
<a href="http://forrest.apache.org/"><img border="0" title="Built with Apache Forrest" alt="Built with Apache Forrest - logo" src="../../../../images/built-with-forrest-button.png" style="width: 88px;height: 31px;"></a>
</div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="../../../../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
|alternative credits
+-->
<div id="credit2">
<a href="http://wiki.apache.org/lenya/MeetingFreiburg2008"><img border="0" title="Meeting Freiburg 2008" alt="Meeting Freiburg 2008 - logo" src="../../../../images/apache-lenya-meeting-freiburg-2008.png" style="width: 160px;height: 40px;"></a>
</div>
</div>
<!--+
|end Menu
+-->
<!--+
|start content
+-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="index.pdf"><img alt="PDF -icon" src="../../../../skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
<h1>Modules</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#Introduction">Introduction</a>
</li>
<li>
<a href="#Implementing+a+module">Implementing a module</a>
</li>
<li>
<a href="#The+Module+Descriptor+File">The Module Descriptor File</a>
</li>
<li>
<a href="#Implementing+Usecases+in+Modules">Implementing Usecases in Modules</a>
<ul class="minitoc">
<li>
<a href="#Declaring+the+Usecase">Declaring the Usecase</a>
</li>
<li>
<a href="#Calling+the+Module+Sitemap">Calling the Module Sitemap</a>
</li>
<li>
<a href="#Adding+Menu+Items">Adding Menu Items</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<a name="N1000D"></a><a name="Introduction"></a>
<h2 class="h3">Introduction</h2>
<div class="section">
<p>
Modules are packages providing a certain set of resources or functionality.
</p>
<p>Examples:</p>
<ul>
<li>a resource type (e.g., docbook module)</li>
<li>a repository implementation (e.g., jdbc module)</li>
<li>a collection of XSLTs (e.g., content2svg module)</li>
</ul>
<p>
Some modules are included in the Lenya distribution:
</p>
<ul>
<li>
<strong>lucene</strong> - search functionality</li>
<li>
<strong>sitetree</strong> - manage documents in a tree-like structure</li>
<li>
<strong>jcr</strong> - store content in a <a href="http://www.jcp.org/en/jsr/detail?id=170">JCR</a> repository (experimental)</li>
<li>
<strong>xhtml</strong> - XHTML-based resource type</li>
<li>
<strong>links</strong> - resource type to manage link lists</li>
<li>
<strong>lenyadoc</strong> - adds the <span class="codefrag">lenyadoc://</span> protocol</li>
</ul>
</div>
<a name="N10051"></a><a name="Implementing+a+module"></a>
<h2 class="h3">Implementing a module</h2>
<div class="section">
<p>
All resources of a module are located in a single directory.
The following is an example directory structure, all files are optional
and depend on the nature of the module.
</p>
<pre class="code">
mymodule/
config/ configuration files
module.xml module descriptor
cocoon-xconf/ patches for cocoon.xconf
components.xconf
usecases/
mymodule.jx usecase view
resources/
images/ image files
css/ CSS files
schemas/ XML schemas (RNG, XSD, ...)
samples/ Samples (in case of resource type modules)
java/
src/ Java source files
test/ Java test classes
lib/ Java libraries
xslt/ XSLT stylesheets
sitemap.xmap main module sitemap
</pre>
<p>To add a module to your Lenya installation, declare it in <span class="codefrag">local.build.properties</span>:</p>
<pre class="code">
modules.root.dirs=src/modules:src/webapp/lenya/pubs/default/modules:/home/john/modules/mymodule
</pre>
<p>
When the module is deployed, the following steps are executed:
</p>
<ul>
<li>the module files are copied to <span class="codefrag">context://lenya/modules</span>
</li>
<li>Java sources are compiled, libraries are installed</li>
<li>
<span class="codefrag">cocoon.xconf</span> is patched</li>
</ul>
</div>
<a name="N1007C"></a><a name="The+Module+Descriptor+File"></a>
<h2 class="h3">The Module Descriptor File</h2>
<div class="section">
<p>
Each module must be described using a <em>module descriptor</em> XML file
<span class="codefrag">module.xml</span>, located in the <span class="codefrag">config</span> directory of the module.
The descriptor is validated when the module is deployed, so be careful! :)
</p>
<p>
A typical module descriptor looks like this:
</p>
<pre class="code">&lt;module xmlns="http://apache.org/lenya/module/1.0"&gt;
&lt;id&gt;org.myproject.lenya.modules.myeditor&lt;/id&gt;
&lt;depends module="org.apache.lenya.modules.usecase"/&gt;
&lt;depends module="org.apache.lenya.modules.webdav"/&gt;
&lt;export package="org.myproject.lenya.modules.myeditor.api"/&gt;
&lt;package&gt;org.myproject.lenya.modules&lt;/package&gt;
&lt;version&gt;0.1-dev&lt;/version&gt;
&lt;name&gt;My Own Editor&lt;/name&gt;
&lt;lenya-version&gt;2.0-dev&lt;/lenya-version&gt;
&lt;description&gt;
This is my own editor.
For more information, visit http://myproject.org/editor.
&lt;/description&gt;
&lt;/module&gt;</pre>
<p>
The <span class="codefrag">id</span> must start with the <span class="codefrag">package</span> of the module.
It is not allowed to deploy two modules with the same ID.
</p>
<p>If your module uses code from other modules, you have to add
a <span class="codefrag">&lt;depends&gt;</span> for each of these modules.</p>
<p>
The <span class="codefrag">&lt;export package="..."/&gt;</span> statement(s) declare
public packages, which means that these packages are accessible from other
modules. You should aim for long-term stability of all interfaces and classes
in exported packages, since they represent the Java API of your module.
</p>
</div>
<a name="N100AB"></a><a name="Implementing+Usecases+in+Modules"></a>
<h2 class="h3">Implementing Usecases in Modules</h2>
<div class="section">
<a name="N100B1"></a><a name="Declaring+the+Usecase"></a>
<h3 class="h4">Declaring the Usecase</h3>
<p>
For example, imagine you implement a <span class="codefrag">newsletter</span> module, containing a <span class="codefrag">send</span> usecase.
To declare usecases, add a patch file for <span class="codefrag">cocoon.xconf</span>, for instance <span class="codefrag">newsletter/config/cocoon-xconf/usecases.xconf</span>:
</p>
<pre class="code">&lt;xconf xpath="/cocoon/usecases"
unless="/cocoon/usecases/component-instance[@name = 'newsletter.send']"&gt;
&lt;component-instance name="newsletter.send"
logger="lenya.usecases.newsletter.send"
class="org.myproject.lenya.newsletter.usecases.Send"&gt;
&lt;view template="modules/newsletter/usecases/send.jx" menu="false"/&gt;
&lt;/component-instance&gt;
&lt;/xconf&gt;</pre>
<p>
As you can see in the view declaration, the JX templates are typically stored in the <span class="codefrag">&lt;module&gt;/usecases</span>
directory. The Java source files go into the <span class="codefrag">&lt;module&gt;/java/src</span> directory, they are compiled
automatically by the Lenya build process.
</p>
<a name="N100D4"></a><a name="Calling+the+Module+Sitemap"></a>
<h3 class="h4">Calling the Module Sitemap</h3>
<p>
The following URL syntax is used to make a call to a module sitemap:
</p>
<pre class="code">cocoon://modules/&lt;module&gt;/**</pre>
<p>
The module sitemap is located at <span class="codefrag">newsletter/sitemap.xmap</span>. To request
the latest newsletter and display it on the confirmation screen using the CInclude approach
(for more information, see documentation about the usecase framework), you could for instance use
the URI <span class="codefrag">cocoon://modules/newsletter/latestNewsletter.xml</span>:
</p>
<pre class="code">&lt;page:page
xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
xmlns:cinclude="http://apache.org/cocoon/include/1.0"
&gt;
&lt;page:body&gt;
&lt;h1&gt;&lt;i18n:text&gt;Send Newsletter&lt;/i18n:text&gt;&lt;/h1&gt;
&lt;form&gt;
...
&lt;jx:import uri="templates/messages.jx"/&gt;
&lt;cinclude:includexml&gt;
&lt;cinclude:src&gt;cocoon://modules/newsletter/latestNewsletter.xml&lt;/cinclude:src&gt;
&lt;/cinclude:includexml&gt;
&lt;input name="submit" type="submit" value="Send Newsletter"/&gt;
&lt;/form&gt;
&lt;/page:body&gt;
&lt;/page:page&gt;</pre>
<p>
Another useful option is to use a module URL as the usecase view, e.g. to export some XML.
Note that the attribute <span class="codefrag">uri</span> is used instead of <span class="codefrag">template</span>.
The usecase class <span class="codefrag">DummyUsecase</span> can be used because no Java code shall be
executed.
</p>
<pre class="code">&lt;xconf xpath="/cocoon/usecases"
unless="/cocoon/usecases/component-instance[@name = 'newsletter.download']"&gt;
&lt;component-instance name="newsletter.send"
logger="lenya.usecases.newsletter.send"
class="org.apache.lenya.cms.usecase.DummyUsecase"&gt;
&lt;view uri="cocoon://modules/newsletter/downloadNewsletter.xml"/&gt;
&lt;/component-instance&gt;
&lt;/xconf&gt;</pre>
<a name="N100FF"></a><a name="Adding+Menu+Items"></a>
<h3 class="h4">Adding Menu Items</h3>
<p>
A module can provide menu items which are added to the publication menu.
To insert the menu items of a module, you have to add the module declaration to <span class="codefrag">publication.xml</span>:
</p>
<pre class="code">&lt;publication&gt;
...
&lt;module name="newsletter"/&gt;
...
&lt;/publication&gt;</pre>
<p>
If there is a <span class="codefrag">menus.xmap</span> sitemap in the module's root directory, a
request of the form <span class="codefrag">&lt;area&gt;.xml</span> is sent into this sitemap.
The matching pipeline could look like this:
</p>
<pre class="code">&lt;map:match pattern="**"&gt;
&lt;map:generate type="serverpages" src="config/menu.xsp"/&gt;
&lt;map:serialize type="xml"/&gt;
&lt;/map:match&gt;
</pre>
<p>
The server page <span class="codefrag">&lt;module&gt;/config/menu.xsp</span> delivers a menu XML
which includes the items to be inserted:
</p>
<pre class="code">&lt;xsp:page ...&gt;
&lt;menu&gt;
&lt;menus&gt;
&lt;menu i18n:attr="name" name="File"&gt;
&lt;block admin="false"&gt;
&lt;item uc:usecase="newsletter.send" href="?"&gt;
&lt;i18n:text&gt;Send Newsletter&lt;/i18n:text&gt;
&lt;/item&gt;
&lt;/block&gt;
&lt;/menu&gt;
&lt;/menus&gt;
&lt;/menu&gt;
&lt;/xsp:page&gt;</pre>
</div>
</div>
<!--+
|end content
+-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
|start bottomstrip
+-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
// --></script>
</div>
<div class="copyright">
Copyright &copy;
2002-2007 <a href="http://www.apache.org/licenses/LICENSE-2.0">The Apache Software Foundation.</a>
</div>
<div id="logos"></div>
<div id="feedback">
Send feedback about the website to:
<a id="feedbackto" href="mailto:dev@lenya.apache.org?subject=Feedback%C2%A0for%C2%A0docs/2_0_x/reference/modules/index.html">dev@lenya.apache.org</a>
</div>
<!--+
|end bottomstrip
+-->
</div>
</body>
</html>