/**
* Copyright (c) 2002-2005, Simone Bordet
* All rights reserved.
*
* This software is distributable under the BSD license.
* See the terms of the BSD license in the documentation provided with this software.
*/
package foxtrot;
import java.security.AccessController;
import java.security.PrivilegedAction;
/**
* Helper class that returns which is the current JRE version
* @version $Revision: 1.4 $
*/
class JREVersion
{
private static Boolean jre141;
private static Boolean jre140;
private static Boolean jre14;
private static Boolean jre13;
private static Boolean jre12;
/**
* @deprecated
*/
static boolean isJRE141()
{
if (jre141 == null)
{
Class cls = loadClass("java.awt.SequencedEvent");
if (cls == null) jre141 = Boolean.FALSE;
else jre141 = hasGetFirst(cls);
}
return jre141.booleanValue();
}
/**
* @deprecated
*/
static boolean isJRE140()
{
if (jre140 == null)
{
Class cls = loadClass("java.awt.SequencedEvent");
if (cls == null) jre140 = Boolean.FALSE;
else jre140 = hasGetFirst(cls).booleanValue() ? Boolean.FALSE : Boolean.TRUE;
}
return jre140.booleanValue();
}
static boolean isJRE14()
{
if (jre14 == null) jre14 = loadClass("java.util.logging.Logger") == null ? Boolean.FALSE : Boolean.TRUE;
return jre14.booleanValue();
}
static boolean isJRE13()
{
if (jre13 == null) jre13 = loadClass("java.lang.reflect.Proxy") == null ? Boolean.FALSE : Boolean.TRUE;
return jre13.booleanValue();
}
static boolean isJRE12()
{
if (jre12 == null) jre12 = loadClass("java.util.Collection") == null ? Boolean.FALSE : Boolean.TRUE;
return jre12.booleanValue();
}
private static Class loadClass(String className)
{
// Avoid some smart guy puts the classes in the classpath or in lib/ext.
// We ask directly to the boot classloader
try
{
return Class.forName(className, false, null);
}
catch (ClassNotFoundException ignored)
{
}
return null;
}
private static Boolean hasGetFirst(final Class cls)
{
return (Boolean)AccessController.doPrivileged(new PrivilegedAction()
{
public Object run()
{
try
{
cls.getDeclaredMethod("getFirst", (Class[])null);
return Boolean.TRUE;
}
catch (Exception ignored)
{
}
return Boolean.FALSE;
}
});
}
}