KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lobobrowser > js > JavaClassWrapperFactory


1 /*
2     GNU LESSER GENERAL PUBLIC LICENSE
3     Copyright (C) 2006 The Lobo Project
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Lesser General Public
7     License as published by the Free Software Foundation; either
8     version 2.1 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13     Lesser General Public License for more details.
14
15     You should have received a copy of the GNU Lesser General Public
16     License along with this library; if not, write to the Free Software
17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
19     Contact info: xamjadmin@users.sourceforge.net
20 */

21 package org.lobobrowser.js;
22
23 import java.util.*;
24 import java.lang.ref.*;
25
26 public class JavaClassWrapperFactory {
27     private static JavaClassWrapperFactory instance;
28     private final Map classWrappers = new WeakHashMap();
29     
30     private JavaClassWrapperFactory() { }
31     
32     public static JavaClassWrapperFactory getInstance() {
33         if(instance == null) {
34             synchronized(JavaClassWrapperFactory.class) {
35                 if(instance == null) {
36                     instance = new JavaClassWrapperFactory();
37                 }
38             }
39         }
40         return instance;
41     }
42     
43     public JavaClassWrapper getClassWrapper(Class JavaDoc clazz) {
44         synchronized(this) {
45             //WeakHashMaps where the value refers to
46
//the key will retain keys. Must make it
47
//refer to the value weakly too.
48
WeakReference jcwr = (WeakReference) this.classWrappers.get(clazz);
49             JavaClassWrapper jcw = null;
50             if(jcwr != null) {
51                 jcw = (JavaClassWrapper) jcwr.get();
52             }
53             if(jcw == null) {
54                 jcw = new JavaClassWrapper(clazz);
55                 this.classWrappers.put(clazz, new WeakReference(jcw));
56             }
57             return jcw;
58         }
59     }
60 }
61
Popular Tags