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]

Reply via email to