1 // Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL]
5 import org.mozilla.javascript.*;
7 /** implements objects in the xwt.static.* namespace */
8 public class Static extends JSObject {
10 public static Static getStatic(String resourcename) {
11 return (Static)cache.get(resourcename);
14 public static Static createStatic(String resourcename) {
15 Static ret = (Static)cache.get(resourcename);
17 Template t = Template.getTemplate(resourcename, null);
18 if (t == null) return new Static(resourcename, true);
19 ret = new Static(resourcename, false);
26 private static Hash cache = new Hash();
28 /** the resource name that this Static object corresponds to */
29 private String resourcename = null;
31 /** true iff this represents a directory (rather than an actual xwt) */
32 public boolean ispackage = false;
34 private Static(String resourcename, boolean ispackage) {
36 cache.put(resourcename, this);
37 this.resourcename = resourcename;
38 this.ispackage = ispackage;
42 /** creates a new static representing a package */
43 public Static(String resourcename) { this(resourcename, true); }
45 public Object get(String name, Scriptable start) {
46 if (name == null) return null;
48 // hack since Rhino needs to be able to grab these functions to create new objects
49 if (name.equals("Object")) return JSObject.defaultObjects.get("Object", null);
50 if (name.equals("Array")) return JSObject.defaultObjects.get("Array", null);
51 if (name.equals("Function")) return JSObject.defaultObjects.get("Function", null);
52 if (name.equals("TypeError")) return JSObject.defaultObjects.get("TypeError", null);
54 if ("xwt".equals(name))
55 for(Scriptable cur = Context.enter().currentFunction; cur != null; cur = cur.getParentScope())
56 if (cur == this) return XWT.singleton;
58 if (!ispackage) return super.get(name, start);
59 return getStatic(resourcename + (resourcename.length() == 0 ? "" : ".") + name);
62 static { createStatic(""); }