ovidiu 02/03/19 01:38:21
Modified: src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/javascript
JSCocoon.java
Log:
Save the InvokeContext instance in addition to Environment.
Automatically convert JavaScript objects to Java Map instances.
Revision Changes Path
1.3 +43 -2
xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/javascript/JSCocoon.java
Index: JSCocoon.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/javascript/JSCocoon.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- JSCocoon.java 18 Mar 2002 06:43:46 -0000 1.2
+++ JSCocoon.java 19 Mar 2002 09:38:21 -0000 1.3
@@ -1,13 +1,18 @@
package org.apache.cocoon.components.flow.javascript;
+import java.util.HashMap;
import java.util.Map;
import org.apache.cocoon.components.flow.AbstractInterpreter;
+import org.apache.cocoon.components.treeprocessor.InvokeContext;
import org.apache.cocoon.environment.Context;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Response;
+import org.mozilla.javascript.ScriptRuntime;
+import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
+import org.mozilla.javascript.Wrapper;
/**
* JavaScript interface to various Cocoon abstractions.
@@ -19,6 +24,7 @@
{
protected AbstractInterpreter interp;
protected Environment environment;
+ protected InvokeContext context;
public JSCocoon() {}
@@ -32,9 +38,10 @@
this.interp = interp;
}
- public void setEnvironment(Environment environment)
+ public void setContext(Environment environment, InvokeContext ctx)
{
this.environment = environment;
+ this.context = ctx;
}
public AbstractInterpreter jsGet_interpreter()
@@ -47,6 +54,11 @@
return environment;
}
+ public InvokeContext jsGet_invokeContext()
+ {
+ return context;
+ }
+
public Request jsGet_request()
{
Map objectModel = environment.getObjectModel();
@@ -92,6 +104,35 @@
Object bizData)
throws Exception
{
- interp.processPipeline(name, (Map)pipelineArgs, bizData);
+ if (pipelineArgs instanceof Wrapper)
+ pipelineArgs = ((Wrapper)pipelineArgs).unwrap();
+ else if (pipelineArgs instanceof Scriptable)
+ pipelineArgs = jsobjectToMap((Scriptable)pipelineArgs);
+
+ if (bizData instanceof Wrapper)
+ bizData = ((Wrapper)bizData).unwrap();
+ else if (bizData instanceof Scriptable)
+ bizData = jsobjectToMap((Scriptable)bizData);
+
+ environment.setAttribute("bean-dict", bizData);
+ try {
+ interp.processPipeline(name, (Map)pipelineArgs, bizData,
+ environment, context);
+ }
+ finally {
+ environment.removeAttribute("bean-dict");
+ }
+ }
+
+ public static Map jsobjectToMap(Scriptable jsobject)
+ {
+ HashMap hash = new HashMap();
+ Object[] ids = jsobject.getIds();
+ for (int i = 0; i < ids.length; i++) {
+ String key = ScriptRuntime.toString(ids[i]);
+ Object value = ScriptRuntime.toPrimitive(jsobject.get(key, jsobject));
+ hash.put(key, value);
+ }
+ return hash;
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]