2003/09/24 07:33:32
[org.ibex.core.git] / src / org / xwt / XMLRPC.java
index f103ad0..12c6466 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL]
+// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
 package org.xwt;
 
 import java.io.*;
@@ -79,97 +79,97 @@ class XMLRPC extends JS.Callable {
     // Methods to Recieve and parse XML-RPC Response ////////////////////////////////////////////////////
 
     private class Helper extends XML {
-       public Helper() { super(BUFFER_SIZE); }
-
-       public void startElement(XML.Element c) {
-           content.reset();
-           if (c.localName.equals("fault")) fault = true;
-           else if (c.localName.equals("struct")) objects.setElementAt(new JS.Obj(), objects.size() - 1);
-           else if (c.localName.equals("array")) objects.setElementAt(null, objects.size() - 1);
-           else if (c.localName.equals("value")) objects.addElement("");
-       }
-       
-       public void endElement(XML.Element c) {
-           
-           if (c.localName.equals("int") || c.localName.equals("i4"))
-               objects.setElementAt(new Integer(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
-           
-           else if (c.localName.equals("boolean"))
-               objects.setElementAt(content.getBuf()[0] == '1' ? Boolean.TRUE : Boolean.FALSE, objects.size() - 1);
-           
-           else if (c.localName.equals("string"))
-               objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
-           
-           else if (c.localName.equals("double"))
-               objects.setElementAt(new Double(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
-           
-           else if (c.localName.equals("base64"))
-               objects.setElementAt(new ByteStream(Base64.decode(new String(content.getBuf(), 0, content.size()))), objects.size() - 1);
-           
-           else if (c.localName.equals("name"))
-               objects.addElement(new String(content.getBuf(), 0, content.size()));
-           
-           else if (c.localName.equals("value") && "".equals(objects.lastElement()))
-               objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
-           
-           else if (c.localName.equals("dateTime.iso8601")) {
-               throw new Error("not implemented");
-               /*
-                 String s = new String(content.getBuf(), 0, content.size());
-                 
-                 // strip whitespace
-                 int i=0;
-                 while(Character.isWhitespace(s.charAt(i))) i++;
-                 if (i > 0) s = s.substring(i);
-                 
-                 try {
-                 NativeDate nd = (NativeDate)Context.enter().newObject(org.xwt.util.JS.Obj.defaultObjects, "Date");
-                 double date = NativeDate.date_msecFromDate(Double.valueOf(s.substring(0, 4)).doubleValue(),
-                 Double.valueOf(s.substring(4, 6)).doubleValue() - 1,
-                 Double.valueOf(s.substring(6, 8)).doubleValue(),
-                 Double.valueOf(s.substring(9, 11)).doubleValue(),
-                 Double.valueOf(s.substring(12, 14)).doubleValue(),
-                 Double.valueOf(s.substring(15, 17)).doubleValue(),
-                 (double)0
-                 );
-                 nd.jsFunction_setTime(NativeDate.internalUTC(date));
-                 objects.setElementAt(nd, objects.size() - 1);
-                 
-                 } catch (Exception e) {
-                 if (Log.on) Log.log(this, "error parsing date : " + s);
-                 if (Log.on) Log.log(this, e);
-                 }
-               */
-               
-           } else if (c.localName.equals("member")) {
-               Object memberValue = objects.elementAt(objects.size() - 1);
-               String memberName = (String)objects.elementAt(objects.size() - 2);
-               JS struct = (JS)objects.elementAt(objects.size() - 3);
-               struct.put(memberName, memberValue);
-               objects.setSize(objects.size() - 2);
-               
-           } else if (c.localName.equals("data")) {
-               int i;
-               for(i=objects.size() - 1; objects.elementAt(i) != null; i--);
-               JS.Array arr = new JS.Array();
-               for(int j = i + 1; j<objects.size(); j++) arr.put(new Integer(j - i - 1), objects.elementAt(j));
-               objects.setElementAt(arr, i);
-               objects.setSize(i + 1);
-               
-           }
-           
-           content.reset();
-       }
-       
-       public void characters(char[] ch, int start, int length) {
-           try { content.write(ch, start, length); }
-           catch (Exception e) { 
-               if (Log.on) Log.log(this, "Exception in XMLRPC.content() -- this should never happen");
-               if (Log.on) Log.log(this, e);
-           }
-       }
-       
-       public void whitespace(char[] ch, int start, int length) {}
+        public Helper() { super(BUFFER_SIZE); }
+
+        public void startElement(XML.Element c) {
+            content.reset();
+            if (c.localName.equals("fault")) fault = true;
+            else if (c.localName.equals("struct")) objects.setElementAt(new JS.Obj(), objects.size() - 1);
+            else if (c.localName.equals("array")) objects.setElementAt(null, objects.size() - 1);
+            else if (c.localName.equals("value")) objects.addElement("");
+        }
+        
+        public void endElement(XML.Element c) {
+            
+            if (c.localName.equals("int") || c.localName.equals("i4"))
+                objects.setElementAt(new Integer(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
+            
+            else if (c.localName.equals("boolean"))
+                objects.setElementAt(content.getBuf()[0] == '1' ? Boolean.TRUE : Boolean.FALSE, objects.size() - 1);
+            
+            else if (c.localName.equals("string"))
+                objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
+            
+            else if (c.localName.equals("double"))
+                objects.setElementAt(new Double(new String(content.getBuf(), 0, content.size())), objects.size() - 1);
+            
+            else if (c.localName.equals("base64"))
+                objects.setElementAt(new Res.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size()))), objects.size() - 1);
+
+            else if (c.localName.equals("name"))
+                objects.addElement(new String(content.getBuf(), 0, content.size()));
+            
+            else if (c.localName.equals("value") && "".equals(objects.lastElement()))
+                objects.setElementAt(new String(content.getBuf(), 0, content.size()), objects.size() - 1);
+            
+            else if (c.localName.equals("dateTime.iso8601")) {
+                throw new Error("not implemented");
+                /*
+                  String s = new String(content.getBuf(), 0, content.size());
+                  
+                  // strip whitespace
+                  int i=0;
+                  while(Character.isWhitespace(s.charAt(i))) i++;
+                  if (i > 0) s = s.substring(i);
+                  
+                  try {
+                  NativeDate nd = (NativeDate)JS.Thread.enter().newObject(org.xwt.util.JS.Obj.defaultObjects, "Date");
+                  double date = NativeDate.date_msecFromDate(Double.valueOf(s.substring(0, 4)).doubleValue(),
+                  Double.valueOf(s.substring(4, 6)).doubleValue() - 1,
+                  Double.valueOf(s.substring(6, 8)).doubleValue(),
+                  Double.valueOf(s.substring(9, 11)).doubleValue(),
+                  Double.valueOf(s.substring(12, 14)).doubleValue(),
+                  Double.valueOf(s.substring(15, 17)).doubleValue(),
+                  (double)0
+                  );
+                  nd.jsFunction_setTime(NativeDate.internalUTC(date));
+                  objects.setElementAt(nd, objects.size() - 1);
+                  
+                  } catch (Exception e) {
+                  if (Log.on) Log.log(this, "error parsing date : " + s);
+                  if (Log.on) Log.log(this, e);
+                  }
+                */
+                
+            } else if (c.localName.equals("member")) {
+                Object memberValue = objects.elementAt(objects.size() - 1);
+                String memberName = (String)objects.elementAt(objects.size() - 2);
+                JS struct = (JS)objects.elementAt(objects.size() - 3);
+                struct.put(memberName, memberValue);
+                objects.setSize(objects.size() - 2);
+                
+            } else if (c.localName.equals("data")) {
+                int i;
+                for(i=objects.size() - 1; objects.elementAt(i) != null; i--);
+                JS.Array arr = new JS.Array();
+                for(int j = i + 1; j<objects.size(); j++) arr.put(new Integer(j - i - 1), objects.elementAt(j));
+                objects.setElementAt(arr, i);
+                objects.setSize(i + 1);
+                
+            }
+            
+            content.reset();
+        }
+        
+        public void characters(char[] ch, int start, int length) {
+            try { content.write(ch, start, length); }
+            catch (Exception e) { 
+                if (Log.on) Log.log(this, "Exception in XMLRPC.content() -- this should never happen");
+                if (Log.on) Log.log(this, e);
+            }
+        }
+        
+        public void whitespace(char[] ch, int start, int length) {}
     }
 
     // Methods to make outbound XML-RPC request ///////////////////////////////////////////////////
@@ -196,10 +196,10 @@ class XMLRPC extends JS.Callable {
             sb.append(((Boolean)o).booleanValue() ? "1" : "0");
             sb.append("</boolean></value>\n");
 
-        } else if (o instanceof ByteStream) {
+        } else if (o instanceof Res) {
             try {
                 sb.append("                <value><base64>\n");
-                InputStream is = ((ByteStream)o).getInputStream();
+                InputStream is = ((Res)o).getInputStream();
                 byte[] buf = new byte[54];
                 while(true) {
                     int numread = is.read(buf, 0, 54);
@@ -240,11 +240,10 @@ class XMLRPC extends JS.Callable {
             }
             sb.append("</string></value>\n");
 
-           /*
+            /*
         } else if (o instanceof org.xwt.js.Date) {
             sb.append("                <value><dateTime.iso8601>");
-             FIXME
-           org.xwt.js.Date d = (org.xwt.js.Date)o;
+            org.xwt.js.Date d = (org.xwt.js.Date)o;
             Date d = new Date(nd.getRawTime());
             sb.append(d.getYear() + 1900);
             if (d.getMonth() + 1 < 10) sb.append('0');
@@ -261,7 +260,7 @@ class XMLRPC extends JS.Callable {
             if (d.getSeconds() < 10) sb.append('0');
             sb.append(d.getSeconds());
             sb.append("</dateTime.iso8601></value>\n");
-           */
+            */
 
         } else if (o instanceof JS.Array) {
             if (tracker.get(o) != null) throw new JS.Exn("attempted to send multi-ref data structure via XML-RPC");
@@ -308,7 +307,7 @@ class XMLRPC extends JS.Callable {
             while ((s = br2.readLine()) != null) Log.log(this, "send: " + s);
         }
 
-        HTTP.HTTPInputStream is = http.POST("text/xml", content);
+        InputStream is = http.POST("text/xml", content);
         try {
             BufferedReader br = !Log.verbose ?
                 new BufferedReader(new InputStreamReader(new Filter(is))) :
@@ -377,7 +376,7 @@ class XMLRPC extends JS.Callable {
             throw new JS.Exn("socket exception: " + se);
 
         } catch (JS.Exn jse) {
-           if (Log.on) Log.log(this, jse.toString());
+            if (Log.on) Log.log(this, jse.toString());
             throw jse;
         } finally {
             ThreadMessage.resumeThread();
@@ -386,8 +385,8 @@ class XMLRPC extends JS.Callable {
     }
 
     /** When you get a property from an XMLRPC, it just returns another XMLRPC with the property name tacked onto methodname. */
-    public Object get(String name) {
-        return new XMLRPC(url, (methodname.equals("") ? "" : methodname + ".") + name, http);
+    public Object get(Object name) {
+        return new XMLRPC(url, (methodname.equals("") ? "" : methodname + ".") + name.toString(), http);
     }
 
     public XMLRPC(String url, String methodname) {
@@ -413,18 +412,18 @@ class XMLRPC extends JS.Callable {
     private static class Filter extends FilterInputStream {
         public Filter(InputStream is) { super(is); }
         public int read() throws IOException {
-            Thread.yield();
-            while(MessageQueue.nonThreadEventsInQueue > 0) try { Thread.sleep(100); } catch (Exception e) { };
+            java.lang.Thread.yield();
+            while(Message.Q.nonThreadEventsInQueue > 0) try { java.lang.Thread.sleep(100); } catch (Exception e) { };
             return super.read();
         }
         public int read(byte[] b) throws IOException {
-            Thread.yield();
-            while(MessageQueue.nonThreadEventsInQueue > 0) try { Thread.sleep(100); } catch (Exception e) { };
+            java.lang.Thread.yield();
+            while(Message.Q.nonThreadEventsInQueue > 0) try { java.lang.Thread.sleep(100); } catch (Exception e) { };
             return super.read(b);
         }
         public int read(byte[] b, int i, int j) throws IOException {
-            Thread.yield();
-            while(MessageQueue.nonThreadEventsInQueue > 0) try { Thread.sleep(100); } catch (Exception e) { };
+            java.lang.Thread.yield();
+            while(Message.Q.nonThreadEventsInQueue > 0) try { java.lang.Thread.sleep(100); } catch (Exception e) { };
             return super.read(b, i, j);
         }
     }