cjolif 2002/11/06 06:43:27
Modified: sources/org/apache/batik/script/rhino RhinoInterpreter.java
WindowWrapper.java
Log:
add the ability to pass an Object instead of a Function to
getURL(), in this case the operationComplete method is
called (like in Adobe SVG Viewer)
Revision Changes Path
1.21 +26 -9
xml-batik/sources/org/apache/batik/script/rhino/RhinoInterpreter.java
Index: RhinoInterpreter.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/script/rhino/RhinoInterpreter.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- RhinoInterpreter.java 5 Nov 2002 17:29:51 -0000 1.20
+++ RhinoInterpreter.java 6 Nov 2002 14:43:27 -0000 1.21
@@ -356,14 +356,14 @@
// The window becomes the global object.
globalObject =
(ScriptableObject)globalObject.get(BIND_NAME_WINDOW,
globalObject);
-
- // we need to init it as a global object...
- ctx = enterContext();
- try {
- ctx.initStandardObjects(globalObject);
- } finally {
- Context.exit();
- }
+
+ // we need to init it as a global object...
+ ctx = enterContext();
+ try {
+ ctx.initStandardObjects(globalObject);
+ } finally {
+ Context.exit();
+ }
} catch (Exception e) {
// Cannot happen.
}
@@ -383,6 +383,23 @@
arg = Context.toObject(arg, globalObject);
Object[] args = {arg};
handler.call(ctx, globalObject, globalObject, args);
+ } finally {
+ Context.exit();
+ }
+ }
+
+ /**
+ * To be used by <code>WindowWrapper</code>.
+ */
+ void callMethod(ScriptableObject obj,
+ String methodName,
+ ArgumentsBuilder ab)
+ throws JavaScriptException {
+ Context ctx = enterContext();
+
+ ctx.setWrapHandler(wrapHandler);
+ try {
+ ScriptableObject.callMethod(obj, methodName, ab.buildArguments());
} finally {
Context.exit();
}
1.11 +94 -12
xml-batik/sources/org/apache/batik/script/rhino/WindowWrapper.java
Index: WindowWrapper.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/script/rhino/WindowWrapper.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- WindowWrapper.java 6 Jun 2002 08:24:10 -0000 1.10
+++ WindowWrapper.java 6 Nov 2002 14:43:27 -0000 1.11
@@ -20,6 +20,7 @@
import org.mozilla.javascript.FunctionObject;
import org.mozilla.javascript.JavaScriptException;
import org.mozilla.javascript.NativeJavaObject;
+import org.mozilla.javascript.NativeObject;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
import org.mozilla.javascript.Undefined;
@@ -41,7 +42,7 @@
public class WindowWrapper extends ScriptableObject {
private final static Object[] EMPTY_ARGUMENTS = new Object[0];
-
+
/**
* The rhino interpreter.
*/
@@ -61,12 +62,12 @@
/**
* The ecmascript constructor for the Window class.
*/
- public static Object jsConstructor(Context cx, Object[] args,
+ public static Object jsConstructor(Context cx, Object[] args,
Function ctorObj, boolean inNewExpr) {
WindowWrapper result = new WindowWrapper();
result.window = (Window)((Wrapper)args[0]).unwrap();
return result;
- }
+ }
public String getClassName() {
return "Window";
@@ -207,9 +208,9 @@
throw Context.reportRuntimeError("invalid argument count");
}
- AccessControlContext acc =
+ AccessControlContext acc =
((RhinoInterpreter)window.getInterpreter()).getAccessControlContext();
-
+
return AccessController.doPrivileged( new PrivilegedAction() {
public Object run() {
return window.parseXML
@@ -236,20 +237,26 @@
RhinoInterpreter interp =
(RhinoInterpreter)window.getInterpreter();
final String uri = (String)NativeJavaObject.coerceType(String.class,
args[0]);
- final GetURLFunctionWrapper fw = new GetURLFunctionWrapper(interp,
(Function)args[1], ww);
-
- AccessControlContext acc =
+ Window.GetURLHandler urlHandler = null;
+ if (args[1] instanceof Function) {
+ urlHandler = new GetURLFunctionWrapper(interp, (Function)args[1], ww);
+ } else {
+ urlHandler = new GetURLObjectWrapper(interp, (NativeObject)args[1], ww);
+ }
+ final Window.GetURLHandler fw = urlHandler;
+
+ AccessControlContext acc =
((RhinoInterpreter)window.getInterpreter()).getAccessControlContext();
if (len == 2) {
- AccessController.doPrivileged( new PrivilegedAction() {
+ AccessController.doPrivileged(new PrivilegedAction() {
public Object run(){
window.getURL(uri, fw);
return null;
}
}, acc);
} else {
- AccessController.doPrivileged( new PrivilegedAction() {
+ AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
window.getURL
(uri, fw,
@@ -374,7 +381,7 @@
*/
protected static class GetURLFunctionWrapper
implements Window.GetURLHandler {
-
+
/**
* The current interpreter.
*/
@@ -441,6 +448,81 @@
}
});
} catch (JavaScriptException e) {
+ throw new WrappedException(e);
+ }
+ }
+ }
+
+ /**
+ * To wrap an object passed to getURL().
+ */
+ private static class GetURLObjectWrapper
+ implements Window.GetURLHandler {
+
+ /**
+ * The current interpreter.
+ */
+ private RhinoInterpreter interpreter;
+
+ /**
+ * The object wrapper.
+ */
+ private ScriptableObject object;
+
+ /**
+ * The WindowWrapper.
+ */
+ private WindowWrapper windowWrapper;
+
+ private Object[] array = new Object[1];
+ private static final String COMPLETE = "operationComplete";
+
+ /**
+ * Creates a wrapper.
+ */
+ public GetURLObjectWrapper(RhinoInterpreter ri,
+ ScriptableObject obj,
+ WindowWrapper ww) {
+ interpreter = ri;
+ object = obj;
+ windowWrapper = ww;
+ }
+
+ /**
+ * Called before 'getURL()' returns.
+ * @param success Whether the data was successfully retreived.
+ * @param mime The data MIME type.
+ * @param content The data.
+ */
+ public void getURLDone(final boolean success,
+ final String mime,
+ final String content) {
+ try {
+ interpreter.callMethod(object, COMPLETE,
+ new RhinoInterpreter.ArgumentsBuilder() {
+ public Object[] buildArguments() {
+ Object[] arguments = new Object[1];
+ ScriptableObject so =
+ new NativeObject();
+ so.put("success", so,
+ (success) ?
+ Boolean.TRUE : Boolean.FALSE);
+ if (mime != null) {
+ so.put("contentType", so,
+ Context.toObject(mime,
+
windowWrapper));
+ }
+ if (content != null) {
+ so.put("content", so,
+ Context.toObject(content,
+
windowWrapper));
+ }
+ arguments[0] = so;
+ return arguments;
+ }
+ });
+ } catch (JavaScriptException e) {
+ Context.exit();
throw new WrappedException(e);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]