You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by co...@apache.org on 2003/05/01 11:32:35 UTC

cvs commit: cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript JavaScriptInterpreter.java ScriptablePointer.java ScriptablePropertyHandler.java ScriptablePropertyPointer.java

coliver     2003/05/01 02:32:35

  Modified:    src/java/org/apache/cocoon/components/flow/javascript
                        JavaScriptInterpreter.java ScriptablePointer.java
                        ScriptablePropertyHandler.java
                        ScriptablePropertyPointer.java
  Log:
  Fixed JXPath introspection support
  
  Revision  Changes    Path
  1.17      +26 -1     cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/JavaScriptInterpreter.java
  
  Index: JavaScriptInterpreter.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/JavaScriptInterpreter.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- JavaScriptInterpreter.java	27 Apr 2003 08:37:28 -0000	1.16
  +++ JavaScriptInterpreter.java	1 May 2003 09:32:34 -0000	1.17
  @@ -72,6 +72,7 @@
   import org.apache.excalibur.source.Source;
   
   import org.mozilla.javascript.Context;
  +import org.mozilla.javascript.EcmaError;
   import org.mozilla.javascript.EvaluatorException;
   import org.mozilla.javascript.Function;
   import org.mozilla.javascript.JavaScriptException;
  @@ -584,6 +585,18 @@
   
                                                                           ex.getMessage()));
               throw new CascadingRuntimeException(ee.getMessage(), unwrap(ex));
  +        } catch (EcmaError ee) {
  +            String msg = ToolErrorReporter.getMessage("msg.uncaughtJSException", ee.toString());
  +            if (ee.getSourceName() != null) {
  +                Context.reportRuntimeError(msg, 
  +                                           ee.getSourceName(),
  +                                           ee.getLineNumber(),
  +                                           ee.getLineSource(),
  +                                           ee.getColumnNumber());
  +            } else {
  +                Context.reportRuntimeError(msg);
  +            }
  +            throw new CascadingRuntimeException(ee.getMessage(), ee);
           } finally {
               exitContext(thrScope);
           }
  @@ -646,6 +659,18 @@
                   Context.reportRuntimeError(ToolErrorReporter.getMessage("msg.uncaughtJSException",
                                                                           ex.getMessage()));
               throw new CascadingRuntimeException(ee.getMessage(), unwrap(ex));
  +        } catch (EcmaError ee) {
  +            String msg = ToolErrorReporter.getMessage("msg.uncaughtJSException", ee.toString());
  +            if (ee.getSourceName() != null) {
  +                Context.reportRuntimeError(msg, 
  +                                           ee.getSourceName(),
  +                                           ee.getLineNumber(),
  +                                           ee.getLineSource(),
  +                                           ee.getColumnNumber());
  +            } else {
  +                Context.reportRuntimeError(msg);
  +            }
  +            throw new CascadingRuntimeException(ee.getMessage(), ee);
           } finally {
               Context.exit();
           }
  
  
  
  1.3       +36 -16    cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/ScriptablePointer.java
  
  Index: ScriptablePointer.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/ScriptablePointer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ScriptablePointer.java	16 Mar 2003 17:49:12 -0000	1.2
  +++ ScriptablePointer.java	1 May 2003 09:32:34 -0000	1.3
  @@ -1,4 +1,4 @@
  -/*
  +/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
   
    ============================================================================
                      The Apache Software License, Version 1.1
  @@ -50,8 +50,10 @@
   import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   import org.apache.commons.jxpath.ri.model.beans.PropertyPointer;
  +import org.apache.commons.jxpath.ri.model.beans.PropertyOwnerPointer;
   import org.apache.commons.jxpath.ri.model.dynamic.DynamicPointer;
   import org.mozilla.javascript.NativeArray;
  +import org.mozilla.javascript.Wrapper;
   import org.mozilla.javascript.Scriptable;
   import org.mozilla.javascript.ScriptableObject;
   
  @@ -73,13 +75,6 @@
           node = object;
       }
   
  -    public boolean isCollection() {
  -        if (node instanceof NativeArray) {
  -            return true;
  -        }
  -        return false;
  -    }
  -
       public ScriptablePointer(QName name,
                                Scriptable object,
                                Locale locale) {
  @@ -87,22 +82,47 @@
           node = object;
       }
   
  +    public PropertyPointer getPropertyPointer(){
  +        return new ScriptablePropertyPointer(this, handler);
  +    }
  +
       public int getLength() {
  -        if (ScriptableObject.hasProperty(node, "length")) {
  -            Object val = ScriptableObject.getProperty(node, "length");
  -            if (val instanceof Number) {
  -                return ((Number)val).intValue();
  +        Object obj = getBaseValue();
  +        if (obj instanceof Scriptable) {
  +            Scriptable node = (Scriptable)obj;
  +            if (node instanceof NativeArray) {
  +                return (int)((NativeArray)node).jsGet_length();
  +            }
  +            if (ScriptableObject.hasProperty(node, "length")) {
  +                Object val = ScriptableObject.getProperty(node, "length");
  +                if (val instanceof Number) {
  +                    return ((Number)val).intValue();
  +                }
               }
           }
           return super.getLength();
       }
   
  -    public PropertyPointer getPropertyPointer(){
  -        return new ScriptablePropertyPointer(this, handler);
  +    public Object getImmediateNode() {
  +        Object value;
  +        if (index == WHOLE_COLLECTION) {
  +            value = node;
  +        } else {
  +            value = ScriptableObject.getProperty(node, index);
  +            if (value == ScriptableObject.NOT_FOUND) {
  +                value = node; // hack: same behavior as ValueUtils.getValue()
  +            } 
  +        }
  +        if (value instanceof Wrapper) {
  +            value = ((Wrapper)value).unwrap();
  +        }
  +        return value;
       }
   
       public void setValue(Object value){
  -        getParent().setValue(value);
  +        if (getParent() != null) {
  +            getParent().setValue(value);
  +        }
       }
   
   }
  
  
  
  1.4       +2 -2      cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/ScriptablePropertyHandler.java
  
  Index: ScriptablePropertyHandler.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/ScriptablePropertyHandler.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ScriptablePropertyHandler.java	24 Mar 2003 14:33:56 -0000	1.3
  +++ ScriptablePropertyHandler.java	1 May 2003 09:32:34 -0000	1.4
  @@ -1,4 +1,4 @@
  -/*
  +/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
   
    ============================================================================
                      The Apache Software License, Version 1.1
  
  
  
  1.3       +25 -23    cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/ScriptablePropertyPointer.java
  
  Index: ScriptablePropertyPointer.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/ScriptablePropertyPointer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ScriptablePropertyPointer.java	16 Mar 2003 17:49:12 -0000	1.2
  +++ ScriptablePropertyPointer.java	1 May 2003 09:32:34 -0000	1.3
  @@ -1,4 +1,4 @@
  -/*
  +/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
   
    ============================================================================
                      The Apache Software License, Version 1.1
  @@ -88,6 +88,29 @@
           return super.getLength();
       }
   
  +    public Object getImmediateNode() {
  +        Object value;
  +        if (index == WHOLE_COLLECTION) {
  +            value = getBaseValue();
  +        }
  +        else {
  +            value = getBaseValue();
  +            if (value instanceof Scriptable) {
  +                Object property = 
  +                    ScriptableObject.getProperty((Scriptable)value, index);
  +                if (property != ScriptableObject.NOT_FOUND) { 
  +                    value = property; // hack?
  +                } 
  +            } else {
  +                return super.getImmediateNode();
  +            }
  +        }
  +        if (value instanceof Wrapper) {
  +            value = ((Wrapper)value).unwrap();
  +        }
  +        return value;
  +    }
  +
       public Object getValue() {
           Object val = getNode();
           if (val instanceof NativeArray) {
  @@ -178,27 +201,6 @@
               index = string.indexOf('\"');
           }
           return string;
  -    }
  -
  -    public Object getImmediateNode() {
  -        Object value;
  -        if (index == WHOLE_COLLECTION) {
  -            value = handler.getProperty(getBean(), getPropertyName());
  -        }
  -        else {
  -            value = handler.getProperty(getBean(), getPropertyName());
  -            if (value instanceof Scriptable) {
  -                value = ScriptableObject.getProperty((Scriptable)value, index);
  -                if (value == ScriptableObject.NOT_FOUND) {
  -                    value = null;
  -                } else if (value instanceof Wrapper) {
  -                    value = ((Wrapper)value).unwrap();
  -                } 
  -            } else {
  -                return super.getImmediateNode();
  -            }
  -        }
  -        return value;
       }
   
   }