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;
}
}