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>