gcasper 2003/08/20 08:26:43
Added: src/blocks/webdav/samples/flowsample edit.js new.xml
sitemap.xmap
src/blocks/webdav/samples/flowsample/repo contentA.xml
contentA.xml.meta
src/blocks/webdav/samples/flowsample/repo/dir1 contentB.xml
contentB.xml.meta contentC.xml contentC.xml.meta
src/blocks/webdav/samples/flowsample/repo/dir2 contentA.xml
contentA.xml.meta contentB.xml contentB.xml.meta
contentC.xml contentC.xml.meta
src/blocks/webdav/samples/flowsample/repo/dir2/subdir1
contentA.xml contentA.xml.meta
src/blocks/webdav/samples/flowsample/styles dir2html.xsl
file2html.xsl new2html.xsl request2data.xsl
request2meta.xsl
Log:
Added WebDAV sample using flow
TODO: move to a repository abstraction like Linotype's once that has
stabilized
Revision Changes Path
1.1 cocoon-2.1/src/blocks/webdav/samples/flowsample/edit.js
Index: edit.js
===================================================================
function editPage() {
var page = cocoon.parameters["page"];
var repoUri = cocoon.parameters["repo"];
var editPage = "editpage/" + page;
var docUri = "repo/" + page;
cocoon.sendPageAndWait(editPage, {});
writeDoc(repoUri+docUri, "getdata");
writeDoc(repoUri+docUri+".meta", "getmetadata");
var dir = docUri.substring(0, docUri.lastIndexOf("/")+1);
cocoon.sendPage(dir, {});
}
function newPage() {
var dir = cocoon.parameters["dir"];
var repoUri = cocoon.parameters["repo"];
cocoon.sendPageAndWait("newpage", {});
var page = cocoon.request.getParameter("filename");
var docUri = dir+page;
writeDoc(repoUri+docUri, "getdata");
writeDoc(repoUri+docUri+".meta", "getmetadata");
cocoon.sendPage(dir, {});
}
function writeDoc(doc, pipeline) {
var resolver = null;
var source = null;
var output = null;
try {
resolver =
cocoon.getComponent(Packages.org.apache.excalibur.source.SourceResolver.ROLE);
source = resolver.resolveURI(doc);
if (source instanceof
Packages.org.apache.excalibur.source.ModifiableSource) {
output = source.getOutputStream();
cocoon.processPipelineTo(pipeline, {}, output);
output.close();
} else {
cocoon.log.error("Cannot write to " + doc + ": not a modifiable
source");
}
} catch (error) {
cocoon.log.error("Error getting output stream: " + error);
} finally {
if (source != null) resolver.release(source);
cocoon.releaseComponent(resolver);
if (output != null) {
try {
output.close();
} catch (error) {
cocoon.log.error("Error closing output stream: " + error);
}
}
}
}
1.1 cocoon-2.1/src/blocks/webdav/samples/flowsample/new.xml
Index: new.xml
===================================================================
<?xml version="1.0"?>
<page>
<page>
<title>Title</title>
<content>
<para>Paragraph 1</para>
<para>Paragraph 2</para>
</content>
</page>
<metapage>
<author>you</author>
<category></category>
<state>new</state>
</metapage>
</page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/sitemap.xmap
Index: sitemap.xmap
===================================================================
<?xml version="1.0"?>
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
<map:components>
<map:generators default="file">
<map:generator name="traverse"
src="org.apache.cocoon.generation.TraversableGenerator"/>
<map:generator name="jx"
src="org.apache.cocoon.generation.JXTemplateGenerator"/>
</map:generators>
<map:transformers default="xslt">
<map:transformer name="jx"
src="org.apache.cocoon.transformation.JXTemplateTransformer"/>
</map:transformers>
</map:components>
<map:flow language="javascript">
<map:script src="edit.js"/>
</map:flow>
<map:pipelines>
<map:component-configurations>
<global-variables>
<staging></staging>
<!--staging>webdav://localhost/webdav/flowsample/</staging-->
</global-variables>
</map:component-configurations>
<map:pipeline>
<map:match pattern="**/*.kont">
<map:call continuation="{2}"/>
</map:match>
<map:match pattern="**/new">
<map:call function="newPage">
<map:parameter name="dir" value="{1}/"/>
<map:parameter name="repo" value="{global:staging}"/>
</map:call>
</map:match>
<map:match pattern="repo/">
<map:generate type="traverse" src="{global:staging}repo/">
<map:parameter name="exclude" value="[\w]*.meta"/>
</map:generate>
<map:transform src="{global:staging}styles/dir2html.xsl"/>
<map:serialize type="html"/>
</map:match>
<map:match pattern="repo/**/">
<map:generate type="traverse" src="{global:staging}repo/{1}/">
<map:parameter name="exclude" value="[\w]*.meta"/>
</map:generate>
<map:transform src="{global:staging}styles/dir2html.xsl"/>
<map:serialize type="html"/>
</map:match>
<map:match pattern="repo/**">
<map:call function="editPage">
<map:parameter name="page" value="{1}"/>
<map:parameter name="repo" value="{global:staging}"/>
</map:call>
</map:match>
<map:match pattern="editpage/**">
<map:aggregate element="page">
<map:part src="cocoon:/page/{1}"/>
<map:part src="cocoon:/metapage/{1}"/>
</map:aggregate>
<map:transform src="{global:staging}styles/file2html.xsl"/>
<map:transform type="jx"/>
<map:serialize type="html"/>
</map:match>
<map:match pattern="page/**">
<map:generate src="{global:staging}repo/{1}"/>
<map:serialize type="xml"/>
</map:match>
<map:match pattern="metapage/**">
<map:generate src="{global:staging}repo/{1}.meta"/>
<map:serialize type="xml"/>
</map:match>
<map:match pattern="newpage">
<map:generate src="{global:staging}new.xml"/>
<map:transform src="{global:staging}styles/new2html.xsl"/>
<map:transform type="jx"/>
<map:serialize type="html"/>
</map:match>
<map:match pattern="getdata">
<map:generate type="request"/>
<map:transform src="{global:staging}styles/request2data.xsl"/>
<map:serialize type="xml"/>
</map:match>
<map:match pattern="getmetadata">
<map:generate type="request"/>
<map:transform src="{global:staging}styles/request2meta.xsl"/>
<map:serialize type="xml"/>
</map:match>
</map:pipeline>
</map:pipelines>
</map:sitemap>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/contentA.xml
Index: contentA.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<page>
<title>Page A</title>
<content>
<para>Paragraph 1</para>
<para>Paragraph 2</para>
</content>
</page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/contentA.xml.meta
Index: contentA.xml.meta
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<metapage>
<author>me</author>
<category>cat A</category>
<state>edited</state>
</metapage>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir1/contentB.xml
Index: contentB.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<page>
<title>contentB</title>
<content>
<para>First Paragraph</para>
<para>Second Paragraph</para>
</content>
</page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir1/contentB.xml.meta
Index: contentB.xml.meta
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<metapage>
<author>me</author>
<category>cat B</category>
<state>edited</state>
</metapage>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir1/contentC.xml
Index: contentC.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<page>
<title>contentC</title>
<content>
<para>First Paragraph</para>
<para>Second Paragraph</para>
</content>
</page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir1/contentC.xml.meta
Index: contentC.xml.meta
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<metapage>
<author>me</author>
<category>Other Category</category>
<state>edited</state>
</metapage>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/contentA.xml
Index: contentA.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<page>
<title>contentA</title>
<content>
<para>Paragraph 1.1</para>
<para>Paragraph 2.1</para>
</content>
</page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/contentA.xml.meta
Index: contentA.xml.meta
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<metapage>
<author>me</author>
<category>cat A</category>
<state>edited</state>
</metapage>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/contentB.xml
Index: contentB.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<page>
<title>Content B</title>
<content>
<para>First Paragraph</para>
<para>Second Paragraph</para>
</content>
</page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/contentB.xml.meta
Index: contentB.xml.meta
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<metapage>
<author>me</author>
<category>cat B</category>
<state>edited</state>
</metapage>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/contentC.xml
Index: contentC.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<page>
<title>content</title>
<content>
<para>Paragraph 1</para>
<para>Paragraph 2</para>
<para>Paragraph 3</para>
<para>Paragraph 4</para>
</content>
</page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/contentC.xml.meta
Index: contentC.xml.meta
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<metapage>
<author>you</author>
<category>other</category>
<state>edited</state>
</metapage>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/subdir1/contentA.xml
Index: contentA.xml
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<page><title>Content A</title><content><para>Paragraph
1</para><para>Paragraph 2</para></content></page>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/repo/dir2/subdir1/contentA.xml.meta
Index: contentA.xml.meta
===================================================================
<?xml version="1.0" encoding="UTF-8"?>
<metapage><author>you</author><category>docs</category><state>new</state></metapage>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/styles/dir2html.xsl
Index: dir2html.xsl
===================================================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:collection="http://apache.org/cocoon/collection/1.0">
<xsl:template match="/collection:collection">
<html>
<body>
<a href="../">Up</a>
<br/><br/>
Files:
<ul>
<xsl:apply-templates select="collection:resource"/>
</ul>
<a href="new">new file</a>
<br /><br /><br /><br />
Folders:
<ul>
<xsl:apply-templates select="collection:collection"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="collection:resource">
<li><a href="[EMAIL PROTECTED]"><xsl:value-of select="@name"/></a></li>
</xsl:template>
<xsl:template match="collection:collection">
<li><a href="[EMAIL PROTECTED]/"><xsl:value-of select="@name"/></a></li>
</xsl:template>
</xsl:stylesheet>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/styles/file2html.xsl
Index: file2html.xsl
===================================================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/page">
<html>
<body>
<a href="./">Back to directory listing</a>
<br/>
<form method="get">
<xsl:attribute name="action">${continuation.id}.kont</xsl:attribute>
<p>Title:<br />
<input name="title" type="text" size="30" maxlength="30"
value="{page/title}" />
</p>
<xsl:apply-templates select="metapage"/>
<xsl:apply-templates select="page/content/para"/>
<input type="submit" value="Submit" />
<input type="reset" value="Reset" />
</form>
</body>
</html>
</xsl:template>
<xsl:template match="page/content/para">
<p>para:<br />
<textarea name="para" cols="50" rows="10">
<!--xsl:value-of select="normalize-space(.)"/-->
<xsl:copy-of select="node()"/>
</textarea>
</p>
</xsl:template>
<xsl:template match="metapage">
<p>Author:<br />
<input name="author" type="text" size="30" maxlength="30"
value="{author}" />
</p>
<p>Category:<br />
<input name="category" type="text" size="30" maxlength="30"
value="{category}" />
</p>
<p>State:<br />
<input name="state" type="text" size="30" maxlength="30" value="{state}"
/>
</p>
</xsl:template>
</xsl:stylesheet>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/styles/new2html.xsl
Index: new2html.xsl
===================================================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/page">
<html>
<body>
<a href="./">Back to directory listing</a>
<br/>
<form method="get">
<xsl:attribute name="action">${continuation.id}.kont</xsl:attribute>
<p>Filename:<br />
<input name="filename" type="text" size="30" maxlength="30" value=""
/>
</p>
<p>Title:<br />
<input name="title" type="text" size="30" maxlength="30"
value="{page/title}" />
</p>
<xsl:apply-templates select="metapage"/>
<xsl:apply-templates select="page/content/para"/>
<input type="submit" value="Submit" />
<input type="reset" value="Reset" />
</form>
</body>
</html>
</xsl:template>
<xsl:template match="page/content/para">
<p>para:<br />
<textarea name="para" cols="50" rows="10">
<!--xsl:value-of select="normalize-space(.)"/-->
<xsl:copy-of select="node()"/>
</textarea>
</p>
</xsl:template>
<xsl:template match="metapage">
<p>Author:<br />
<input name="author" type="text" size="30" maxlength="30"
value="{author}" />
</p>
<p>Category:<br />
<input name="category" type="text" size="30" maxlength="30"
value="{category}" />
</p>
<p>State:<br />
<input name="state" type="text" size="30" maxlength="30" value="{state}"
/>
</p>
</xsl:template>
</xsl:stylesheet>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/styles/request2data.xsl
Index: request2data.xsl
===================================================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:req="http://apache.org/cocoon/request/2.0">
<xsl:template match="/req:request">
<page>
<xsl:apply-templates select="req:requestParameters"/>
</page>
</xsl:template>
<xsl:template match="req:requestParameters">
<xsl:apply-templates select="req:[EMAIL PROTECTED]'title']"/>
<xsl:apply-templates select="req:[EMAIL PROTECTED]'para']"/>
</xsl:template>
<xsl:template match="req:[EMAIL PROTECTED]'title']">
<title>
<xsl:value-of select="req:value"/>
</title>
</xsl:template>
<xsl:template match="req:[EMAIL PROTECTED]'para']">
<content>
<xsl:for-each select="req:value">
<para><xsl:value-of select="normalize-space(.)"/></para>
</xsl:for-each>
</content>
</xsl:template>
</xsl:stylesheet>
1.1
cocoon-2.1/src/blocks/webdav/samples/flowsample/styles/request2meta.xsl
Index: request2meta.xsl
===================================================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:req="http://apache.org/cocoon/request/2.0">
<xsl:template match="/req:request">
<metapage>
<xsl:apply-templates select="req:requestParameters"/>
</metapage>
</xsl:template>
<xsl:template match="req:requestParameters">
<xsl:apply-templates select="req:[EMAIL PROTECTED]'author']"/>
<xsl:apply-templates select="req:[EMAIL PROTECTED]'state']"/>
<xsl:apply-templates select="req:[EMAIL PROTECTED]'category']"/>
</xsl:template>
<xsl:template match="req:[EMAIL PROTECTED]'title']">
<title>
<xsl:value-of select="req:value"/>
</title>
</xsl:template>
<xsl:template match="req:[EMAIL PROTECTED]'author']">
<author>
<xsl:value-of select="req:value"/>
</author>
</xsl:template>
<xsl:template match="req:[EMAIL PROTECTED]'state']">
<state>
<xsl:value-of select="req:value"/>
</state>
</xsl:template>
<xsl:template match="req:[EMAIL PROTECTED]'category']">
<category>
<xsl:value-of select="req:value"/>
</category>
</xsl:template>
</xsl:stylesheet>