You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2003/10/15 16:18:41 UTC

cvs commit: cocoon-2.2/src/webapp/samples/flow samples.xml

cziegeler    2003/10/15 07:18:41

  Modified:    src/webapp sitemap.xmap
               src/java/org/apache/cocoon/generation
                        JXTemplateGenerator.java
               src/webapp/samples/flow samples.xml
  Added:       src/webapp/samples/flow/jxcalc sitemap.xmap calc.js
               src/webapp/samples/flow/jxcalc/screens getNumberA.xml
                        getNumberB.xml displayResult.xml getOperator.xml
  Log:
  Syncing
  
  Revision  Changes    Path
  1.1                  cocoon-2.2/src/webapp/samples/flow/jxcalc/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
  
    <!-- indicates what flowscript to attach to this sitemap -->
    <map:flow language="javascript">
      <map:script src="calc.js"/>
    </map:flow>
  
    <map:pipelines>
      <map:pipeline>
        <!--+
            | produces the screens called by the flowscript
            +-->     
        <map:match pattern="page/*">
          <map:generate type="jx" src="screens/{1}.xml"/>
          <map:transform src="context://samples/common/style/xsl/html/simple-page2html.xsl">
            <map:parameter name="servletPath" value="{request:servletPath}"/>
            <map:parameter name="sitemapURI" value="{request:sitemapURI}"/>
            <map:parameter name="contextPath" value="{request:contextPath}"/>
            <map:parameter name="file" value="/samples/flow/jxcalc/screens/{1}.xml"/>
            <map:parameter name="remove" value="{0}"/>
          </map:transform>
          <map:serialize/>
        </map:match>
      </map:pipeline>
  
      <map:pipeline>
        <!--+
            | matches the page with the continuation ID and calls the flowscript
            | associated to this sitemap with the given continuation ID. The flow
            | engine will then look into the continuation store, retrieve
            | the correct continuation and resume execution of the flowscript
            | with that continuation. This guarantees transparent state 
            | resumption between requests without the need for anything else
            | (cookies or URL-encoded session IDs)
            +-->
        <map:match pattern="continue.*">
          <map:call continuation="{1}"/>
        </map:match>
  
        <!--+
            | matches the call to the beginning of the flow and calls the flow
            | from its entry point which, in this case is the 'calculator()'
            | javascript function.
            +-->
        <map:match pattern="">
          <map:call function="calculator"/>
        </map:match>
  
      </map:pipeline>
    </map:pipelines>
  </map:sitemap>
  
  
  
  1.1                  cocoon-2.2/src/webapp/samples/flow/jxcalc/calc.js
  
  Index: calc.js
  ===================================================================
  var a, b, op;
  
  function calculator()
  {
    a = getNumber("a");
    b = getNumber("b", a);
    op = getOperator(a, b);
  
    if (op == "plus")
      sendResult(a, b, op, a + b);
    else if (op == "minus")
      sendResult(a, b, op, a - b);
    else if (op == "multiply")
      sendResult(a, b, op, a * b);
    else if (op == "divide")
      sendResult(a, b, op, a / b);
    else
      sendResult("Error: Unkown operator!");
  }
  
  function getNumber(name, a, b)
  {
    var uri = "page/getNumber" + name.toUpperCase();
    cocoon.sendPageAndWait(uri, { "a" : a, "b" : b });
    return parseFloat(cocoon.request.getParameter(name));
  }
  
  function getOperator(a, b)
  {
    cocoon.sendPageAndWait("page/getOperator", { "a" : a, "b" : b });
    return cocoon.request.operator;
  }
  
  function sendResult(a, b, op, result)
  {
    cocoon.sendPage("page/displayResult",
             { 
                  "a" : a, 
                  "b" : b, 
                  "operator" : op, 
                  "result" : result 
             }
    );
  }
  
  
  
  1.1                  cocoon-2.2/src/webapp/samples/flow/jxcalc/screens/getNumberA.xml
  
  Index: getNumberA.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!--+
      | CVS: $Id: getNumberA.xml,v 1.1 2003/10/15 14:18:40 cziegeler Exp $
      | Author: Ovidiu Predescu "ovidiu@cup.hp.com"
      | Date: March 23, 2002
      +-->
  
  <page>
      <resources>
        <resource type="file" href="/samples/flow/calc/calc.js">Flowscript</resource>
      </resources>
      <title>Calculator</title>
      <content>
        <form method="post" action="continue.#{$continuation/id}">
          <para>Enter value of <strong>a</strong>: <input type="text" name="a"/></para>
          <input type="submit" name="submit" value="Enter"/>
        </form>
      </content>
  </page>
  
  
  
  1.1                  cocoon-2.2/src/webapp/samples/flow/jxcalc/screens/getNumberB.xml
  
  Index: getNumberB.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!--+
      | CVS: $Id: getNumberB.xml,v 1.1 2003/10/15 14:18:40 cziegeler Exp $
      | Author: Ovidiu Predescu "ovidiu@cup.hp.com"
      | Date: March 23, 2002
      +-->
  
  <page>
      <resources>
        <resource type="file" href="/samples/flow/calc/calc.js">Flowscript</resource>
      </resources>
      <title>Calculator</title>
      <content>
        <form method="post" action="continue.#{$continuation/id}">
          <para>a = <strong>#{a}</strong></para>
          <para>Enter value of <strong>b</strong>: <input type="text" name="b"/></para>
          <input type="submit" name="submit" value="Enter"/>
        </form>
      </content>
  </page>
  
  
  
  1.1                  cocoon-2.2/src/webapp/samples/flow/jxcalc/screens/displayResult.xml
  
  Index: displayResult.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!--+
      | CVS: $Id: displayResult.xml,v 1.1 2003/10/15 14:18:40 cziegeler Exp $
      | Author: Ovidiu Predescu "ovidiu@cup.hp.com"
      | Date: March 23, 2002
      +-->
  
  <page>
      <resources>
        <resource type="file" href="/samples/flow/calc/calc.js">Flowscript</resource>
      </resources>
      <title>Calculator</title>
      <content>
        <form action="./" method="post">
          <para>a = <strong>#{a}</strong></para>
          <para>b = <strong>#{b}</strong></para>
          <para>Operator = <strong>#{operator}</strong></para>
          <para>Result = <strong>#{result}</strong></para>
          <input type="submit" name="submit" value="Start over"/>
        </form>
      </content>
  </page>
  
  
  
  1.1                  cocoon-2.2/src/webapp/samples/flow/jxcalc/screens/getOperator.xml
  
  Index: getOperator.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!--+
      | CVS: $Id: getOperator.xml,v 1.1 2003/10/15 14:18:40 cziegeler Exp $
      | Author: Ovidiu Predescu "ovidiu@cup.hp.com"
      | Date: March 23, 2002
      +-->
  
  <page>
      <resources>
        <resource type="file" href="/samples/flow/calc/calc.js">Flowscript</resource>
      </resources>
      <title>Calculator</title>
      <content>
        <form  method="post" action="continue.#{$continuation/id}">
          <para>a = <strong>#{a}</strong></para>
          <para>b = <strong>#{b}</strong></para>
          <para>Enter operator
            <select name="operator">
              <option>plus</option>
              <option>minus</option>
              <option>multiply</option>
              <option>divide</option>
            </select>
          </para>
          <input type="submit" name="submit" value="Do it!"/>
        </form>
      </content>
    </page>
  
  
  
  1.32      +2 -1      cocoon-2.2/src/webapp/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/webapp/sitemap.xmap,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- sitemap.xmap	3 Sep 2003 20:27:01 -0000	1.31
  +++ sitemap.xmap	15 Oct 2003 14:18:40 -0000	1.32
  @@ -60,6 +60,7 @@
       <map:generator label="content" logger="sitemap.generator.request" name="request" pool-grow="2" pool-max="16" pool-min="2" src="org.apache.cocoon.generation.RequestGenerator"/>
       <map:generator label="content" logger="sitemap.generator.stream" name="stream" pool-grow="2" pool-max="16" pool-min="1" src="org.apache.cocoon.generation.StreamGenerator"/>
       <map:generator label="content" logger="sitemap.generator.status" name="status" pool-grow="2" pool-max="16" pool-min="2" src="org.apache.cocoon.generation.StatusGenerator"/>
  +    <map:generator label="content" logger="sitemap.generator.jx" name="jx" pool-grow="2" pool-max="16" pool-min="2" src="org.apache.cocoon.generation.JXTemplateGenerator"/>
       <!-- The notifying generator can only be used in a <handle-errors> section : it produces an XML
            representation of the exception that caused the error handler to be executed -->
       <map:generator name="notifying" src="org.apache.cocoon.sitemap.NotifyingGenerator"/>
  
  
  
  1.12      +25 -36    cocoon-2.2/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java
  
  Index: JXTemplateGenerator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- JXTemplateGenerator.java	11 Oct 2003 01:32:53 -0000	1.11
  +++ JXTemplateGenerator.java	15 Oct 2003 14:18:40 -0000	1.12
  @@ -1,4 +1,4 @@
  -/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  +/* 
   
    ============================================================================
                      The Apache Software License, Version 1.1
  @@ -412,7 +412,7 @@
                       result = ScriptRuntime.call(cx, result, thisObj, 
                                                   newArgs, scope);
                       if (result == Undefined.instance ||
  -                        result == ScriptableObject.NOT_FOUND) {
  +                        result == Scriptable.NOT_FOUND) {
                           result = null;
                           
                       } else {
  @@ -465,7 +465,7 @@
                       }
                       Object result = ScriptableObject.getProperty(thisObj, name);
                       if (result == Undefined.instance || 
  -                        result == ScriptableObject.NOT_FOUND) {
  +                        result == Scriptable.NOT_FOUND) {
                           result = null;
                       } 
                       if (result instanceof Wrapper) {
  @@ -551,7 +551,7 @@
                   try {
                       Object result = arr.get(index++, arr);
                       if (result == Undefined.instance ||
  -                        result == ScriptableObject.NOT_FOUND) {
  +                        result == Scriptable.NOT_FOUND) {
                           result = null;
                       } else {
                           if (!(result instanceof NativeJavaClass)) {
  @@ -594,7 +594,7 @@
                           ScriptableObject.getProperty(scope, 
                                                        ids[index++].toString());
                       if (result == Undefined.instance ||
  -                        result == ScriptableObject.NOT_FOUND) {
  +                        result == Scriptable.NOT_FOUND) {
                           result = null;
                       } else {
                           if (!(result instanceof NativeJavaClass)) {
  @@ -2483,7 +2483,7 @@
   
               public void endDocument() throws SAXException {
                   super.endDocument();
  -                gen.execute(gen.getConsumer(),
  +                gen.execute(gen.xmlConsumer,
                               gen.getJexlContext(),
                               gen.getJXPathContext(),
                               getStartEvent(), null);
  @@ -2517,7 +2517,6 @@
           }
       }
   
  -    private XMLConsumer consumer;
       private JXPathContext jxpathContext;
       private MyJexlContext globalJexlContext;
       private Variables variables;
  @@ -2533,16 +2532,11 @@
           return globalJexlContext;
       }
   
  -    private XMLConsumer getConsumer() {
  -        return consumer;
  -    }
  -
       public void recycle() {
           if ( this.resolver != null) {
               this.resolver.release(this.inputSource);            
           }
           this.inputSource = null;
  -        this.consumer = null;
           this.jxpathContext = null;
           this.globalJexlContext = null;
           this.variables = null;
  @@ -2579,12 +2573,9 @@
           Object bean = FlowHelper.getContextObject(objectModel);
           WebContinuation kont = FlowHelper.getWebContinuation(objectModel);
           setContexts(bean, kont,
  -                    ObjectModelHelper.getRequest(objectModel),
  -                    ObjectModelHelper.getResponse(objectModel),
  -                    ObjectModelHelper.getContext(objectModel),
                       parameters,
                       objectModel);
  -        definitions = new HashMap();
  +        this.definitions = new HashMap();
       }
       
       private void fillContext(Object contextObject, Map map) {
  @@ -2626,19 +2617,19 @@
   
       private void setContexts(Object contextObject,
                                WebContinuation kont,
  -                             Request request,
  -                             Response response,
  -                             org.apache.cocoon.environment.Context app,
                                Parameters parameters,
                                Map objectModel) {
  -        if (variables == null) {
  -            variables = new MyVariables(contextObject,
  +        final Request request = ObjectModelHelper.getRequest(objectModel);
  +        final Response response = ObjectModelHelper.getResponse(objectModel);
  +        final org.apache.cocoon.environment.Context app =
  +                  ObjectModelHelper.getContext(objectModel);
  +        
  +        this.variables = new MyVariables(contextObject,
                                           kont,
                                           request,
                                           response,
                                           app,
                                           parameters);
  -        }
           Map map;
           if (contextObject instanceof Map) {
               map = (Map)contextObject;
  @@ -2646,11 +2637,13 @@
               map = new HashMap();
               fillContext(contextObject, map);
           }
  +        
           jxpathContext = jxpathContextFactory.newContext(null, contextObject);
           jxpathContext.setVariables(variables);
           globalJexlContext = new MyJexlContext();
           globalJexlContext.setVars(map);
           map = globalJexlContext.getVars();
  +        
           if (contextObject != null) {
               map.put("flowContext", contextObject);
               // FIXME (VG): Is this required (what it's used for - examples)?
  @@ -2668,33 +2661,31 @@
           map.put("response", response);
           map.put("context", app);
           map.put("parameters", parameters);
  -        Object session = request.getSession(false);
  +        
  +        final Object session = request.getSession(false);
           if (session != null) {
               map.put("session", session);
           }
       }
   
  -    public void setConsumer(XMLConsumer consumer) {
  -        this.consumer = consumer;
  -    }
  -
       public void generate() 
           throws IOException, SAXException, ProcessingException {
  +        final String cacheKey = inputSource.getURI();
  +        
           StartDocument startEvent;
           synchronized (cache) {
  -            startEvent = (StartDocument)cache.get(inputSource.getURI());
  +            startEvent = (StartDocument)cache.get(cacheKey);
           }
           if (startEvent == null) {
  -            SourceValidity validity = inputSource.getValidity();
               Parser parser = new Parser();
               SourceUtil.parse(this.manager, this.inputSource, parser);
               startEvent = parser.getStartEvent();
  -            startEvent.compileTime = validity;
  +            startEvent.compileTime = inputSource.getValidity();
               synchronized (cache) {
  -                cache.put(inputSource.getURI(), startEvent);
  +                cache.put(cacheKey, startEvent);
               }
           }
  -        execute(consumer,
  +        execute(this.xmlConsumer,
                   globalJexlContext, jxpathContext, 
                   startEvent, null);
       }
  @@ -2757,8 +2748,7 @@
                                         startElement.attributes);
               } else if (ev instanceof EndElement) {
                   EndElement endElement = (EndElement)ev;
  -                StartElement startElement = 
  -                    (StartElement)endElement.startElement;
  +                StartElement startElement = endElement.startElement;
                   consumer.endElement(startElement.namespaceURI,
                                       startElement.localName,
                                       startElement.raw);
  @@ -2921,8 +2911,7 @@
                   consumer.endDocument();
               } else if (ev instanceof EndElement) {
                   EndElement endElement = (EndElement)ev;
  -                StartElement startElement = 
  -                    (StartElement)endElement.startElement;
  +                StartElement startElement = endElement.startElement;
                   consumer.endElement(startElement.namespaceURI,
                                       startElement.localName,
                                       startElement.raw);
  
  
  
  1.5       +4 -1      cocoon-2.2/src/webapp/samples/flow/samples.xml
  
  Index: samples.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/webapp/samples/flow/samples.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- samples.xml	1 Aug 2003 09:41:23 -0000	1.4
  +++ samples.xml	15 Oct 2003 14:18:41 -0000	1.5
  @@ -16,6 +16,9 @@
       to describe the web application flow between screens in a coherent 
       unique location and continuations to maintain state between requests.
      </sample>
  +    <sample name="Calculator 2" href="jxcalc/">
  +     Same sample as the calculator but using the JXGenerator instead of XSP.
  +    </sample>
      <sample name="User Preferences" href="prefs/">
       A common portion of an application which requires users to be
   	registered. This example shows how to use java objects from the