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