hillion 02/04/10 09:19:03
Modified: sources/org/apache/batik/bridge
BaseScriptingEnvironment.java
ScriptingEnvironment.java
sources/org/apache/batik/script Window.java
sources/org/apache/batik/script/rhino RhinoInterpreter.java
WindowWrapper.java
xdocs scriptFeatures.xml
Log:
- getURL(uri, function[, encoding]) implemented,
- doc updated.
Revision Changes Path
1.4 +18 -1
xml-batik/sources/org/apache/batik/bridge/BaseScriptingEnvironment.java
Index: BaseScriptingEnvironment.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/bridge/BaseScriptingEnvironment.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BaseScriptingEnvironment.java 10 Apr 2002 07:23:11 -0000 1.3
+++ BaseScriptingEnvironment.java 10 Apr 2002 16:19:02 -0000 1.4
@@ -56,7 +56,7 @@
* This class is the base class for SVG scripting.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: BaseScriptingEnvironment.java,v 1.3 2002/04/10 07:23:11 hillion
Exp $
+ * @version $Id: BaseScriptingEnvironment.java,v 1.4 2002/04/10 16:19:02 hillion
Exp $
*/
public class BaseScriptingEnvironment {
@@ -476,6 +476,23 @@
*/
public DocumentFragment parseXML(String text, Document doc) {
return null;
+ }
+
+ /**
+ * Gets data from the given URI.
+ * @param uri The URI where the data is located.
+ * @param h A handler called when the data is available.
+ */
+ public void getURL(String uri, GetURLHandler h) {
+ }
+
+ /**
+ * Gets data from the given URI.
+ * @param uri The URI where the data is located.
+ * @param h A handler called when the data is available.
+ * @param enc The character encoding of the data.
+ */
+ public void getURL(String uri, GetURLHandler h, String enc) {
}
/**
1.19 +63 -1
xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java
Index: ScriptingEnvironment.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- ScriptingEnvironment.java 10 Apr 2002 07:23:11 -0000 1.18
+++ ScriptingEnvironment.java 10 Apr 2002 16:19:02 -0000 1.19
@@ -8,7 +8,13 @@
package org.apache.batik.bridge;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.Reader;
import java.io.StringReader;
+import java.io.StringWriter;
+
+import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;
@@ -21,6 +27,8 @@
import org.apache.batik.script.Interpreter;
import org.apache.batik.script.InterpreterException;
+import org.apache.batik.util.EncodingUtilities;
+import org.apache.batik.util.ParsedURL;
import org.apache.batik.util.RunnableQueue;
import org.apache.batik.util.SVGConstants;
import org.apache.batik.util.XMLResourceDescriptor;
@@ -38,7 +46,7 @@
* This class contains the informations needed by the SVG scripting.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: ScriptingEnvironment.java,v 1.18 2002/04/10 07:23:11 hillion Exp $
+ * @version $Id: ScriptingEnvironment.java,v 1.19 2002/04/10 16:19:02 hillion Exp $
*/
public class ScriptingEnvironment extends BaseScriptingEnvironment {
@@ -617,6 +625,60 @@
}
return result;
}
+
+ /**
+ * Implements {@link
+ * org.apache.batik.script.Window#getURL(String,GetURLHandler)}.
+ */
+ public void getURL(String uri, GetURLHandler h) {
+ getURL(uri, h, "UTF8");
+ }
+
+ /**
+ * Implements {@link
+ * org.apache.batik.script.Window#getURL(String,GetURLHandler,String)}.
+ */
+ public void getURL(final String uri,
+ final GetURLHandler h,
+ final String enc) {
+ Thread t = new Thread() {
+ public void run() {
+ try {
+ URL burl;
+ burl = ((SVGOMDocument)document).getURLObject();
+ final ParsedURL purl = new ParsedURL(burl, uri);
+ String e = EncodingUtilities.javaEncoding(enc);
+ e = (e == null) ? enc : e;
+ Reader r =
+ new InputStreamReader(purl.openStream(), e);
+ r = new BufferedReader(r);
+ final StringWriter sw = new StringWriter();
+ int read;
+ char[] buf = new char[4096];
+ while ((read = r.read(buf, 0, buf.length)) != -1) {
+ sw.write(buf, 0, read);
+ }
+
+ updateRunnableQueue.invokeLater(new Runnable() {
+ public void run() {
+ h.getURLDone(true,
+ purl.getContentType(),
+ sw.toString());
+ }
+ });
+ } catch (Exception e) {
+ updateRunnableQueue.invokeLater(new Runnable() {
+ public void run() {
+ h.getURLDone(false, "", "");
+ }
+ });
+ }
+ }
+ };
+ t.setPriority(Thread.MIN_PRIORITY);
+ t.start();
+ }
+
/**
* Displays an alert dialog box.
1.3 +30 -1 xml-batik/sources/org/apache/batik/script/Window.java
Index: Window.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/script/Window.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Window.java 10 Apr 2002 07:23:11 -0000 1.2
+++ Window.java 10 Apr 2002 16:19:03 -0000 1.3
@@ -18,7 +18,7 @@
* environment of a SVG document.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: Window.java,v 1.2 2002/04/10 07:23:11 hillion Exp $
+ * @version $Id: Window.java,v 1.3 2002/04/10 16:19:03 hillion Exp $
*/
public interface Window {
@@ -71,6 +71,35 @@
* @return The document fragment or null on error.
*/
DocumentFragment parseXML(String text, Document doc);
+
+ /**
+ * Gets data from the given URI.
+ * @param uri The URI where the data is located.
+ * @param h A handler called when the data is available.
+ */
+ void getURL(String uri, GetURLHandler h);
+
+ /**
+ * Gets data from the given URI.
+ * @param uri The URI where the data is located.
+ * @param h A handler called when the data is available.
+ * @param enc The character encoding of the data.
+ */
+ void getURL(String uri, GetURLHandler h, String enc);
+
+ /**
+ * To handle the completion of a 'getURL()' call.
+ */
+ public interface GetURLHandler {
+
+ /**
+ * Called when 'getURL()' returns.
+ * @param success Whether the data was successfully retreived.
+ * @param mime The data MIME type.
+ * @param content The data.
+ */
+ void getURLDone(boolean success, String mime, String content);
+ }
/**
* Displays an alert dialog box.
1.14 +23 -1
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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- RhinoInterpreter.java 25 Feb 2002 15:05:33 -0000 1.13
+++ RhinoInterpreter.java 10 Apr 2002 16:19:03 -0000 1.14
@@ -37,7 +37,7 @@
* A simple implementation of <code>Interpreter</code> interface to use
* Rhino ECMAScript interpreter.
* @author <a href="mailto:[EMAIL PROTECTED]">Christophe Jolif</a>
- * @version $Id: RhinoInterpreter.java,v 1.13 2002/02/25 15:05:33 hillion Exp $
+ * @version $Id: RhinoInterpreter.java,v 1.14 2002/04/10 16:19:03 hillion Exp $
*/
public class RhinoInterpreter implements Interpreter {
private static String[] TO_BE_IMPORTED = {
@@ -293,6 +293,28 @@
} finally {
Context.exit();
}
+ }
+
+ /**
+ * To be used by <code>WindowWrapper</code>.
+ */
+ void callHandler(Function handler,
+ ArgumentsBuilder ab)
+ throws JavaScriptException {
+ Context ctx = Context.enter();
+ ctx.setWrapHandler(wrapHandler);
+ try {
+ handler.call(ctx, globalObject, globalObject, ab.buildArguments());
+ } finally {
+ Context.exit();
+ }
+ }
+
+ /**
+ * To build an argument list.
+ */
+ public interface ArgumentsBuilder {
+ Object[] buildArguments();
}
/**
1.6 +118 -6
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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- WindowWrapper.java 10 Apr 2002 07:23:11 -0000 1.5
+++ WindowWrapper.java 10 Apr 2002 16:19:03 -0000 1.6
@@ -8,10 +8,14 @@
package org.apache.batik.script.rhino;
+import java.io.IOException;
+import java.io.StringReader;
+
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.FunctionObject;
import org.mozilla.javascript.JavaScriptException;
+import org.mozilla.javascript.NativeBoolean;
import org.mozilla.javascript.NativeJavaObject;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
@@ -29,7 +33,7 @@
* This class wraps a Window object to expose it to the interpreter.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a>
- * @version $Id: WindowWrapper.java,v 1.5 2002/04/10 07:23:11 hillion Exp $
+ * @version $Id: WindowWrapper.java,v 1.6 2002/04/10 16:19:03 hillion Exp $
*/
public class WindowWrapper extends ScriptableObject {
@@ -172,12 +176,41 @@
int len = args.length;
WindowWrapper ww = (WindowWrapper)thisObj;
Window window = ww.window;
- if (len >= 2) {
- return window.parseXML
- ((String)NativeJavaObject.coerceType(String.class, args[0]),
- (Document)NativeJavaObject.coerceType(Document.class, args[1]));
+ if (len < 2) {
+ throw Context.reportRuntimeError("invalid argument count");
+ }
+ return window.parseXML
+ ((String)NativeJavaObject.coerceType(String.class, args[0]),
+ (Document)NativeJavaObject.coerceType(Document.class, args[1]));
+ }
+
+ /**
+ * Wraps the 'getURL' method of the Window interface.
+ */
+ public static void jsFunction_getURL(Context cx,
+ Scriptable thisObj,
+ Object[] args,
+ Function funObj)
+ throws JavaScriptException {
+ int len = args.length;
+ WindowWrapper ww = (WindowWrapper)thisObj;
+ Window window = ww.window;
+ if (len < 2) {
+ throw Context.reportRuntimeError("invalid argument count");
+ }
+ RhinoInterpreter interp =
+ (RhinoInterpreter)window.getInterpreter();
+ String uri;
+ uri = (String)NativeJavaObject.coerceType(String.class, args[0]);
+ GetURLFunctionWrapper fw;
+ fw = new GetURLFunctionWrapper(interp, (Function)args[1], ww);
+ if (len == 2) {
+ window.getURL(uri, fw);
+ } else {
+ window.getURL
+ (uri, fw,
+ (String)NativeJavaObject.coerceType(String.class, args[2]));
}
- return null;
}
/**
@@ -283,6 +316,85 @@
public void run() {
try {
interpreter.callHandler(function, arguments);
+ } catch (JavaScriptException e) {
+ throw new WrappedException(e);
+ }
+ }
+ }
+
+ /**
+ * To wrap a function passed to getURL().
+ */
+ protected static class GetURLFunctionWrapper
+ implements Window.GetURLHandler {
+
+ /**
+ * The current interpreter.
+ */
+ protected RhinoInterpreter interpreter;
+
+ /**
+ * The function wrapper.
+ */
+ protected Function function;
+
+ /**
+ * The WindowWrapper.
+ */
+ protected WindowWrapper windowWrapper;
+
+ /**
+ * Creates a wrapper.
+ */
+ public GetURLFunctionWrapper(RhinoInterpreter ri, Function fct,
+ WindowWrapper ww) {
+ interpreter = ri;
+ function = fct;
+ 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.callHandler(function,
+ new RhinoInterpreter.ArgumentsBuilder() {
+ public Object[] buildArguments() {
+ try {
+ Object[] arguments = new Object[1];
+ ScriptableObject so =
+ (ScriptableObject)interpreter.evaluate
+ (new StringReader("new Object()"));
+ so.put("success", so,
+ Context.toObject((success) ?
+ Boolean.TRUE :
+ Boolean.FALSE,
+ windowWrapper));
+ 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 (IOException e) {
+ throw new WrappedException(e);
+ } catch (InterpreterException e) {
+ throw new WrappedException(e);
+ }
+ }
+ });
} catch (JavaScriptException e) {
throw new WrappedException(e);
}
1.6 +34 -1 xml-batik/xdocs/scriptFeatures.xml
Index: scriptFeatures.xml
===================================================================
RCS file: /home/cvs/xml-batik/xdocs/scriptFeatures.xml,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- scriptFeatures.xml 10 Apr 2002 07:23:11 -0000 1.5
+++ scriptFeatures.xml 10 Apr 2002 16:19:03 -0000 1.6
@@ -11,7 +11,7 @@
<!-- ========================================================================= -->
<!-- author [EMAIL PROTECTED] -->
-<!-- version $Id: scriptFeatures.xml,v 1.5 2002/04/10 07:23:11 hillion Exp $ -->
+<!-- version $Id: scriptFeatures.xml,v 1.6 2002/04/10 16:19:03 hillion Exp $ -->
<!-- ========================================================================= -->
<document>
<header>
@@ -274,6 +274,39 @@
<p>
This method returns a <code>org.w3c.dom.DocumentFragment</code> object.
</p>
+
+
+ <!-- ========================================================= -->
+
+ <table>
+ <tr>
+ <td>Method <code>getURL</code>(<em>uri</em>,
+ <em>function</em>[,
+ <em>encoding</em>])</td>
+
+ </tr>
+ </table>
+ <p>
+ Gets data from the given URI. This method returns immediately and
+ the given function is called when the data is fully downloaded.
+ </p>
+ <ul>
+ <li><em>uri</em>: A string representing the location of the data.</li>
+ <li><em>function</em>: A function called when the data is available,
+ or when the loading has failed. The argument passed to the
+ function is an ECMAScript Object with 3 properties:
+ <ul>
+ <li><em>success</em>: true if the data is available, false
+ otherwise,</li>
+ <li><em>contentType</em>: the content type of the data, if the
+ information is known by the viewer,</li>
+ <li><em>content</em>: A string representing the data.</li>
+ </ul>
+ </li>
+ <li><em>encoding</em>: The character encoding of the data file,
+ by default UTF-8 is used.</li>
+
+ </ul>
</s1>
</body>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]