blob: ede2f76622216ee2077f8c446e606888f71fcfc7 [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>Kupu</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>
<a class="unselected" href="../../../../docs/2_0_x/index.html">Version 2.0</a>
</li>
<li class="current">
<a class="selected" 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 1.2</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../../../docs/1_2_x/index.html">Index</a>
</div>
<div onclick="SwitchMenu('menu_1.1.2', '../../../../skin/')" id="menu_1.1.2Title" class="menutitle">Installation</div>
<div id="menu_1.1.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/installation/index.html">Download</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/installation/subversion.html">Subversion Access</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/installation/source_version.html">Install Instructions</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.3', '../../../../skin/')" id="menu_1.1.3Title" class="menutitle">Tutorial</div>
<div id="menu_1.1.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/index.html">Introduction</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/understanding_lenya.html">1. Understanding Lenya</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/installing_lenya.html">2. Installing Lenya</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/anatomy_of_the_pipeline.html">3. Anatomy of the Pipeline</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/editing_in_lenya.html">4. Editing in Lenya</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/custom_navigation.html">5. Custom Navigation in Lenya</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/mod_proxy_and_lenya.html">6a. Mod Proxy and Lenya</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/tutorial/mod_proxy_and_lenya_continued.html">6b. Mod Proxy and Lenya</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.4', '../../../../skin/')" id="menu_1.1.4Title" class="menutitle">How-To</div>
<div id="menu_1.1.4" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/faq.html">FAQ</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/new_publication.html">New Publication</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/deploy_publication.html">Deploy Publication</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/look_and_feel.html">Look and Feel</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/custom_resourcetype.html">Custom Resource Type</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/new_mime_type.html">Adding Mime Types</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/site_navigation.html">Site Navigation</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/ldap_authentication.html">LDAP Authentication</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/cms_menus.html">CMS Menus</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/cms_screens.html">CMS Screens</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/search.html">Search Publications</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/external_data.html">External Data</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/how-to/unittests.html">Unit Tests</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.1.5', '../../../../skin/')" id="menu_selected_1.1.5Title" class="menutitle" style="background-image: url('../../../../skin/images/chapter_open.gif');">Components</div>
<div id="menu_selected_1.1.5" class="selectedmenuitemgroup" style="display: block;">
<div onclick="SwitchMenu('menu_1.1.5.1', '../../../../skin/')" id="menu_1.1.5.1Title" class="menutitle">Access&nbsp;Control</div>
<div id="menu_1.1.5.1" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/terms.html">Basic Terms</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/accesscontrollers.html">Access&nbsp;Controllers</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/accesscontrollerresolvers.html">Access Controller Resolvers</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/authenticators.html">Authenticators</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/authorizers.html">Authorizers</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/policymanagers.html">Policies and Policy&nbsp;Managers</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/accreditablemanagers.html">Accreditable&nbsp;Managers</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/accesscontrol/ssl.html">SSL Encryption</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.2', '../../../../skin/')" id="menu_1.1.5.2Title" class="menutitle">Authoring</div>
<div id="menu_1.1.5.2" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/authoring/adding-document-creator.html">Adding a new document creator</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/authoring/image-upload.html">Image Upload</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/authoring/openoffice.html">OpenOffice</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.3', '../../../../skin/')" id="menu_1.1.5.3Title" class="menutitle">Deployment</div>
<div id="menu_1.1.5.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/deployment/proxying.html">Proxying</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.1.5.4', '../../../../skin/')" id="menu_selected_1.1.5.4Title" class="menutitle" style="background-image: url('../../../../skin/images/chapter_open.gif');">Editors</div>
<div id="menu_selected_1.1.5.4" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/editors/htmlform.html">HTML Form Editor</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/editors/1form.html">HTML One Form Editor</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/editors/bxe.html">Bitflux Editor</a>
</div>
<div class="menupage">
<div class="menupagetitle">Kupu</div>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/editors/xopus.html">Xopus</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.5', '../../../../skin/')" id="menu_1.1.5.5Title" class="menutitle">Layout</div>
<div id="menu_1.1.5.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/layout/navigation.html">Navigation</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/layout/xhtml-templating.html">XHTML templating</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/layout/static-resources.html">Serving static resources</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/layout/lenya-menubar.html">Lenya Menubar</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.6', '../../../../skin/')" id="menu_1.1.5.6Title" class="menutitle">Publication</div>
<div id="menu_1.1.5.6" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/publication/pageenvelopemodule.html">PageEnvelopeModule</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/publication/siteTree.html">Site tree</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.7', '../../../../skin/')" id="menu_1.1.5.7Title" class="menutitle">Resource&nbsp;Types</div>
<div id="menu_1.1.5.7" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/resource-types/resource-types.html">Resource&nbsp;Types</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.8', '../../../../skin/')" id="menu_1.1.5.8Title" class="menutitle">Revision Control</div>
<div id="menu_1.1.5.8" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/revisioncontrol/revisioncontroller.html">Revision Controller</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/revisioncontrol/rcml.html">RCML</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/revisioncontrol/checkin.html">Check In</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/revisioncontrol/checkout.html">Check Out</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/revisioncontrol/version.html">Revisions</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/revisioncontrol/rollback.html">Rollback</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.9', '../../../../skin/')" id="menu_1.1.5.9Title" class="menutitle">Repository</div>
<div id="menu_1.1.5.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/repository/index.html">WebDAV Servers</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.10', '../../../../skin/')" id="menu_1.1.5.10Title" class="menutitle">Search</div>
<div id="menu_1.1.5.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/search/lucene.html">Searching with Lucene</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.11', '../../../../skin/')" id="menu_1.1.5.11Title" class="menutitle">URI Handling</div>
<div id="menu_1.1.5.11" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/uri-handling/URIParametrizer.html">URI Parametrizer</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/uri-handling/standardURI.html">URI Scheme</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/uri-handling/usecases.html">Usecases</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.12', '../../../../skin/')" id="menu_1.1.5.12Title" class="menutitle">Asset Management</div>
<div id="menu_1.1.5.12" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/asset-management/management.html">Asset Management</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.13', '../../../../skin/')" id="menu_1.1.5.13Title" class="menutitle">Link Management</div>
<div id="menu_1.1.5.13" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/link-management/link-management.html">Link Management</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.14', '../../../../skin/')" id="menu_1.1.5.14Title" class="menutitle">Meta Data</div>
<div id="menu_1.1.5.14" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/metadata/metadata.html">Meta Data Handling</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.15', '../../../../skin/')" id="menu_1.1.5.15Title" class="menutitle">Multilingual Documents</div>
<div id="menu_1.1.5.15" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/multilingual/multilingual.html">Multilingual Document Handling</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.16', '../../../../skin/')" id="menu_1.1.5.16Title" class="menutitle">Tasks</div>
<div id="menu_1.1.5.16" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/concept.html">The Task Concept</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/defining.html">Defining Tasks</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/taskaction.html">The TaskAction</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/scheduling.html">Scheduling a Task</a>
</div>
<div onclick="SwitchMenu('menu_1.1.5.16.5', '../../../../skin/')" id="menu_1.1.5.16.5Title" class="menutitle">Included tasks</div>
<div id="menu_1.1.5.16.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/anttask.html">AntTask</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/publisher.html">DefaultFilePublisher</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/exporter.html">StaticHTMLExporter</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/mailtask.html">MailTask</a>
</div>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/tasks/development.html">Developing Tasks</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.17', '../../../../skin/')" id="menu_1.1.5.17Title" class="menutitle">Workflow</div>
<div id="menu_1.1.5.17" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/workflow/terms.html">Terms</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/workflow/state-machine.html">The State Machine</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/workflow/configuration.html">Configuration</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/workflow/implementation.html">Implementation</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5.18', '../../../../skin/')" id="menu_1.1.5.18Title" class="menutitle">Site Management</div>
<div id="menu_1.1.5.18" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/archive.html">Archive</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/copy.html">Copy</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/deactivate.html">Deactivate</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/delete.html">Delete</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/deletetrash.html">Delete the trash</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/move.html">Move</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/moveupdown.html">Move Up/Down</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/rename.html">Rename</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/components/sitemanagement/restore.html">Restore</a>
</div>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.6', '../../../../skin/')" id="menu_1.1.6Title" class="menutitle">Miscellaneous</div>
<div id="menu_1.1.6" class="menuitemgroup">
<div class="menuitem">
<a href="../../../../docs/1_2_x/misc/namespaces.html">Namespaces</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/misc/reserved_names.html">Reserved Names</a>
</div>
<div class="menuitem">
<a href="../../../../docs/1_2_x/misc/xinclude-processor.html">XInclude Processor</a>
</div>
</div>
<div class="menuitem">
<a href="../../../../apidocs/1.2/index.html">1.2 API (Javadoc)</a>
</div>
</div>
<div id="credit"></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="kupu.pdf"><img alt="PDF -icon" src="../../../../skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
<h1>Kupu</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#Kupu+as+a+sample+for+integrating+editors+in+general">Kupu as a sample for integrating editors in general</a>
</li>
<li>
<a href="#What+integrating+an+editor+is+all+about">What integrating an editor is all about</a>
</li>
<li>
<a href="#The+Kupu+usecase+pipeline+in+detail">The Kupu usecase pipeline in detail</a>
<ul class="minitoc">
<li>
<a href="#step%3D%22open%22">step="open"</a>
</li>
<li>
<a href="#step%3D%22content%22">step="content"</a>
</li>
<li>
<a href="#step%3D%22save%22">step="save"</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<p>Kupu is a browser based WYSIWYG XHTML editor which is developed independently of Lenya by <a href="http://www.oscom.org/">OSCOM</a>
and is available at <a href="http://kupu.oscom.org/"> http://kupu.oscom.org/</a>. Kupu can and actually is being used in other projects as well, that have nothing to do with
Java, XML or the Apache software stack. Lenya is just prepared for the Kupu Editor to be plugged in, and ships with Kupu pre-installed. </p>
<a name="N10019"></a><a name="Kupu+as+a+sample+for+integrating+editors+in+general"></a>
<h2 class="h3">Kupu as a sample for integrating editors in general</h2>
<div class="section">
<p>Understanding the Kupu integration in Lenya is helpful to understand how editors are integrated into Lenya at all. This knowledge is
important if you are looking into changing the way Kupu is used inside Lenya or if you are thinking about taking any other editor and integrate it in Lenya. </p>
</div>
<a name="N10022"></a><a name="What+integrating+an+editor+is+all+about"></a>
<h2 class="h3">What integrating an editor is all about</h2>
<div class="section">
<p>From the user's perspective using an editor in Lenya works like this: </p>
<ol>
<li>
<p>Navigate to the item that is to be edited </p>
</li>
<li>
<p>Click on a link to start the editing process (mostly from a pull-down menu, but there are other options) </p>
</li>
<li>
<p>Edit </p>
</li>
<li>
<p>Save </p>
</li>
<li>
<p>Enjoy the changes </p>
</li>
</ol>
<p>The link to start the editing is nohting but a GET request to an editing usecase. (See: [<a href="http://wiki.apache.org/lenya/CreatePageWalkthrough">CreatePageWalkthrough</a>]
for some background on Usecases). The reply to that request is the page that contains the editor with the to be edited file loaded.
As simple as that sounds, there is a number of things Lenya has to go through. </p>
<p>Between Step 2. and 3. (the user clicking on 'Edit' and the editor showing up) Lenya has to </p>
<ol>
<li>
<p>Make sure the editor is installed at all </p>
</li>
<li>
<p>Determine the file to be edited </p>
</li>
<li>
<p>Make sure editing is allowed (i.e. the file is not checked out reserved by someone else) </p>
</li>
<li>
<p>Aggregate the content that is to be edited, the editor part of the page itself and whatever parameter the editor needs and serve it to the browser. </p>
</li>
</ol>
<p>Between Step 3. and 4. (Edit and Save) Lenya has to </p>
<ol>
<li>
<p>Make sure the file is still checked out so it can be edited </p>
</li>
<li>
<p>Extract the edited page content from the HTTP POST </p>
</li>
<li>
<p>Save the edited file </p>
</li>
<li>
<p>Check in the edited file </p>
</li>
<li>
<p>Trigger and workflow events on the document that belong to the "edit" event. </p>
</li>
</ol>
<p>
<em>Note: Kupu allows the user to Save in between and continue editing. This is achieved by using HTTP POST operations. Thus Lenya needs to be prepared to
receive multiple updates of the same page and save it before the user might click on 'Exit and Save' so that Step 5 (Display the changed page) is finally triggered.</em>
</p>
</div>
<a name="N1008C"></a><a name="The+Kupu+usecase+pipeline+in+detail"></a>
<h2 class="h3">The Kupu usecase pipeline in detail</h2>
<div class="section">
<a name="N10092"></a><a name="step%3D%22open%22"></a>
<h3 class="h4">step="open"</h3>
<pre class="code">
&lt;map:match pattern="kupu" type="usecase"&gt;
&lt;map:match pattern="open" type="step"&gt;
&lt;map:match pattern="*/authoring/**.html"&gt;
&lt;!-- Check for Kupu--&gt;
&lt;map:act type="resource-exists" src="resources/kupu/common/kupueditor.js"&gt;
&lt;map:act type="reserved-checkout"&gt;
&lt;map:generate type="serverpages" src="content/rc/{exception}.xsp"&gt;
&lt;map:parameter name="user" value="{user}"/&gt;
&lt;map:parameter name="filename" value="{filename}"/&gt;
&lt;map:parameter name="date" value="{date}"/&gt;
&lt;map:parameter name="message" value="{message}"/&gt;
&lt;/map:generate&gt;
&lt;map:transform src="xslt/rc/rco-exception.xsl"/&gt;
&lt;map:call resource="style-cms-page"/&gt;
&lt;/map:act&gt;
&lt;map:generate src="resources/kupu/apache-lenya/kupumacros.html"/&gt;
&lt;map:transform src="resources/kupu/apache-lenya/kupumacros-xhtml.xsl"&gt;
&lt;map:parameter name="contentfile" value="{page-envelope:context-prefix}/{../1}/authoring/{../2}.html?lenya.usecase=kupu&amp;amp;lenya.step=content"/&gt;
&lt;map:parameter name="context" value="{request:contextPath}"/&gt;
&lt;map:parameter name="document-path" value="{page-envelope:document-path}"/&gt;
&lt;map:parameter name="root" value="{page-envelope:context-prefix}"/&gt;
&lt;map:parameter name="save-destination" value="{page-envelope:context-prefix}/{../1}/authoring/{../2}.html?lenya.usecase=kupu&amp;amp;lenya.step=save"/&gt;
&lt;map:parameter name="reload-on-save" value="0"/&gt; &lt;!-- 1 means you can see the saving --&gt;
&lt;map:parameter name="use-css" value="1"/&gt;
&lt;map:parameter name="redirect-to" value="{page-envelope:document-name}.html"/&gt;
&lt;/map:transform&gt;
&lt;map:serialize type="html"/&gt;
&lt;/map:act&gt;
&lt;map:generate src="resources/misc/kupu/download.xhtml"/&gt;
&lt;map:call resource="style-cms-page"/&gt;
&lt;/map:match&gt;
&lt;/map:match&gt;
</pre>
<a name="N1009C"></a><a name="step%3D%22content%22"></a>
<h3 class="h4">step="content"</h3>
<pre class="code">
&lt;map:match pattern="content" type="step"&gt;
&lt;map:match pattern="*/authoring/**.html"&gt;
&lt;map:generate src="pubs/{1}/content/authoring/{page-envelope:document-path}"/&gt;
&lt;map:transform src="resources/kupu/apache-lenya/kupucontent-xhtml.xsl"&gt;
&lt;map:parameter name="css" value="{page-envelope:context-prefix}/{1}/authoring/css/page.css"/&gt;
&lt;/map:transform&gt;
&lt;map:transform src="xslt/util/strip_namespaces.xsl"/&gt;
&lt;map:serialize type="xhtml"/&gt;
&lt;/map:match&gt;
&lt;/map:match&gt;
</pre>
<a name="N100A6"></a><a name="step%3D%22save%22"></a>
<h3 class="h4">step="save"</h3>
<pre class="code">
&lt;map:match pattern="save" type="step"&gt;
&lt;map:select type="request-method"&gt;
&lt;map:when test="PUT"&gt;
&lt;map:act type="reserved-checkout-test"&gt;
&lt;map:generate type="serverpages" src="../../content/rc/{exception}.xsp"&gt;
&lt;map:parameter name="user" value="{user}"/&gt;
&lt;map:parameter name="filename" value="{filename}"/&gt;
&lt;map:parameter name="date" value="{date}"/&gt;
&lt;map:parameter name="message" value="{message}"/&gt;
&lt;/map:generate&gt;
&lt;map:transform src="../../xslt/rc/rco-exception.xsl"/&gt;
&lt;map:call resource="style-cms-page"/&gt;
&lt;/map:act&gt;
&lt;map:aggregate element="edit-envelope"&gt;
&lt;map:part element="edited" src="cocoon:/kupu-stream"/&gt;
&lt;map:part element="original" src="pubs/{page-envelope:publication-id}/content/authoring/{page-envelope:document-path}"/&gt;
&lt;/map:aggregate&gt;
&lt;map:transform src="resources/kupu/apache-lenya/kupusave-xhtml.xsl"/&gt;
&lt;map:act type="reserved-checkin"&gt;
&lt;map:generate src="content/rc/{exception}.xsp" type="serverpages"&gt;
&lt;map:parameter name="user" value="{user}"/&gt;
&lt;map:parameter name="filename" value="{filename}"/&gt;
&lt;map:parameter name="checkType" value="{checkType}"/&gt;
&lt;map:parameter name="date" value="{date}"/&gt;
&lt;map:parameter name="message" value="{message}"/&gt;
&lt;/map:generate&gt;
&lt;map:transform src="xslt/rc/rco-exception.xsl"/&gt;
&lt;map:serialize/&gt;
&lt;/map:act&gt;
&lt;map:transform src="xslt/authoring/edit/addSourceTags.xsl"&gt;
&lt;map:parameter name="source" value="pubs/{page-envelope:publication-id}/content/authoring/{page-envelope:document-path}"/&gt;
&lt;/map:transform&gt;
&lt;map:transform type="write-source"/&gt;
&lt;!-- Trigger workflow with *edit* action --&gt;
&lt;map:act type="workflow"&gt;
&lt;map:parameter name="area" value="{page-envelope:area}"/&gt;
&lt;map:parameter name="document-id" value="{page-envelope:document-id}"/&gt;
&lt;map:parameter name="language" value="{page-envelope:document-language}"/&gt;
&lt;map:parameter name="event" value="edit"/&gt;
&lt;/map:act&gt;
&lt;map:serialize type="xml" status-code="204"/&gt;
&lt;/map:when&gt;
&lt;/map:select&gt;
&lt;/map:match&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="feedback">
Send feedback about the website to:
<a id="feedbackto" href="mailto:dev@lenya.apache.org?subject=Feedback%C2%A0for%C2%A0docs/1_2_x/components/editors/kupu.html">dev@lenya.apache.org</a>
</div>
<!--+
|end bottomstrip
+-->
</div>
</body>
</html>