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/13 15:32:17 UTC
cvs commit: cocoon-2.1/src/webapp/samples/flow/jxcalc sitemap.xmap calc.js
cziegeler 2003/10/13 06:32:17
Modified: src/webapp/samples/flow samples.xml
Added: src/webapp/samples/flow/jxcalc/screens getNumberA.xml
getOperator.xml getNumberB.xml displayResult.xml
src/webapp/samples/flow/jxcalc sitemap.xmap calc.js
Log:
Adding jx based calculator demo
Revision Changes Path
1.5 +4 -1 cocoon-2.1/src/webapp/samples/flow/samples.xml
Index: samples.xml
===================================================================
RCS file: /home/cvs/cocoon-2.1/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 13 Oct 2003 13:32:17 -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
1.1 cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberA.xml
Index: getNumberA.xml
===================================================================
<?xml version="1.0"?>
<!--+
| CVS: $Id: getNumberA.xml,v 1.1 2003/10/13 13:32:17 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.1/src/webapp/samples/flow/jxcalc/screens/getOperator.xml
Index: getOperator.xml
===================================================================
<?xml version="1.0"?>
<!--+
| CVS: $Id: getOperator.xml,v 1.1 2003/10/13 13:32:17 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.1 cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberB.xml
Index: getNumberB.xml
===================================================================
<?xml version="1.0"?>
<!--+
| CVS: $Id: getNumberB.xml,v 1.1 2003/10/13 13:32:17 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.1/src/webapp/samples/flow/jxcalc/screens/displayResult.xml
Index: displayResult.xml
===================================================================
<?xml version="1.0"?>
<!--+
| CVS: $Id: displayResult.xml,v 1.1 2003/10/13 13:32:17 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.1/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">
<map:components>
<map:generators default="file">
<map:generator name="jx" src="org.apache.cocoon.generation.JXTemplateGenerator" label="content" logger="sitemap.generator.jx"/>
</map:generators>
</map:components>
<!-- 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.1/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
}
);
}