KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > es > ESPackage


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  * Free SoftwareFoundation, Inc.
23  * 59 Temple Place, Suite 330
24  * Boston, MA 02111-1307 USA
25  *
26  * @author Scott Ferguson
27  */

28
29 package com.caucho.es;
30
31 import com.caucho.server.util.CauchoSystem;
32
33 import java.util.Hashtable JavaDoc;
34
35 /**
36  * JavaScript object representing a Java package or class.
37  */

38 class ESPackage extends ESBase {
39   ESString name;
40   Class JavaDoc cl;
41   Hashtable JavaDoc cache = new Hashtable JavaDoc();
42
43   /**
44    * Creates a new package object with the given first segment.
45    *
46    * @param name the first segment of a Java package/class.
47    */

48   private ESPackage(String JavaDoc name)
49   {
50     this.className = "Package";
51     this.prototype = esBase;
52
53     this.name = ESString.create(name);
54   }
55
56   /**
57    * Creates an empty package object.
58    */

59   static ESPackage create()
60   {
61     return new ESPackage("");
62   }
63
64   public ESBase getProperty(ESString name) throws Throwable JavaDoc
65   {
66     ESBase value = null;
67
68     if (name == null)
69       return this;
70
71     value = (ESBase) cache.get(name);
72
73     if (value != null)
74       return value;
75
76     String JavaDoc subname;
77     if (this.name.equals(ESString.NULL))
78       subname = name.toString();
79     else
80       subname = this.name.toString() + "." + name.toString();
81
82     try {
83       Global global = Global.getGlobalProto();
84       ClassLoader JavaDoc loader = global.getParentLoader();
85
86       Class JavaDoc cl = CauchoSystem.loadClass(subname, false, loader);
87
88       value = global.classWrap(cl);
89     } catch (ClassNotFoundException JavaDoc e) {
90       value = new ESPackage(subname);
91     }
92
93     cache.put(name, value);
94
95     return value;
96   }
97
98   public ESString toStr() { return new ESString("[Package " + name + "]"); }
99
100   public double toNum()
101   {
102     return 0.0/0.0;
103   }
104
105   /**
106    * Converts the package to a java object. For classes, returns the class.
107    * For a package, returns null.
108    */

109   public Object JavaDoc toJavaObject()
110   {
111     return null;
112   }
113
114   ESBase create(String JavaDoc string)
115   {
116     try {
117       return getProperty(ESString.create(string));
118     } catch (Throwable JavaDoc e) {
119       return ESBase.esNull;
120     }
121   }
122 }
123
Popular Tags