You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2002/02/09 05:16:39 UTC

cvs commit: xml-cocoon2/src/webapp/docs/samples/xsp-js hello.xsp request-test.xsp simple.xsp

vgritsenko    02/02/08 20:16:39

  Modified:    .        build.xml
               src/java/org/apache/cocoon cocoon.roles
               src/webapp cocoon.xconf sitemap.xmap
               src/webapp/docs/samples/xsp logicsheet.xsp
  Added:       src/java/org/apache/cocoon/components/language/markup/xsp
                        JSGenerator.java
               src/java/org/apache/cocoon/components/language/markup/xsp/javascript
                        request.xsl response.xsl xsp.xsl
               src/webapp/docs/samples/xsp-js hello.xsp request-test.xsp
                        simple.xsp
  Log:
  Add Javascript XSP markup language
  
  Revision  Changes    Path
  1.163     +0 -2      xml-cocoon2/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/build.xml,v
  retrieving revision 1.162
  retrieving revision 1.163
  diff -u -r1.162 -r1.163
  --- build.xml	9 Feb 2002 03:34:13 -0000	1.162
  +++ build.xml	9 Feb 2002 04:16:38 -0000	1.163
  @@ -663,8 +663,6 @@
   
           <exclude name="**/CompiledJavascript*" unless="rhino.compiler.present"/>
   
  -        <exclude name="**/Javascript*"         unless="rhino.interpreter.present"/>
  -        <exclude name="**/javascript/**"       unless="rhino.interpreter.present"/>
           <exclude name="**/xsp/JSGenerator**"   unless="rhino.interpreter.present"/>
   
           <exclude name="**/components/resolver/ResolverImpl.java" unless="resolver.present"/>
  
  
  
  1.8       +1 -0      xml-cocoon2/src/java/org/apache/cocoon/cocoon.roles
  
  Index: cocoon.roles
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/cocoon.roles,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- cocoon.roles	6 Feb 2002 18:22:28 -0000	1.7
  +++ cocoon.roles	9 Feb 2002 04:16:38 -0000	1.8
  @@ -71,6 +71,7 @@
           shorthand="programming-languages"
           default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector">
       <hint shorthand="java-language" class="org.apache.cocoon.components.language.programming.java.JavaLanguage"/>
  +    <hint shorthand="js-language" class="org.apache.cocoon.components.language.programming.javascript.JavascriptLanguage"/>
     </role>
   
     <role name="org.apache.cocoon.components.language.generator.ProgramGenerator"
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/JSGenerator.java
  
  Index: JSGenerator.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache Cocoon" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.cocoon.components.language.markup.xsp;
  
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.parameters.Parameters;
  
  import org.apache.cocoon.ProcessingException;
  import org.apache.cocoon.components.language.LanguageException;
  import org.apache.cocoon.environment.SourceResolver;
  import org.apache.cocoon.generation.AbstractServerPage;
  import org.apache.cocoon.xml.XMLizable;
  
  import org.mozilla.javascript.Context;
  import org.mozilla.javascript.ImporterTopLevel;
  import org.mozilla.javascript.JavaScriptException;
  import org.mozilla.javascript.Script;
  import org.mozilla.javascript.Scriptable;
  import org.w3c.dom.Node;
  import org.xml.sax.ContentHandler;
  import org.xml.sax.SAXException;
  import org.xml.sax.helpers.AttributesImpl;
  
  import java.io.File;
  import java.io.FileReader;
  import java.io.IOException;
  import java.util.Collection;
  import java.util.Date;
  import java.util.Locale;
  import java.util.Map;
  
  /**
   * Class representing interpreted XSP-generated
   * <code>ServerPagesGenerator</code> programs
   * written in Javascript language
   *
   * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
   * @version CVS $Id: JSGenerator.java,v 1.1 2002/02/09 04:16:38 vgritsenko Exp $
   */
  public class JSGenerator extends XSPGenerator
          implements Configurable, Initializable {
  
      /**
       * Javascript source file
       */
      private File file;
  
      private Scriptable global;
  
      // FIXME: Use Store to cache compiled scripts
      private Script script;
  
  
      public void configure(Configuration configuration) throws ConfigurationException {
          this.file = new File(configuration.getChild("file").getValue());
          AbstractServerPage.dateCreated = this.file.lastModified();
  
          // FIXME
          AbstractServerPage.dependencies = new File[]{};
      }
  
      public void initialize() throws Exception {
          Context context = Context.enter();
          try {
              global = new ImporterTopLevel(context);
              global.put("page", global, Context.toObject(this, global));
              global.put("logger", global, Context.toObject(getLogger(), global));
              global.put("jsAttr", global, Context.toObject(new AttributesImpl(), global));
  
              context.setOptimizationLevel(-1);
              if (getLogger().isDebugEnabled()) {
                  getLogger().debug("Compiling script " + file);
              }
              System.out.println("Compiling script " + file);
              script = context.compileReader(global, new FileReader(file), file.toString(), 1, null);
          } finally {
              Context.exit();
          }
      }
  
      public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
              throws ProcessingException, SAXException, IOException {
          super.setup(resolver, objectModel, src, par);
  
          Context context = Context.enter();
          try {
              global.put("objectModel", global, Context.toObject(this.objectModel, global));
              global.put("request", global, Context.toObject(this.request, global));
              global.put("response", global, Context.toObject(this.response, global));
              global.put("context", global, Context.toObject(this.context, global));
              global.put("resolver", global, Context.toObject(this.resolver, global));
              global.put("parameters", global, Context.toObject(this.parameters, global));
          } finally {
              Context.exit();
          }
      }
  
      public void generate() throws IOException, ProcessingException {
          Context context = Context.enter();
          try {
              global.put("contentHandler", global, Context.toObject(this.contentHandler, global));
  
              context.setOptimizationLevel(-1);
  
              if (getLogger().isDebugEnabled()) {
                  getLogger().debug("Executing script " + file);
              }
              System.out.println("Executing script " + file);
  
              script.exec(context, global);
          } catch (JavaScriptException e) {
              throw new ProcessingException("generate: Got Javascript exception", e);
          } finally {
              Context.exit();
          }
      }
  
      public void recycle() {
          global.delete("contentHandler");
  
          global.delete("objectModel");
          global.delete("request");
          global.delete("response");
          global.delete("context");
          global.delete("resolver");
          global.delete("parameters");
  
          super.recycle();
      }
  
      public void dispose() {
          script = null;
          global = null;
      }
  
      // Helper methods accessible from script
  
      /**
       * Add an attribute
       *
       * @param attr The attribute list to add to
       * @param name The attribute name
       * @param value The attribute value
       */
      public void jsAttribute(AttributesImpl attr, String name, String value) {
          attr.addAttribute("", name, name, "CDATA", value);
      }
  
      /**
       * Start an element
       *
       * @param name The element name
       * @param attr The element attributes
       */
      public void jsStart(String name, AttributesImpl attr) throws SAXException {
          this.contentHandler.startElement("", name, name, attr);
          attr.clear();
      }
  
      /**
       * End an element
       *
       * @param name The element name
       */
      public void jsEnd(String name) throws SAXException {
          this.contentHandler.endElement("", name, name);
      }
  
      /**
       * Add character data
       *
       * @param data The character data
       */
      public void jsCharacters(String data) throws SAXException {
          this.contentHandler.characters(data.toCharArray(), 0, data.length());
      }
  
      /**
       * Add a comment
       *
       * @param comment The comment data
       */
      public void jsComment(String data) throws SAXException {
          this.lexicalHandler.comment(data.toCharArray(), 0, data.length());
      }
  
      // XSPObjectHelper
  
      public void jsExpr(Object v) throws SAXException {
          if (v == null || v instanceof String) {
              XSPObjectHelper.xspExpr(this.contentHandler, (String) v);
          } else if (v instanceof Collection) {
              XSPObjectHelper.xspExpr(this.contentHandler, (Collection) v);
          } else if (v instanceof XMLizable) {
              XSPObjectHelper.xspExpr(this.contentHandler, (XMLizable) v);
          } else if (v instanceof Node) {
              XSPObjectHelper.xspExpr(this.contentHandler, (Node) v);
          } else if (v instanceof Object) {
              XSPObjectHelper.xspExpr(this.contentHandler, (Object) v);
          }
      }
  
      // XSPRequestHelper
  
      public void getLocale() throws SAXException {
          XSPRequestHelper.getLocale(this.objectModel, this.contentHandler);
      }
  
      public Locale[] getLocalesAsArray() {
          return XSPRequestHelper.getLocales(this.objectModel);
      }
  
      public void getLocalesAsXML() throws SAXException {
          XSPRequestHelper.getLocale(this.objectModel, this.contentHandler);
      }
  
      public String getParameter(String name, String defaultValue) {
          return XSPRequestHelper.getParameter(this.objectModel, name, defaultValue);
      }
  
      public String getParameter(String name, String defaultValue,
                                 String form_encoding, String container_encoding) {
          return XSPRequestHelper.getParameter(this.objectModel, name, defaultValue,
                  form_encoding, container_encoding);
      }
  
      public void getParameterAsXML(String name, String defaultValue,
                                    String form_encoding, String container_encoding)
              throws SAXException {
          XSPRequestHelper.getParameter(this.objectModel, this.contentHandler, name, defaultValue,
                  form_encoding, container_encoding);
      }
  
      public void getParameterValuesAsXML(String name, String form_encoding,
                                          String container_encoding)
              throws SAXException {
          XSPRequestHelper.getParameterValues(this.objectModel, this.contentHandler,
                  name, form_encoding, container_encoding);
      }
  
      public String[] getParameterValues(String name,
                                         String form_encoding,
                                         String container_encoding) {
          return XSPRequestHelper.getParameterValues(this.objectModel,
                  name, form_encoding, container_encoding);
      }
  
      public String[] getParameterNames() {
          return XSPRequestHelper.getParameterNames(this.objectModel);
      }
  
      public void getParameterNamesAsXML() throws SAXException {
          XSPRequestHelper.getParameterNames(this.objectModel, this.contentHandler);
      }
  
      public void getHeaderNamesAsXML() throws SAXException {
          XSPRequestHelper.getHeaderNames(this.objectModel, this.contentHandler);
      }
  
      public String[] getHeaderNames() {
          return XSPRequestHelper.getHeaderNames(this.objectModel);
      }
  
      public String[] getHeaders(String name) {
          return XSPRequestHelper.getHeaders(this.objectModel, name);
      }
  
      public void getHeadersAsXML(String name)
              throws SAXException {
          XSPRequestHelper.getHeaders(this.objectModel, name, this.contentHandler);
      }
  
      public Date getDateHeader(String name) {
          return XSPRequestHelper.getDateHeader(this.objectModel, name);
      }
  
      public String getDateHeader(String name, String format) {
          return XSPRequestHelper.getDateHeader(this.objectModel, name, format);
      }
  
      public void getAttributeNames(ContentHandler contentHandler)
              throws SAXException {
          XSPRequestHelper.getAttributeNames(this.objectModel, contentHandler);
      }
  
      public String[] getAttributeNames() {
          return XSPRequestHelper.getAttributeNames(this.objectModel);
      }
  
      public String getRequestedURL() {
          return XSPRequestHelper.getRequestedURL(this.objectModel);
      }
  
      // XSPResponseHelper
  
      public void setHeader(String name, String value) {
          XSPResponseHelper.setHeader(this.objectModel, name, value);
      }
  
      public void addHeader(String name, String value) {
          XSPResponseHelper.addHeader(this.objectModel, name, value);
      }
  
      public String encodeURL(String input) {
          return XSPResponseHelper.encodeURL(this.objectModel, input);
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/javascript/request.xsl
  
  Index: request.xsl
  ===================================================================
  <?xml version="1.0"?>
  <!--
   *****************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.        *
   * _________________________________________________________________________ *
   * This software is published under the terms of the Apache Software License *
   * version 1.1, a copy of which has been included  with this distribution in *
   * the LICENSE file.                                                         *
   *****************************************************************************
  -->
  
  <!--
   * @author <a href="mailto:ricardo@apache.org>Ricardo Rocha</a>
   * @author <a href="mailto:vgritsenko@apache.org>Vadim Gritsenko</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/02/09 04:16:38 $
  -->
  
  <!-- XSP Request logicsheet for the Javascript language -->
  <xsl:stylesheet version="1.0"
                  xmlns:xsp="http://apache.org/xsp"
                  xmlns:xsp-request="http://apache.org/xsp/request/2.0"
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
    <xsl:template match="xsp-request:get-uri">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>(request.getRequestURI())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <!-- <xsp-request:uri> -->
          <xsp:element name="xsp-request:uri">
            <xsp:expr>request.getRequestURI()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-sitemap-uri">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>(request.getSitemapURI())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <!-- <xsp-request:sitemap-uri> -->
          <xsp:element name="xsp-request:sitemap-uri">
            <xsp:expr>request.getSitemapURI()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-scheme">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>(request.getScheme())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:scheme">
            <xsp:expr>request.getScheme()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-character-encoding">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>(request.getCharacterEncoding())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:character-encoding">
            <xsp:expr>request.getCharacterEncoding()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-content-length">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'int'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'int'">
          <xsp:expr>(request.getContentLength())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>String(request.getContentLength())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:content-length">
            <xsp:expr>request.getContentLength()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-content-type">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getContentType()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:content-type">
            <xsp:expr>request.getContentType()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-locale">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'object'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'object'">
          <xsp:expr>(request.getLocale())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>String(request.getLocale())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:logic>
            page.getLocale();
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-locales">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'xml'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'array'">
          <xsp:expr>page.getLocalesAsArray()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:logic>
            page.getLocalesAsXML();
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-parameter">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="default">
        <xsl:choose>
          <xsl:when test="@default">"<xsl:value-of select="@default"/>"</xsl:when>
          <xsl:when test="xsp-request:default">
            <xsl:call-template name="get-nested-content">
              <xsl:with-param name="content" select="xsp-request:default"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>null</xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:variable name="form-encoding">
        <xsl:call-template name="value-for-form-encoding"/>
      </xsl:variable>
      <xsl:variable name="container-encoding">
        <xsl:call-template name="value-for-container-encoding"/>
      </xsl:variable>
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>
            (page.getParameter(<xsl:copy-of select="$name"/>,
            <xsl:copy-of select="$default"/>,
            <xsl:copy-of select="$form-encoding"/>,
            <xsl:copy-of select="$container-encoding"/>))
          </xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <!-- <xsp-request:parameter name="..."> -->
          <xsp:logic>
            page.getParameterAsXML(<xsl:copy-of select="$name"/>, <xsl:copy-of select="$default"/>,
            <xsl:copy-of select="$form-encoding"/>,
            <xsl:copy-of select="$container-encoding"/>);
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-parameter-values">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'xml'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="form-encoding">
        <xsl:call-template name="value-for-form-encoding"/>
      </xsl:variable>
      <xsl:variable name="container-encoding">
        <xsl:call-template name="value-for-container-encoding"/>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'array'">
          <xsp:expr>
            (page.getParameterValues(<xsl:copy-of select="$name"/>,
            <xsl:copy-of select="$form-encoding"/>,
            <xsl:copy-of select="$container-encoding"/>))
          </xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <!-- <xsp-request:parameter-values name="..."> -->
          <xsp:logic>
            page.getParameterValuesAsXML(<xsl:copy-of select="$name"/>,
            <xsl:copy-of select="$form-encoding"/>,
            <xsl:copy-of select="$container-encoding"/>);
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-parameter-names">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'xml'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'array'">
          <xsp:expr>
            (page.getParameterNames())
          </xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:logic>
            page.getParameterNamesAsXML();
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-header">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getHeader(<xsl:copy-of select="$name"/>)</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:header">
            <xsp:attribute name="name">
              <xsp:expr><xsl:copy-of select="$name"/></xsp:expr>
            </xsp:attribute>
            <xsp:expr>request.getHeader(<xsl:copy-of select="$name"/>)</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-int-header">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'int'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'int'">
          <xsp:expr>request.getIntHeader(<xsl:copy-of select="$name"/>)</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>String(request.getIntHeader(<xsl:copy-of select="$name"/>))</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:int-header">
            <xsp:attribute name="name">
              <xsp:expr><xsl:copy-of select="$name"/></xsp:expr>
            </xsp:attribute>
            <xsp:expr>request.getIntHeader(<xsl:copy-of select="$name"/>)</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-date-header">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="format">
        <xsl:call-template name="value-for-format"/>
      </xsl:variable>
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'object'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'object'">
          <xsp:expr>page.getDateHeader(<xsl:copy-of select="$name"/>)</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'long'">
          <xsp:expr>request.getDateHeader(<xsl:copy-of select="$name"/>)</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>page.getDateHeader(<xsl:copy-of select="$name"/>, <xsl:copy-of select="$format"/>))</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:date-header">
            <xsp:attribute name="name">
              <xsp:expr><xsl:copy-of select="$name"/></xsp:expr>
            </xsp:attribute>
            <xsp:expr>page.getDateHeader(<xsl:copy-of select="$name"/>, <xsl:copy-of select="$format"/>))</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-header-names">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'xml'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'array'">
          <xsp:expr>(page.getHeaderNames())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:logic>
            page.getHeaderNamesAsXML();
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-headers">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'xml'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'array'">
          <xsp:expr>
            (page.getHeaders(<xsl:copy-of select="$name"/>))
          </xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:logic>
            page.getHeadersAsXML(<xsl:copy-of select="$name"/>);
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-attribute">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'object'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'object'">
          <xsp:expr>request.getAttribute(<xsl:copy-of select="$name"/>)</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>
            String(request.getAttribute(<xsl:copy-of select="$name"/>))
          </xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:attribute">
            <xsp:attribute name="name" value="{$name}"/>
            <xsp:expr>request.getAttribute(<xsl:copy-of select="$name"/>)</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:set-attribute">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsl:variable name="content">
        <xsl:call-template name="get-nested-content">
          <xsl:with-param name="content" select="*|text()"/>
        </xsl:call-template>
      </xsl:variable>
      <xsp:logic>
        request.setAttribute(String(<xsl:copy-of select="$name"/>),
                             <xsl:copy-of select="$content"/>);
      </xsp:logic>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-attribute-names">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'xml'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'array'">
          <xsp:expr>
            (page.getAttributeNames())
          </xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:logic>
            page.getAttributeNames(this.contentHandler);
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:remove-attribute">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
      <xsp:logic>
        request.removeAttribute(<xsl:copy-of select="$name"/>);
      </xsp:logic>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-requested-url">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>page.getRequestedURL()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:requested-url">
            <xsp:expr>page.getRequestedURL()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-remote-address">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getRemoteAddr()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:remote-addres">
            <xsp:expr>request.getRemoteAddr()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-remote-user">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getRemoteUser()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:remote-user">
            <xsp:expr>request.getRemoteUser()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-context-path">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getContextPath()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:context-path">
            <xsp:expr>request.getContextPath()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-path-info">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getPathInfo()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:path-info">
            <xsp:expr>request.getPathInfo()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-server-name">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getServerName()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:server-name">
            <xsp:expr>request.getServerName()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-server-port">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'int'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'int'">
          <xsp:expr>request.getServerPort()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>String(request.getServerPort())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:server-port">
            <xsp:expr>request.getServerPort()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-method">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getMethod()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:method">
            <xsp:expr>request.getMethod()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-query-string">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getQueryString()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:query-string">
            <xsp:expr>request.getQueryString()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-protocol">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getProtocol()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:protocol">
            <xsp:expr>request.getProtocol()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-remote-host">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getRemoteHost()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:remote-host">
            <xsp:expr>request.getRemoteHost()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:is-secure">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'boolean'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'boolean'">
          <xsp:expr>request.isSecure()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>String(request.isSecure())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:secure">
            <xsp:expr>request.isSecure()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-path-translated">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getPathTranslated()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:path-translated">
            <xsp:expr>request.getPathTranslated()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-servlet-path">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getServletPath()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:servlet-path">
            <xsp:expr>request.getServletPath()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-user-principal">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'object'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>String(request.getUserPrincipal())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'object'">
          <xsp:expr>request.getUserPrincipal()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:user-principal">
            <xsp:expr>request.getUserPrincipal()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-auth-type">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getAuthType()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:auth-type">
            <xsp:expr>request.getAuthType()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:is-user-in-role">
      <xsl:variable name="role">
        <xsl:call-template name="value-for-role"/>
      </xsl:variable>
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'boolean'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'boolean'">
          <xsp:expr>request.isUserInRole(<xsl:copy-of select="$role"/>)</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'string'">
          <xsp:expr>String(request.isUserInRole(<xsl:copy-of select="$role"/>))</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:user-in-role">
            <xsp:attribute name="role">
              <xsp:expr><xsl:copy-of select="$role"/></xsp:expr>
            </xsp:attribute>
            <xsp:expr>request.isUserInRole(<xsl:copy-of select="$role"/>)</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-requested-session-id">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>request.getRequestedSessionId()</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <xsp:element name="xsp-request:requested-session-id">
            <xsp:expr>request.getRequestedSessionId()</xsp:expr>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
  
    <!-- ============== Session Related ============== -->
  
    <xsl:template match="xsp-request:get-session-attribute">
      <xsl:variable name="name">
        <xsl:call-template name="value-for-name"/>
      </xsl:variable>
  
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="default">
        <xsl:choose>
          <xsl:when test="@default">"<xsl:value-of select="@default"/>"</xsl:when>
          <xsl:when test="xsp-request:default">
            <xsl:call-template name="get-nested-content">
              <xsl:with-param name="content" select="xsp-request:default"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>null</xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
  
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>
            (page.getSessionAttribute(<xsl:copy-of select="$name"/>, <xsl:copy-of select="$default"/>))
          </xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <!-- <xsp-request:session-attribute name="..."> -->
          <xsp:logic>
            page.getSessionAttribute(this.contentHandler,
            <xsl:copy-of select="$name"/>, <xsl:copy-of select="$default"/>);
          </xsp:logic>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="xsp-request:get-session-id">
      <xsl:variable name="as">
        <xsl:call-template name="value-for-as">
          <xsl:with-param name="default" select="'string'"/>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:choose>
        <xsl:when test="$as = 'string'">
          <xsp:expr>(page.getSessionId())</xsp:expr>
        </xsl:when>
        <xsl:when test="$as = 'xml'">
          <!-- <xsp-request:session-id> -->
          <xsp:element name="xsp-request:session-id">
            <xsp:logic>
              page.getSessionId(this.contentHandler);
            </xsp:logic>
          </xsp:element>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  
  
    <!-- Supporting templates -->
  
    <xsl:template name="value-for-as">
      <xsl:param name="default"/>
      <xsl:choose>
        <xsl:when test="@as"><xsl:value-of select="@as"/></xsl:when>
        <xsl:otherwise><xsl:value-of select="$default"/></xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="value-for-name">
      <xsl:choose>
        <xsl:when test="@name">"<xsl:value-of select="@name"/>"</xsl:when>
        <xsl:when test="xsp-request:name">
          <xsl:call-template name="get-nested-content">
            <xsl:with-param name="content" select="xsp-request:name"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="value-for-role">
      <xsl:choose>
        <xsl:when test="@role">"<xsl:value-of select="@role"/>"</xsl:when>
        <xsl:when test="xsp-request:role">
          <xsl:call-template name="get-nested-content">
            <xsl:with-param name="content" select="xsp-request:role"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="value-for-format">
      <xsl:choose>
        <xsl:when test="@format">"<xsl:value-of select="@format"/>"</xsl:when>
        <xsl:when test="xsp-request:format">
          <xsl:call-template name="get-nested-content">
            <xsl:with-param name="content" select="xsp-request:format"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="value-for-form-encoding">
      <xsl:choose>
        <xsl:when test="@form-encoding">"<xsl:value-of
            select="@form-encoding"/>"</xsl:when>
        <xsl:when test="xsp-request:form-encoding">
          <xsl:call-template name="get-nested-content">
            <xsl:with-param name="content" select="xsp-request:form-encoding"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="value-for-container-encoding">
      <xsl:choose>
        <xsl:when test="@container-encoding">"<xsl:value-of
            select="@container-encoding"/>"</xsl:when>
        <xsl:when test="xsp-request:container-encoding">
          <xsl:call-template name="get-nested-content">
            <xsl:with-param name="content"
              select="xsp-request:container-encoding"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="get-nested-content">
      <xsl:param name="content"/>
      <xsl:choose>
        <xsl:when test="$content/*">
          <xsl:apply-templates select="$content/*"/>
        </xsl:when>
        <xsl:otherwise>"<xsl:value-of select="$content"/>"</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="@*|*|text()|processing-instruction()">
      <xsl:copy>
        <xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
      </xsl:copy>
    </xsl:template>
  
    <xsl:template match="xsp-request:name"/>
    <xsl:template match="xsp-request:default"/>
    <xsl:template match="xsp-request:form-encoding"/>
    <xsl:template match="xsp-request:container-encoding"/>
  </xsl:stylesheet>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/javascript/response.xsl
  
  Index: response.xsl
  ===================================================================
  <?xml version="1.0"?>
  <!--
   *****************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.        *
   * _________________________________________________________________________ *
   * This software is published under the terms of the Apache Software License *
   * version 1.1, a copy of which has been included  with this distribution in *
   * the LICENSE file.                                                         *
   *****************************************************************************
  -->
  
  <!--
   * @author <a href="mailto:vgritsenko@apache.org>Vadim Gritsenko</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/02/09 04:16:38 $
  -->
  
  <!-- XSP Response logicsheet for the Javascript language -->
  <xsl:stylesheet
    version="1.0"
    xmlns:xsp="http://apache.org/xsp"
    xmlns:xsp-response="http://apache.org/xsp/response/2.0"
  
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  >
    <xsl:template match="xsp-response:set-header">
      <xsl:variable name="name">
        <xsl:choose>
          <xsl:when test="@name">"<xsl:value-of select="@name"/>"</xsl:when>
          <xsl:when test="xsp-response:name">
            <xsl:call-template name="get-nested-content">
              <xsl:with-param name="content" select="xsp-response:name"/>
            </xsl:call-template>
          </xsl:when>
        </xsl:choose>
      </xsl:variable>
  
      <xsl:variable name="value">
        <xsl:choose>
          <xsl:when test="@value">"<xsl:value-of select="@value"/>"</xsl:when>
          <xsl:when test="xsp-response:value">
            <xsl:call-template name="get-nested-content">
              <xsl:with-param name="content" select="xsp-response:value"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>""</xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
  
      <xsp:logic>
        page.setHeader(<xsl:value-of select="$name"/>, <xsl:value-of select="$value"/>);
      </xsp:logic>
    </xsl:template>
  
    <xsl:template name="get-nested-content">
      <xsl:param name="content"/>
      <xsl:choose>
        <xsl:when test="$content/*">
          <xsl:apply-templates select="$content/*"/>
        </xsl:when>
        <xsl:otherwise>"<xsl:value-of select="$content"/>"</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
   
    <xsl:template match="@*|*|text()|processing-instruction()">
      <xsl:copy>
        <xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
      </xsl:copy>
    </xsl:template>
  </xsl:stylesheet>
  
  
  
  1.1                  xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/javascript/xsp.xsl
  
  Index: xsp.xsl
  ===================================================================
  <?xml version="1.0"?>
  <!--
   *****************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.        *
   * _________________________________________________________________________ *
   * This software is published under the terms of the Apache Software License *
   * version 1.1, a copy of which has been included  with this distribution in *
   * the LICENSE file.                                                         *
   *****************************************************************************
  -->
  
  <!--
   * @author <a href="mailto:vgritsenko@apache.org>Vadim Gritsenko</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/02/09 04:16:38 $
  -->
  
  <!-- XSP Core logicsheet for the JavaScript language -->
  <xsl:stylesheet version="1.0"
                  xmlns:xsp="http://apache.org/xsp"
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:XSLTExtension="org.apache.cocoon.components.language.markup.xsp.java.XSLTExtension">
    <xsl:output method="text"/>
  
    <xsl:variable name="xsp-uri" select="'http://apache.org/xsp'"/>
  
    <!--
      this variable holds the instance of extension class to properly
      escape text into Java strings
  
      ovidiu: use the class name as the namespace to identify the
      class. This is supposedly portable across XSLT implementations.
    -->
    <xsl:variable
         name="extension"
         select="XSLTExtension:new()"
         xmlns:XSLTExtension="org.apache.cocoon.components.language.markup.xsp.java.XSLTExtension"/>
  
    <xsl:template match="/">
      <code xml:space="preserve">// $Cocoon extends: org.apache.cocoon.components.language.markup.xsp.JSGenerator$
        <xsl:apply-templates select="xsp:page"/>
      </code>
    </xsl:template>
  
    <xsl:template match="xsp:page">
      // Generated by XSP. Edit at your own risk, :-)
  
      function getDependencies() {
         <xsl:text>return "</xsl:text>
         <xsl:for-each select="//xsp:dependency">
           <xsl:value-of select="translate(., '\','/')"/><xsl:text>;</xsl:text>
         </xsl:for-each>
         <xsl:text>";</xsl:text>
      }
  
      /* Built-in beans not available for use */
      // page           - "this" in Java
      // logger         - Logger
      // contentHandler - page.contentHandler
      // jsAttr         - AttributesImpl
  
      /* Built-in parameters available for use */
      // objectModel - Map
      // context     - ServletContext
      // request     - Request
      // response    - Response
      // resolver    - SourceResolver
      // parameters  - Parameters defined in the sitemap
  
      // User Class "Declarations"
      <xsl:apply-templates select="xsp:logic"/>
  
      // User Class Initialization
      <xsl:value-of select="xsp:init-page"/>
  
      contentHandler.startDocument();
  
      <!-- Generate top-level processing instructions -->
      <xsl:apply-templates select="/processing-instruction()"/>
  
      <!-- Process only 1st non-XSP element as generated root -->
      <xsl:call-template name="process-first-element">
        <xsl:with-param name="content" select="*[not(namespace-uri(.) = $xsp-uri)][1]"/>
      </xsl:call-template>
  
      contentHandler.endDocument();
    </xsl:template>
  
  
    <xsl:template name="process-first-element">
      <xsl:param name="content"/>
  
      <!-- Generate top-level namespaces declarations -->
      <xsl:variable name="parent-element" select="$content/.."/>
      <xsl:for-each select="$content/namespace::*">
        <xsl:variable name="ns-prefix" select="local-name(.)"/>
        <xsl:variable name="ns-uri" select="string(.)"/>
        <!-- Declare namespaces that also exist on the parent (i.e. not locally declared),
             and filter out "xmlns:xmlns" namespace produced by Xerces+Saxon -->
        <xsl:if test="($ns-prefix != 'xmlns') and $parent-element/namespace::*[local-name(.) = $ns-prefix and string(.) = $ns-uri]">
          contentHandler.startPrefixMapping("<xsl:value-of select="$ns-prefix"/>", "<xsl:value-of select="$ns-uri"/>");
        </xsl:if>
      </xsl:for-each>
  
      <!-- Generate content -->
      <xsl:apply-templates select="$content"/>
  
      <!-- Close top-level namespaces declarations-->
      <xsl:for-each select="$content/namespace::*">
        <xsl:variable name="ns-prefix" select="local-name(.)"/>
        <xsl:variable name="ns-uri" select="string(.)"/>
        <xsl:if test="($ns-prefix != 'xmlns') and $parent-element/namespace::*[local-name(.) = $ns-prefix and string(.) = $ns-uri]">
          contentHandler.endPrefixMapping("<xsl:value-of select="local-name(.)"/>");
        </xsl:if>
      </xsl:for-each>
    </xsl:template>
  
  
    <xsl:template match="xsp:element">
      <xsl:variable name="uri">
        <xsl:call-template name="get-parameter">
          <xsl:with-param name="name">uri</xsl:with-param>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="prefix">
        <xsl:call-template name="get-parameter">
          <xsl:with-param name="name">prefix</xsl:with-param>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="name">
        <xsl:call-template name="get-parameter">
          <xsl:with-param name="name">name</xsl:with-param>
          <xsl:with-param name="required">true</xsl:with-param>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="raw-name">
        <xsl:if test="
          ($uri = '&quot;&quot;' and $prefix != '&quot;&quot;') or
          ($uri != '&quot;&quot;' and $prefix = '&quot;&quot;')
        ">
          <xsl:call-template name="error">
            <xsl:with-param name="message">[&lt;xsp:element&gt;]
  Either both 'uri' and 'prefix' or none of them must be specified
            </xsl:with-param>
          </xsl:call-template>
        </xsl:if>
  
        <xsl:choose>
          <xsl:when test="$prefix = '&quot;&quot;'">
            <xsl:copy-of select="$name"/>
          </xsl:when>
          <xsl:otherwise>
            (<xsl:copy-of select="$prefix"/> + ":" + <xsl:copy-of select="$name"/>)
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
  
      <!-- Declare namespaces that are not already present on the parent element.
           Note : we could use "../../namespace::*[...]" to get parent element namespaces
           but Xalan 2.0.1 retunrs only the first namespace (Saxon is OK).
           That's why we store the parent element in a variable -->
      <xsl:variable name="parent-element" select=".."/>
      <xsl:for-each select="namespace::*">
        <xsl:variable name="ns-prefix" select="local-name(.)"/>
        <xsl:variable name="ns-uri" select="string(.)"/>
        <xsl:if test="not($parent-element/namespace::*[local-name(.) = $ns-prefix and string(.) = $ns-uri])">
          contentHandler.startPrefixMapping("<xsl:value-of select="local-name(.)"/>", "<xsl:value-of select="."/>");
        </xsl:if>
      </xsl:for-each>
  
      <xsl:apply-templates select="xsp:attribute | xsp:logic[xsp:attribute]"/>
  
      contentHandler.startElement(<xsl:copy-of select="$uri"/>,
        <xsl:copy-of select="$name"/>, <xsl:copy-of select="$raw-name"/>, jsAttr);
      jsAttr.clear();
  
      <xsl:apply-templates select="node()[not(
        (namespace-uri(.) = $xsp-uri and local-name(.) = 'attribute') or
        (namespace-uri(.) = $xsp-uri and local-name(.) = 'logic' and ./xsp:attribute)
        )]"/>
  
      contentHandler.endElement(<xsl:copy-of select="$uri"/>,
        <xsl:copy-of select="$name"/>, <xsl:copy-of select="$raw-name"/>);
  
      <xsl:for-each select="namespace::*">
        <xsl:variable name="ns-prefix" select="local-name(.)"/>
        <xsl:variable name="ns-uri" select="string(.)"/>
        <xsl:if test="not($parent-element/namespace::*[local-name(.) = $ns-prefix and string(.) = $ns-uri])">
          contentHandler.endPrefixMapping("<xsl:value-of select="local-name(.)"/>");
        </xsl:if>
      </xsl:for-each>
    </xsl:template>
  
  
    <xsl:template match="xsp:attribute">
      <xsl:variable name="uri">
        <xsl:call-template name="get-parameter">
          <xsl:with-param name="name">uri</xsl:with-param>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="prefix">
        <xsl:call-template name="get-parameter">
          <xsl:with-param name="name">prefix</xsl:with-param>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="name">
        <xsl:call-template name="get-parameter">
          <xsl:with-param name="name">name</xsl:with-param>
          <xsl:with-param name="required">true</xsl:with-param>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="raw-name">
        <xsl:if test="
          ($uri = '&quot;&quot;' and $prefix != '&quot;&quot;') or
          ($uri != '&quot;&quot;' and $prefix = '&quot;&quot;')
        ">
          <xsl:call-template name="error">
            <xsl:with-param name="message">[&lt;xsp:attribute&gt;]
  Either both 'uri' and 'prefix' or none of them must be specified
            </xsl:with-param>
          </xsl:call-template>
        </xsl:if>
  
        <xsl:choose>
          <xsl:when test="$prefix = '&quot;&quot;'">
            <xsl:copy-of select="$name"/>
          </xsl:when>
          <xsl:otherwise>
          (<xsl:copy-of select="$prefix"/> + ":" + <xsl:copy-of select="$name"/>)  </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
  
      <xsl:variable name="content">
        <xsl:for-each select="text()|xsp:expr|xsp:text">
          <xsl:if test="position() &gt; 1">
           +
          </xsl:if>
          <xsl:choose>
            <xsl:when test="namespace-uri(.) = $xsp-uri and local-name(.) = 'expr'">
              (<xsl:value-of select="."/>)
            </xsl:when>
            <xsl:otherwise>
              "<xsl:value-of select="."/>"
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each>
        <xsl:if test="not(text()|xsp:expr|xsp:text)">
          ""
        </xsl:if>
      </xsl:variable>
  
      jsAttr.addAttribute(<xsl:copy-of select="$uri"/>,
        <xsl:copy-of select="$name"/>, <xsl:copy-of select="$raw-name"/>, "CDATA",
        <xsl:value-of select="normalize-space($content)"/>);
    </xsl:template>
  
  
    <xsl:template match="xsp:expr">
      <xsl:choose>
        <xsl:when test="namespace-uri(..) = $xsp-uri and local-name(..) != 'content' and local-name(..) != 'element'">
          <!--
               Expression is nested inside another XSP tag:
               preserve its Java type
          -->
          (<xsl:value-of select="."/>)
        </xsl:when>
        <xsl:when test="string-length(.) = 0">
          <!-- Do nothing -->
        </xsl:when>
        <xsl:otherwise>
          <!-- Output the value as elements or character data depending on its type -->
          page.jsExpr(<xsl:value-of select="."/>);
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
  
    <!-- FIXME: Is this _really_ necessary? -->
    <xsl:template match="xsp:content">
      <xsl:apply-templates/>
    </xsl:template>
  
  
    <xsl:template match="xsp:logic">
      <xsl:apply-templates/>
    </xsl:template>
  
  
    <xsl:template match="xsp:pi">
      <xsl:variable name="target">
        <xsl:call-template name="get-parameter">
          <xsl:with-param name="name">target</xsl:with-param>
        </xsl:call-template>
      </xsl:variable>
  
      <xsl:variable name="content">
        <xsl:for-each select="text()|xsp:expr">
          <xsl:choose>
            <xsl:when test="namespace-uri(.) = $xsp-uri and local-name(.) = 'expr'">
              String(<xsl:value-of select="."/>)
            </xsl:when>
            <xsl:otherwise>
              "<xsl:value-of select="."/>"
            </xsl:otherwise>
          </xsl:choose>
          <xsp:text> + </xsp:text>
        </xsl:for-each>
        ""
      </xsl:variable>
  
      contentHandler.processingInstruction(<xsl:copy-of select="$target"/>,
        <xsl:value-of select="normalize-space($content)"/>);
    </xsl:template>
  
  
    <!-- FIXME: How to create comments in SAX? -->
    <xsl:template match="xsp:comment">
      page.jsComment("<xsl:value-of select="."/>");
    </xsl:template>
  
  
    <xsl:template match="*[not(namespace-uri(.) = $xsp-uri)]">
      <xsl:variable name="parent-element" select=".."/>
      <xsl:for-each select="namespace::*">
        <xsl:variable name="ns-prefix" select="local-name(.)"/>
        <xsl:variable name="ns-uri" select="string(.)"/>
        <xsl:if test="not($parent-element/namespace::*[local-name(.) = $ns-prefix and string(.) = $ns-uri])">
          contentHandler.startPrefixMapping("<xsl:value-of select="local-name(.)"/>", "<xsl:value-of select="."/>");
        </xsl:if>
      </xsl:for-each>
  
      <xsl:apply-templates select="@*"/>
  
      <xsl:apply-templates select="xsp:attribute | xsp:logic[xsp:attribute]"/>
  
      contentHandler.startElement("<xsl:value-of select="namespace-uri(.)"/>",
        "<xsl:value-of select="local-name(.)"/>", "<xsl:value-of select="name(.)"/>", jsAttr);
      jsAttr.clear();
  
      <xsl:apply-templates select="node()[not(
          (namespace-uri(.) = $xsp-uri and local-name(.) = 'attribute') or
          (namespace-uri(.) = $xsp-uri and local-name(.) = 'logic' and ./xsp:attribute)
        )]"/>
  
      contentHandler.endElement("<xsl:value-of select="namespace-uri(.)"/>",
        "<xsl:value-of select="local-name(.)"/>", "<xsl:value-of select="name(.)"/>");
  
      <xsl:for-each select="namespace::*">
        <xsl:variable name="ns-prefix" select="local-name(.)"/>
        <xsl:variable name="ns-uri" select="string(.)"/>
        <xsl:if test="not($parent-element/namespace::*[local-name(.) = $ns-prefix and string(.) = $ns-uri])">
        contentHandler.endPrefixMapping("<xsl:value-of select="local-name(.)"/>");
        </xsl:if>
      </xsl:for-each>
    </xsl:template>
  
    <xsl:template match="@*">
      <!-- Filter out namespace declaration attributes -->
      <xsl:if test="not(starts-with(name(.), 'xmlns:'))">
      jsAttr.addAttribute("<xsl:value-of select="namespace-uri(.)"/>",
        "<xsl:value-of select="local-name(.)"/>", "<xsl:value-of select="name(.)"/>", "CDATA",
        "<xsl:value-of select="."/>");
      </xsl:if>
    </xsl:template>
  
    <xsl:template match="text()">
      <xsl:choose>
        <xsl:when test="namespace-uri(..) = $xsp-uri and (local-name(..) = 'logic' or local-name(..) = 'expr')">
          <xsl:value-of select="."/>
        </xsl:when>
        <xsl:otherwise>
          page.jsCharacters("<xsl:value-of select="XSLTExtension:escape($extension, .)"/>");
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
  
    <xsl:template match="text()" mode="value">
      <xsl:value-of select="."/>
    </xsl:template>
  
  
    <xsl:template match="processing-instruction()">
      contentHandler.processingInstruction("<xsl:value-of select="name()"/>", "<xsl:value-of select="."/>");
    </xsl:template>
  
  
    <!-- Utility templates -->
    <xsl:template name="get-parameter">
      <xsl:param name="name"/>
      <xsl:param name="default"/>
      <xsl:param name="required">false</xsl:param>
  
      <xsl:choose>
        <xsl:when test="@*[name(.) = $name]">"<xsl:value-of select="@*[name(.) = $name]"/>"</xsl:when>
        <xsl:when test="(*[namespace-uri(.)=$xsp-uri and local-name(.) = 'param'])[@name = $name]">
          <xsl:call-template name="get-nested-content">
            <xsl:with-param name="content"
                            select="(*[namespace-uri(.)=$xsp-uri and local-name(.) = 'param'])[@name = $name]"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
            <xsl:when test="string-length($default) = 0">
              <xsl:choose>
                <xsl:when test="$required = 'true'">
                  <xsl:call-template name="error">
                    <xsl:with-param name="message">[Logicsheet processor]
  Parameter '<xsl:value-of select="$name"/>' missing in dynamic tag &lt;<xsl:value-of select="name(.)"/>&gt;
                    </xsl:with-param>
                  </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>""</xsl:otherwise>
              </xsl:choose>
            </xsl:when>
            <xsl:otherwise><xsl:copy-of select="$default"/></xsl:otherwise>
          </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="get-nested-content">
      <xsl:param name="content"/>
      <xsl:choose>
        <xsl:when test="$content/*">
          <xsl:apply-templates select="$content/*"/>
        </xsl:when>
        <xsl:otherwise>"<xsl:value-of select="$content"/>"</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="error">
      <xsl:param name="message"/>
      <xsl:message terminate="yes"><xsl:value-of select="$message"/></xsl:message>
    </xsl:template>
  
    <!-- Ignored elements -->
    <xsl:template match="xsp:logicsheet|xsp:dependency|xsp:param"/>
  </xsl:stylesheet>
  
  
  
  1.25      +22 -2     xml-cocoon2/src/webapp/cocoon.xconf
  
  Index: cocoon.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/cocoon.xconf,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- cocoon.xconf	9 Feb 2002 03:13:03 -0000	1.24
  +++ cocoon.xconf	9 Feb 2002 04:16:39 -0000	1.25
  @@ -188,8 +188,7 @@
       <parameter name="xscript:value-of" value="resource://org/apache/cocoon/components/xscript/xslt/value-of.xsl"/>
     </xscript>
   
  -  <!-- Programming Languages:
  -  -->
  +  <!-- Programming Languages: -->
     <programming-languages>
       <java-language name="java" logger="core.language.java">
         <!-- Compiler parameter specifies which class to use to compile Java.
  @@ -206,6 +205,10 @@
         <!-- A singleton-like implementation of a ClassLoader -->
         <parameter name="class-loader" value="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/>
       </java-language>
  +
  +    <!-- Interpreted JavaScript language -->
  +    <js-language name="js" logger="core.language.js"/>
  +
     </programming-languages>
   
     <!-- Class loader:
  @@ -329,6 +332,23 @@
           </builtin-logicsheet>
   
         </target-language>
  +
  +      <target-language name="js">
  +        <parameter name="core-logicsheet" value="resource://org/apache/cocoon/components/language/markup/xsp/javascript/xsp.xsl"/>
  +
  +        <builtin-logicsheet>
  +          <parameter name="prefix" value="xsp-request"/>
  +          <parameter name="uri" value="http://apache.org/xsp/request/2.0"/>
  +          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/javascript/request.xsl"/>
  +        </builtin-logicsheet>
  +
  +        <builtin-logicsheet>
  +          <parameter name="prefix" value="xsp-response"/>
  +          <parameter name="uri" value="http://apache.org/xsp/response/2.0"/>
  +          <parameter name="href" value="resource://org/apache/cocoon/components/language/markup/xsp/javascript/response.xsl"/>
  +        </builtin-logicsheet>
  +      </target-language>
  +        
       </xsp-language>
   
       <!-- Defines Sitemap Core logicsheet for the Java language -->
  
  
  
  1.25      +11 -0     xml-cocoon2/src/webapp/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/sitemap.xmap,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- sitemap.xmap	4 Feb 2002 02:30:35 -0000	1.24
  +++ sitemap.xmap	9 Feb 2002 04:16:39 -0000	1.25
  @@ -909,6 +909,17 @@
       <map:serialize/>
      </map:match>
   
  +   <map:match pattern="xsp-js/*">
  +    <!-- XSP pages written in Javascript -->
  +    <map:generate type="serverpages" src="docs/samples/xsp-js/{1}.xsp">
  +      <map:parameter name="programming-language" value="js"/>
  +    </map:generate>
  +    <map:transform src="stylesheets/dynamic-page2html.xsl">
  +     <map:parameter name="view-source" value="docs/samples/xsp-js/{1}.xsp"/>
  +    </map:transform>
  +    <map:serialize/>
  +   </map:match>
  +
      <map:match pattern="xsp-plain/*">
       <map:generate type="serverpages" src="docs/samples/xsp/{1}.xsp"/>
       <map:serialize/>
  
  
  
  1.2       +7 -1      xml-cocoon2/src/webapp/docs/samples/xsp/logicsheet.xsp
  
  Index: logicsheet.xsp
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/docs/samples/xsp/logicsheet.xsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- logicsheet.xsp	3 Feb 2002 01:22:55 -0000	1.1
  +++ logicsheet.xsp	9 Feb 2002 04:16:39 -0000	1.2
  @@ -2,8 +2,10 @@
   
   <!-- XSP can be assotiated with the logicsheet using processing
        instruction xml-logicsheet or the xsp:logicsheet element.
  +     Do not use both methods!
   
   <?xml-logicsheet href="logicsheets/hello.xsl"?>
  +
   -->
   
   <xsp:page language="java"
  @@ -12,8 +14,12 @@
             xmlns:xsp-hello="http://apache.org/xsp/hello/1.0"
   ><xsp:logicsheet location="logicsheets/hello.xsl"/>
   
  -<!-- Context URL can be used:
  +<!-- Context URL also can be used:
  +
   <xsp:logicsheet location="context://logicsheets/hello.xsl"/>
  +
  +     URL relative to the current sitemap CAN NOT be used, as 
  +     logicsheet is the global object, shared between all sitemaps.
   -->
   
     <page>
  
  
  
  1.1                  xml-cocoon2/src/webapp/docs/samples/xsp-js/hello.xsp
  
  Index: hello.xsp
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <xsp:page language="javascript" xmlns:xsp="http://apache.org/xsp">
    <page>
      <title>A Simple XSP Page</title>
      <content>
        <para>Hi there! I'm a simple dynamic page generated by XSP (eXtensible Server Pages).</para>
      </content>
    </page>
  </xsp:page>
  
  
  
  1.1                  xml-cocoon2/src/webapp/docs/samples/xsp-js/request-test.xsp
  
  Index: request-test.xsp
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <xsp:page language="jsxsp"
            xmlns:xsp="http://apache.org/xsp"  
            xmlns:xsp-request="http://apache.org/xsp/request/2.0">
  
  <page>
  
  <xsp-request:set-attribute name="attr">Test Attribute Value</xsp-request:set-attribute>
  
  <h1>xsp-request logicsheet output</h1>
  <table border="1">
  <tr>
    <th>Logicsheet tag</th><th>Output</th><th>Java method</th><th>Output</th></tr>
  <tr>
    <td>get-uri</td><td><xsp-request:get-uri/></td>
    <td>getRequestURI</td><td><xsp:expr>request.getRequestURI()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-sitemap-uri</td><td><xsp-request:get-sitemap-uri/></td>
      </tr>
  <tr>
    <td>get-scheme</td><td><xsp-request:get-scheme/></td>
    <td>getScheme</td><td><xsp:expr>request.getScheme()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-character-encoding</td><td><xsp-request:get-character-encoding/></td>
    <td>getCharacterEncoding</td><td><xsp:expr>request.getCharacterEncoding()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-content-length</td><td><xsp-request:get-content-length/></td>
    <td>getContentLength</td><td><xsp:expr>request.getContentLength()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-content-type</td><td><xsp-request:get-content-type/></td>
    <td>getContentType</td><td><xsp:expr>request.getContentType()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-locale</td><td><xsp-request:get-locale/></td>
    <td>getLocale</td><td><xsp:expr>request.getLocale()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-locales</td><td><xsp:expr>String(<xsp-request:get-locales as="array"/>)</xsp:expr></td>
    <td>getLocales</td><td><xsp:expr>String(request.getLocales())</xsp:expr></td>
      </tr>
  <tr>
    <td>get-parameter</td><td><xsp-request:get-parameter name="param"/></td>
    <td>getParameter</td><td><xsp:expr>request.getParameter("param")</xsp:expr></td>
      </tr>
  <tr>
    <td>get-parameter with default </td><td><xsp-request:get-parameter name="param" default="default"/></td>
      </tr>
  <tr>
    <td>get-parameter-values (as array)</td><td><xsp:expr>String(<xsp-request:get-parameter-values name="param" as="array"/>)</xsp:expr></td>
    <td>getParameterValues</td><td><xsp:expr>String(request.getParameterValues("param"))</xsp:expr></td>
      </tr>
  <tr>
    <td>get-parameter-names (as array)</td><td><xsp:expr>String(<xsp-request:get-parameter-names as="array"/>)</xsp:expr></td>
    <td>getParameterNames</td><td><xsp:expr>String(request.getParameterNames())</xsp:expr></td>
      </tr>
  <tr>
    <td>get-header accept</td><td><xsp-request:get-header name="accept"/></td>
    <td>getHeader</td><td><xsp:expr>request.getHeader("accept")</xsp:expr></td>
      </tr>
  <tr>
    <td>get-header user-agent</td><td><xsp-request:get-header name="user-agent"/></td>
    <td>getHeader</td><td><xsp:expr>request.getHeader("user-agent")</xsp:expr></td>
      </tr>
  <!--
  get-int-header
  get-date-header
  -->
  <tr>
    <td>get-headers accept-language (as array)</td><td><xsp:expr>String(<xsp-request:get-headers name="accept-language" as="array"/>)</xsp:expr></td>
    <td>getHeaders</td><td><xsp:expr>request.getHeaders("accept-language")</xsp:expr></td>
      </tr>
  <tr>
    <td>get-header-names (as array)</td><td><xsp:expr>String(<xsp-request:get-header-names as="array"/>)</xsp:expr></td>
    <td>getHeaderNames</td><td><xsp:expr>String(request.getHeaderNames())</xsp:expr></td>
      </tr>
  <tr>
    <td>get-attribute attr</td><td><xsp-request:get-attribute name="attr"/></td>
    <td>getAttribute</td><td><xsp:expr>request.getAttribute("attr")</xsp:expr></td>
      </tr>
  <tr>
    <td>get-attribute-names (as array)</td><td><xsp:expr>String(<xsp-request:get-attribute-names as="array"/>)</xsp:expr></td>
    <td>getAttributeNames</td><td><xsp:expr>String(request.getAttributeNames())</xsp:expr></td>
      </tr>
  <tr>
    <td>get-requested-url</td><td><xsp-request:get-requested-url/></td>
      </tr>
  <tr>
    <td>get-remote-address</td><td><xsp-request:get-remote-address/></td>
    <td>getRemoteAddr</td><td><xsp:expr>request.getRemoteAddr()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-remote-user</td><td><xsp-request:get-remote-user/></td>
    <td>getRemoteUser</td><td><xsp:expr>request.getRemoteUser()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-context-path</td><td><xsp-request:get-context-path/></td>
    <td>getContextPath</td><td><xsp:expr>request.getContextPath()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-path-info</td><td><xsp-request:get-path-info/></td>
    <td>getPathInfo</td><td><xsp:expr>request.getPathInfo()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-server-name</td><td><xsp-request:get-server-name/></td>
    <td>getServerName</td><td><xsp:expr>request.getServerName()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-server-port</td><td><xsp-request:get-server-port/></td>
    <td>getServerPort</td><td><xsp:expr>request.getServerPort()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-method</td><td><xsp-request:get-method/></td>
    <td>getMethod</td><td><xsp:expr>request.getMethod()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-query-string</td><td><xsp-request:get-query-string/></td>
    <td>getQueryString</td><td><xsp:expr>request.getQueryString()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-protocol</td><td><xsp-request:get-protocol/></td>
    <td>getProtocol</td><td><xsp:expr>request.getProtocol()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-remote-host</td><td><xsp-request:get-remote-host/></td>
    <td>getRemoteHost</td><td><xsp:expr>request.getRemoteHost()</xsp:expr></td>
      </tr>
  <tr>
    <td>is-secure</td><td><xsp-request:is-secure/></td>
    <td>isSecure</td><td><xsp:expr>request.isSecure()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-servlet-path</td><td><xsp-request:get-servlet-path/></td>
    <td>getServletPath</td><td><xsp:expr>request.getServletPath()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-user-principal</td><td><xsp-request:get-user-principal/></td>
    <td>getUserPrincipal</td><td><xsp:expr>request.getUserPrincipal()</xsp:expr></td>
      </tr>
  <tr>
    <td>get-auth-type</td><td><xsp-request:get-auth-type/></td>
    <td>getAuthType</td><td><xsp:expr>request.getAuthType()</xsp:expr></td>
      </tr>
  <tr>
    <td>is-user-in-role</td><td><xsp-request:is-user-in-role role="admin"/></td>
    <td>isUserInRole</td><td><xsp:expr>request.isUserInRole("admin")</xsp:expr></td>
      </tr>
  <tr>
    <td>get-requested-session-id</td><td><xsp-request:get-requested-session-id/></td>
    <td>getRequestedSessionId</td><td><xsp:expr>request.getRequestedSessionId()</xsp:expr></td>
      </tr>
  </table>
  
  	<h1>xsp-request logicsheet output (as xml)</h1>
  <textarea cols="100" rows="30">
  get-uri                     <xsp-request:get-uri as="xml"/>
  get-sitemap-uri             <xsp-request:get-sitemap-uri as="xml"/>
  get-scheme                  <xsp-request:get-scheme as="xml"/>
  get-character-encoding      <xsp-request:get-character-encoding as="xml"/>
  get-content-length          <xsp-request:get-content-length as="xml"/>
  get-content-type            <xsp-request:get-content-type as="xml"/>
  get-locale                  <xsp-request:get-locale as="xml"/>
  get-locales                 <xsp-request:get-locales as="xml"/>
  get-parameter               <xsp-request:get-parameter name="param" as="xml"/>
  get-parameter with default  <xsp-request:get-parameter name="param" default="default" as="xml"/>
  get-parameter-values        <xsp-request:get-parameter-values name="param" as="xml"/>
  get-parameter-names         <xsp-request:get-parameter-names as="xml"/>
  get-header accept           <xsp-request:get-header name="accept" as="xml"/>
  get-header user-agent       <xsp-request:get-header name="user-agent" as="xml"/>
  get-header-names            <xsp-request:get-header-names as="xml"/>
  get-int-header - no sample
  get-date-header - no sample
  get-headers - no sample
  get-headers                 <xsp-request:get-headers name="accept-language" as="xml"/>
  get-attribute attr          <xsp-request:get-attribute name="attr" as="xml"/>
  get-attribute-names         <xsp-request:get-attribute-names as="xml"/>
  get-requested-url           <xsp-request:get-requested-url as="xml"/>
  get-remote-address          <xsp-request:get-remote-address as="xml"/>
  get-remote-user             <xsp-request:get-remote-user as="xml"/>
  get-context-path            <xsp-request:get-context-path as="xml"/>
  get-path-info               <xsp-request:get-path-info as="xml"/>
  get-server-name             <xsp-request:get-server-name as="xml"/>
  get-server-port             <xsp-request:get-server-port as="xml"/>
  get-method                  <xsp-request:get-method as="xml"/>
  get-query-string            <xsp-request:get-query-string as="xml"/>
  get-protocol                <xsp-request:get-protocol as="xml"/>
  get-remote-host             <xsp-request:get-remote-host as="xml"/>
  is-secure                   <xsp-request:is-secure as="xml"/>
  get-servlet-path            <xsp-request:get-servlet-path as="xml"/>
  get-user-principal          <xsp-request:get-user-principal as="xml"/>
  get-auth-type               <xsp-request:get-auth-type as="xml"/>
  is-user-in-role             <xsp-request:is-user-in-role role="admin" as="xml"/>
  get-requested-session-id    <xsp-request:get-requested-session-id as="xml"/>
  </textarea>
  
  <xsp-request:remove-attribute name="attr"/>
  
  <h2>Links</h2>
  <a href="request-test?param=value&amp;a=b&amp;x=y">Get</a>
  <br/>
  <form method="post" action="request-test">
  <input name="param"/>
  <input type="submit" value="Post"/>
  </form>
  
  
  </page>
  </xsp:page>
  
  
  
  1.1                  xml-cocoon2/src/webapp/docs/samples/xsp-js/simple.xsp
  
  Index: simple.xsp
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <xsp:page language="javascript" xmlns:xsp="http://apache.org/xsp">
    <page>
      <title>A Simple XSP Page</title>
      <content>
        <para>Hi there! I'm a simple dynamic page generated by XSP (eXtensible Server Pages).</para>
        <para>
          Testing Javascript:
          <ul>
            <li>
              <xsp:logic>
                i = 1;
                <xsp:content>Integer in Javascript: <xsp:expr>i</xsp:expr>
                </xsp:content>
              </xsp:logic>
            </li>
            <li>
              <xsp:logic>
                s = "Test Javascript String";
                <xsp:content>String in Javascript: <xsp:expr>s</xsp:expr>
                </xsp:content>
              </xsp:logic>
            </li>
            <li>
              Java 'page' object: <xsp:expr>page</xsp:expr>
            </li>
            <li>
              Java 'request' object: <xsp:expr>request</xsp:expr>
            </li>
            <li>
              Request locale object: <xsp:expr>request.getLocale()</xsp:expr>
            </li>
            <li>
              Java Null object: <xsp:expr>request.getUserPrincipal()</xsp:expr>
            </li>
          </ul>
        </para>
      </content>
    </page>
  </xsp:page>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org