59450a7fa144f06ab190f6bdeaaf8c5e1c43c58a
[org.ibex.core.git] / src / org / xwt / Static.java
1 // Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL]
2 package org.xwt;
3
4 import org.xwt.util.*;
5 import org.mozilla.javascript.*;
6
7 /** implements objects in the xwt.static.* namespace */
8 public class Static extends JSObject {
9
10     public static Static getStatic(String resourcename) {
11         Static ret = (Static)cache.get(resourcename);
12         if (ret == null) {
13             Template t = Template.getTemplate(resourcename, null);
14             if (t == null) return null;
15             ret = new Static(resourcename, false);
16             t.link();
17             return ret;
18         }
19         return ret;
20     }
21
22     private static Hash cache = new Hash();
23
24     /** the resource name that this Static object corresponds to */
25     private String resourcename = null;
26
27     /** true iff this represents a directory (rather than an actual xwt) */
28     public boolean ispackage = false;
29
30     private Static(String resourcename, boolean ispackage) {
31         super(true);
32         cache.put(resourcename, this);
33         this.resourcename = resourcename;
34         this.ispackage = ispackage;
35         setSeal(ispackage);
36     }
37     
38     /** creates a new static representing a package */
39     public Static(String resourcename) {
40         this(resourcename, true);
41     }
42
43     public Object get(String name, Scriptable start) {
44         if (name == null) return null;
45
46         // hack since Rhino needs to be able to grab these functions to create new objects
47         if (name.equals("Object")) return JSObject.defaultObjects.get("Object", null);
48         if (name.equals("Array")) return JSObject.defaultObjects.get("Array", null);
49         if (name.equals("Function")) return JSObject.defaultObjects.get("Function", null);
50         if (name.equals("TypeError")) return JSObject.defaultObjects.get("TypeError", null);
51
52         if ("xwt".equals(name)) return XWT.singleton;
53         if (!ispackage) return super.get(name, start);
54         return getStatic(resourcename + (resourcename.length() == 0 ? "" : ".") + name);
55     }
56
57 }