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>
  
  
  

Reply via email to