/*
* GNU LESSER GENERAL PUBLIC LICENSE Copyright (C) 2006 The Lobo Project
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Contact info: xamjadmin@users.sourceforge.net
*/
package org.cobra_grendel.js;
import java.io.Serializable;
import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.WeakHashMap;
public class JavaClassWrapperFactory implements Serializable
{
/**
*
*/
private static final long serialVersionUID = 1L;
private static JavaClassWrapperFactory instance;
public static JavaClassWrapperFactory getInstance()
{
if (instance == null)
{
synchronized (JavaClassWrapperFactory.class)
{
if (instance == null)
{
instance = new JavaClassWrapperFactory();
}
}
}
return instance;
}
private final Map classWrappers = new WeakHashMap();
private JavaClassWrapperFactory()
{
}
public JavaClassWrapper getClassWrapper(final Class clazz)
{
synchronized (this)
{
// WeakHashMaps where the value refers to
// the key will retain keys. Must make it
// refer to the value weakly too.
WeakReference jcwr = (WeakReference) classWrappers.get(clazz);
JavaClassWrapper jcw = null;
if (jcwr != null)
{
jcw = (JavaClassWrapper) jcwr.get();
}
if (jcw == null)
{
jcw = new JavaClassWrapper(clazz);
classWrappers.put(clazz, new WeakReference(jcw));
}
return jcw;
}
}
}