updated Makefile.common
[org.ibex.core.git] / src / org / ibex / net / XMLRPC.java
index 290415f..72a2c76 100644 (file)
@@ -92,17 +92,17 @@ public class XMLRPC extends JS {
         
         public void endElement(XML.Element c) {
             //#switch(c.getLocalName())
-            case "int": objects.setElementAt(new Integer(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
-            case "i4": objects.setElementAt(new Integer(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
-            case "boolean": objects.setElementAt(content.getBuf()[0] == '1' ? Boolean.TRUE : Boolean.FALSE, objects.size() - 1);
-            case "string": objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
-            case "double": objects.setElementAt(new Double(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
+            case "int": objects.setElementAt(JS.N(Integer.parseInt(new String(content.getBuf(), 0, content.size()))), objects.size() - 1);
+            case "i4": objects.setElementAt(JS.N(Integer.parseInt(new String(content.getBuf(), 0, content.size()))), objects.size() - 1);
+            case "boolean": objects.setElementAt(content.getBuf()[0] == '1' ? JS.T : JS.F, objects.size() - 1);
+            case "string": objects.setElementAt(JS.S(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
+            case "double": objects.setElementAt(JS.N(Double.parseDouble(new String(content.getBuf(), 0, content.size()))), objects.size() - 1);
             case "base64":
                 objects.setElementAt(new Stream.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())),
                                                           null), objects.size() - 1);
-            case "name": objects.addElement(new String(content.getBuf(), 0, content.size()));
+            case "name": objects.addElement(JS.S(new String(content.getBuf(), 0, content.size())));
             case "value": if ("".equals(objects.lastElement()))
-                objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
+                objects.setElementAt(JS.S(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
             case "dateTime.iso8601":
                 String s = new String(content.getBuf(), 0, content.size());
                 
@@ -129,11 +129,11 @@ public class XMLRPC extends JS {
                                     "the server sent a <dateTime.iso8601> tag which was malformed: " + s);
                 }
             case "member":
-                Object memberValue = objects.elementAt(objects.size() - 1);
+                JS memberValue = (JS) objects.elementAt(objects.size() - 1);
                 String memberName = (String)objects.elementAt(objects.size() - 2);
                 JS struct = (JS)objects.elementAt(objects.size() - 3);
                 try {
-                    struct.put(memberName, memberValue);
+                    struct.put(JS.S(memberName), memberValue);
                 } catch (JSExn e) {
                     throw new Error("this should never happen");
                 }
@@ -141,9 +141,9 @@ public class XMLRPC extends JS {
             case "data":
                 int i;
                 for(i=objects.size() - 1; objects.elementAt(i) != null; i--);
-                JSArray arr = new JSArray();
+                JS arr = new JSArray();
                 try {
-                    for(int j = i + 1; j<objects.size(); j++) arr.put(new Integer(j - i - 1), objects.elementAt(j));
+                    for(int j = i + 1; j<objects.size(); j++) arr.put(JS.N(j - i - 1), (JS)objects.elementAt(j));
                 } catch (JSExn e) {
                     throw new Error("this should never happen");
                 }
@@ -166,7 +166,7 @@ public class XMLRPC extends JS {
 
     // Send ///////////////////////////////////////////////////////////////////////////
 
-    protected String buildRequest(JSArray args) throws JSExn, IOException {
+    protected String buildRequest(JS[] args) throws JSExn, IOException {
         StringBuffer content = new StringBuffer();
         content.append("\r\n");
         content.append("<?xml version=\"1.0\"?>\n");
@@ -175,9 +175,9 @@ public class XMLRPC extends JS {
         content.append(method);
         content.append("</methodName>\n");
         content.append("        <params>\n");
-        for(int i=0; i<args.length(); i++) {
+        for(int i=0; i<args.length; i++) {
             content.append("            <param>\n");
-            appendObject(args.elementAt(i), content);
+            appendObject(args[i], content);
             content.append("            </param>\n");
         }
         content.append("        </params>\n");
@@ -186,9 +186,10 @@ public class XMLRPC extends JS {
     }
 
     /** Appends the XML-RPC representation of <code>o</code> to <code>sb</code> */
-    void appendObject(Object o, StringBuffer sb) throws JSExn {
-
-        if (o == null) {
+    void appendObject(JS o, StringBuffer sb) throws JSExn {
+        // JS:FIXME: Update for new api
+        throw new Error("FIXME");
+        /*if (o == null) {
             throw new JSExn("attempted to send a null value via XML-RPC");
 
         } else if (o instanceof Number) {
@@ -295,29 +296,25 @@ public class XMLRPC extends JS {
         } else {
             throw new JSExn("attempt to send object of type " + o.getClass().getName() + " via XML-RPC");
 
-        }
+        }*/
     }
 
 
     // Call Sequence //////////////////////////////////////////////////////////////////////////
 
-    public final Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
-        JSArray args = new JSArray();
-        for(int i=0; i<nargs; i++) args.addElement(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
-        return call(args);
-    }
-
-    public final Object call(final JSArray args) throws JSExn {
+    public final JS call(JS a0, JS a1, JS a2, JS[] rest, int nargs) throws JSExn {
+        final JS[] args = new JS[nargs];
+        for(int i=0;i<nargs;i++) args[i]= i==0?a0:i==1?a1:i==2?a2:rest[i-3];
         try {
             final JS.UnpauseCallback callback = JS.pause();
-            new java.lang.Thread() { public void run() { call(callback, args); }  }.start();
+            new java.lang.Thread() { public void run() { call(callback,args); }  }.start();
             return null; // doesn't matter since we paused
         } catch (NotPauseableException npe) {
             throw new JSExn("cannot invoke an XML-RPC call in the foreground thread");
         }
     }
 
-    final void call(final JS.UnpauseCallback callback, final JSArray args) {
+    final void call(final JS.UnpauseCallback callback, JS[] args) {
         try {
             if (Log.rpc) Log.info(this, "call to " + url + " : " + method);
             if (tracker == null) tracker = new Hash();
@@ -328,21 +325,21 @@ public class XMLRPC extends JS {
             BufferedReader br = new BufferedReader(new InputStreamReader(is));
             try {
                 new Helper().parse(br);
-                final Object result = fault ? new JSExn(objects.elementAt(0)) : objects.size() == 0 ? null : objects.elementAt(0);
-                Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(result); }});
+                final JSExn exn = fault ? new JSExn(objects.elementAt(0).toString()) : null;
+                final JS result = fault ? null : objects.size() == 0 ? null : (JS) objects.elementAt(0);
+                Scheduler.add(new Task() { public void perform() throws JSExn { if(fault) callback.unpause(exn); else callback.unpause(result); }});
             } finally {
                 tracker.clear();
                 objects.setSize(0);
             }
         } catch (final JSExn e) {
-            final Exception e2 = e;
-            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(e2); }});
+            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(e); }});
         } catch (final IOException e) {
             final Exception e2 = e;
-            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2)); }});
+            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2.toString())); }});
         } catch (final XML.Exn e) {
             final Exception e2 = e;
-            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2)); }});
+            Scheduler.add(new Task() { public void perform() throws JSExn { callback.unpause(new JSExn(e2.toString())); }});
         }
     }
 }