update Directory, Fountain, JSReflection, SOAP, XMLRPC to use baskets and new JS...
[org.ibex.js.git] / src / org / ibex / js / SOAP.java
index 632a0a6..d1a2d61 100644 (file)
@@ -5,10 +5,7 @@
 package org.ibex.js;
 
 import java.io.*;
-import java.util.*;
-import org.ibex.net.*;
 import org.ibex.util.*;
-import org.ibex.crypto.*;
 
 /**
  *  A partial RPC-style SOAP 1.1 client. Implemented from the SOAP 1.1
@@ -44,33 +41,33 @@ public class SOAP extends XMLRPC {
         if (name.equals("SOAP-ENV:Fault")) fault = true;
  
         // add a generic struct; we'll change this if our type is different
-        objects.addElement(new JS.O());
+        objects.push(new JS.Obj());
 
         for(int i=0; i<keys.length; i++) {
             String key = keys[i];
             String value = vals[i].toString();
             if (key.endsWith("ype")) {
                 if (value.endsWith("boolean")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(Script.B(true));
+                    objects.pop();
+                    objects.push(Script.B(true));
                 } else if (value.endsWith("int")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(Script.N(0));
+                    objects.pop();
+                    objects.push(Script.N(0));
                 } else if (value.endsWith("double")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(Script.N(0.0));
+                    objects.pop();
+                    objects.push(Script.N(0.0));
                 } else if (value.endsWith("string")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(Script.S(""));
+                    objects.pop();
+                    objects.push(Script.S(""));
                 } else if (value.endsWith("base64")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new byte[] { });
+                    objects.pop();
+                    objects.push(new byte[] { });
                 } else if (value.endsWith("null")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(null);
+                    objects.pop();
+                    objects.push(null);
                 } else if (value.endsWith("arrayType") || value.endsWith("JSArray") || key.endsWith("arrayType")) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new JSArray());
+                    objects.pop();
+                    objects.push(new JSArray());
                 }
             }
         }
@@ -84,54 +81,54 @@ public class SOAP extends XMLRPC {
         if (content.size() > 0 && content.toString().trim().length() > 0) {
 
             // remove ourselves
-            Object me = objects.elementAt(objects.size() - 1);
+            Object me = objects.get(objects.size() - 1);
 
             if (fault || me instanceof String) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new String(content.getBuf(), 0, content.size()).intern());
+                objects.pop();
+                objects.push(new String(content.buf, 0, content.size()).intern());
                 content.reset();
 
             } else if (me instanceof byte[]) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new Fountain.ByteArray(Base64.decode(new String(content.getBuf(), 0, content.size())), null));
+                objects.pop();
+                objects.push(new Fountain.ByteArray(Encode.fromBase64(new String(content.buf, 0, content.size())), null));
                 content.reset();                
 
             } else if (me instanceof Integer) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new Integer(new String(content.getBuf(), 0, content.size())));
+                objects.pop();
+                objects.push(new Integer(new String(content.buf, 0, content.size())));
                 content.reset();
                 
             } else if (me instanceof Boolean) {
-                objects.removeElementAt(objects.size() - 1);
-                String s = new String(content.getBuf(), 0, content.size()).trim();
-                if (s.equals("1") || s.equals("true")) objects.addElement(Boolean.TRUE);
-                else objects.addElement(Boolean.FALSE);
+                objects.pop();
+                String s = new String(content.buf, 0, content.size()).trim();
+                if (s.equals("1") || s.equals("true")) objects.push(Boolean.TRUE);
+                else objects.push(Boolean.FALSE);
                 content.reset();
                 
             } else if (me instanceof Double) {
-                objects.removeElementAt(objects.size() - 1);
-                objects.addElement(new Double(new String(content.getBuf(), 0, content.size())));
+                objects.pop();
+                objects.push(new Double(new String(content.buf, 0, content.size())));
                 content.reset();
                 
             } else {
                 // okay, we got PCDATA for what is supposedly a
                 // struct... somebody's not adding their type info...
-                String s = new String(content.getBuf(), 0, content.size()).trim();
+                String s = new String(content.buf, 0, content.size()).trim();
                 boolean hasdot = false;
                 for(int i=0; i<s.length(); i++) {
                     if (s.charAt(i) == '.') hasdot = true;
                     if (!Character.isDigit(s.charAt(i))) {
-                        objects.removeElementAt(objects.size() - 1);
-                        objects.addElement(s);
+                        objects.pop();
+                        objects.push(s);
                         return;
                     }
                 }
                 if (hasdot) {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new Double(s));
+                    objects.pop();
+                    objects.push(new Double(s));
                 } else {
-                    objects.removeElementAt(objects.size() - 1);
-                    objects.addElement(new Integer(s));
+                    objects.pop();
+                    objects.push(new Integer(s));
                 }
                 content.reset();
             }
@@ -139,21 +136,21 @@ public class SOAP extends XMLRPC {
         }
         
         // remove ourselves
-        JS me = (JS)objects.elementAt(objects.size() - 1);
+        JS me = (JS)objects.get(objects.size() - 1);
 
         // find our parent
-        JS parent = objects.size() > 1 ? (JS)objects.elementAt(objects.size() - 2) : (JS)null;
+        JS parent = objects.size() > 1 ? (JS)objects.get(objects.size() - 2) : (JS)null;
 
         // we want to fold stuff back into the fault object
         if (objects.size() < 2) return;
 
         // our parent "should" be an aggregate type -- add ourselves to it.
         if (parent != null && parent instanceof JSArray) {
-            objects.removeElementAt(objects.size() - 1);
-            ((JSArray)parent).addElement(me);
+            objects.pop();
+            ((JSArray)parent).push(me);
 
         } else if (parent != null && parent instanceof JS) {
-            objects.removeElementAt(objects.size() - 1);
+            objects.pop();
             try {
                 ((JS)parent).put(Script.S(name), me);
             } catch (JSExn e) {
@@ -196,7 +193,7 @@ public class SOAP extends XMLRPC {
                         System.arraycopy(buf, 0, writebuf, 0, numread);
                     }
                     sb.append("              ");
-                    sb.append(new String(Base64.encode(writebuf)));
+                    sb.append(new String(Encode.toBase64(writebuf)));
                     sb.append("\r\n");
                 }
                 sb.append(((Boolean)o).booleanValue() ? "1" : "0");
@@ -228,16 +225,16 @@ public class SOAP extends XMLRPC {
 
         } else if (o instanceof JSArray) {
             JSArray a = (JSArray)o;
-            sb.append("                <" + name + " SOAP-ENC:arrayType=\"xsd:ur-type[" + a.length() + "]\">");
-            for(int i=0; i<a.length(); i++) appendObject("item", a.elementAt(i), sb);
+            sb.append("                <" + name + " SOAP-ENC:arrayType=\"xsd:ur-type[" + a.size() + "]\">");
+            for(int i=0; i<a.size(); i++) appendObject("item", a.get(i), sb);
             sb.append("</" + name + ">\r\n");
 
         } else if (o instanceof JS) {
             JS j = (JS)o;
             sb.append("                <" + name + ">");
-            Enumeration e = j.keys();
-            while(e.hasMoreElements()) {
-                Object key = e.nextElement();
+            JS.Enumeration e = j.keys();
+            while(e.hasNext()) {
+                Object key = e.next();
                 appendObject((String)key, j.get((JS)key), sb);
             }
             sb.append("</" + name + ">\r\n");
@@ -260,11 +257,11 @@ public class SOAP extends XMLRPC {
         content.append(method);
         content.append(nameSpace != null ? " xmlns=\"" + nameSpace + "\"" : "");
         content.append(">\r\n");
-        if (args.length() > 0) {
-            Enumeration e = ((JS)args.elementAt(0)).keys();
-            while(e.hasMoreElements()) {
-                JS key = (JS)e.nextElement();
-                appendObject(((JSString)key).coerceToString(), ((JS)args.elementAt(0)).get(key), content);
+        if (args.size() > 0) {
+            JS.Enumeration e = ((JS)args.get(0)).keys();
+            while(e.hasNext()) {
+                JS key = (JS)e.next();
+                appendObject(((JSString)key).coerceToString(), ((JS)args.get(0)).get(key), content);
             }
         }
         content.append("    </" + method + "></SOAP-ENV:Body></SOAP-ENV:Envelope>\r\n");