- private static void recurse(String indent, String name, Object o) {
- if (!name.equals("")) name += " : ";
-
- if (o == null) {
- Log.logJS(indent + name + "<null>");
-
- } else if (o instanceof JS.Array) {
- Log.logJS(indent + name + "<array>");
- JS.Array na = (JS.Array)o;
- for(int i=0; i<na.length(); i++)
- recurse(indent + " ", i + "", na.elementAt(i));
-
- } else if (o instanceof JS) {
- Log.logJS(indent + name + "<object>");
- JS s = (JS)o;
- Object[] keys = s.keys();
- for(int i=0; i<keys.length; i++)
- if (keys[i] != null)
- recurse(indent + " ", keys[i].toString(),
- (keys[i] instanceof Integer) ?
- s.get(((Integer)keys[i])) : s.get(keys[i].toString()));
-
- } else {
- Log.logJS(indent + name + o);
-
+ public Object callMethod(Object name, boolean checkOnly, JS.Array args) throws JS.Exn {
+ Object a = args.elementAt(0);
+ Object b = args.elementAt(1);
+ Object c = args.elementAt(2);
+ if (name.equals("date")) return new org.xwt.js.Date(args);
+ else if (args.length() == 0 && name.equals("thread.yield")) return checkOnly ? T : sleep(0);
+ else if (args.length() == 2) {
+ //#switch(name)
+ case "res.watch": return checkOnly ? T : new Res.ProgressWatcher((Res)a, (Function)b);
+ case "soap": return checkOnly ? T : new SOAP((String)args.elementAt(0), "", (String)args.elementAt(1), null);
+ case "apply": if (checkOnly) return T;
+ Template.getTemplate((Res)args.elementAt(1)).apply((Box)args.elementAt(0), null, XWT.this);
+ return args.elementAt(0);
+ //#end
+ } else if (args.length() == 3 && name.equals("soap")) {
+ if (name.equals("soap")) {
+ if (checkOnly) return T;
+ return new SOAP((String)args.elementAt(0), "", (String)args.elementAt(1), (String)args.elementAt(2));
+ } else if (name.equals("graft")) {
+ if (checkOnly) return T;
+ if (a instanceof Box) throw new JS.Exn("can't graft onto Boxes (yet)");
+ if (a instanceof Number) throw new JS.Exn("can't graft onto Numbers (yet)");
+ if (a instanceof String) throw new JS.Exn("can't graft onto Strings (yet)");
+ // FIXME if (a instanceof Res) return new Res.Graft((Res)a, b, c);
+ return new JS.Graft((JS)a, b, c);
+ }
+ } else if (args.length() == 1) {
+ //#switch(name)
+ case "ui.browser": if (checkOnly) return T; Platform.newBrowserWindow((String)a); return null;
+ case "clone": return checkOnly ? T : new XWT((Res)a);
+ case "res.unzip": return checkOnly ? T : new Res.Zip((Res)a);
+ case "res.uncab": return checkOnly ? T : new Res.Cab((Res)a);
+ case "res.cache": return checkOnly ? T : new Res.CachedRes((Res)a, "resources", true);
+ case "res.fromURL": return checkOnly ? T : Res.stringToRes((String)a);
+ case "thread.sleep": return checkOnly ? T : sleep(JS.toInt(a));
+ case "log.println": if (checkOnly) return T; Log.logJS(this, a== null ? "**null**" : a.toString()); return null;
+ case "log.dump": if (checkOnly) return T; JS.recurse("", "", a); return null;
+ case "regexp": return checkOnly ? T : new Regexp(a, null);
+ case "rpc.xml": return checkOnly ? T : new XMLRPC((String)a, "");
+ case "rpc.soap": return checkOnly ? T : new SOAP((String)a, "", null, null);
+ case "crypto.rsa": /* FIXME */ break;
+ case "crypto.md5": /* FIXME */ break;
+ case "crypto.sha1": /* FIXME */ break;
+ case "crypto.rc4": /* FIXME */ break;
+ case "stream.parse.html": /* FIXME */ break;
+ case "stream.parse.xml": /* FIXME */ break;
+ case "stream.parse.utf8": /* FIXME */ break;
+ //#end