uk.ac.starlink.util
Class Loader

java.lang.Object
  extended byuk.ac.starlink.util.Loader

public class Loader
extends Object

Provides utilities associated with loading resources.


Field Summary
static String PROPERTIES_FILE
          Name of the file in the user's home directory from which properties are loaded.
 
Constructor Summary
Loader()
           
 
Method Summary
static Object getClassInstance(String className, Class type)
          Attempts to obtain an instance of a class with a given name which is an instance of a given type.
static List getClassInstances(String[] defaultNames, String propertyName, Class type)
          Returns a list of class instances got from a combination of a default list of classnames and the name of a property which may contain a colon-separated list of other classnames.
static List getClassInstances(String propertyName, Class type)
          Attempts to obtain instances of a class from a colon-separated list of classnames in a named system property.
static File getPropertiesFile()
          Returns the name of the file from which properties will be loaded by this class.
static boolean is64Bit()
          Tests whether the JVM appears to be 64-bit or not.
static void loadLibrary(String libname)
          Loads a native library given its name.
static void loadProperties()
          Ensures that the user's customised properties have been loaded; these are read once from the file returned by the getPropertiesFile() method and incorporated into the System properties.
static File starjavaDirectory()
          Returns the location of the main Starlink java directory which contains the lib, bin, etc, source directories and others.
static void tweakGuiForMac()
          Unless it's been set already, sets the value of the apple.laf.useScreenMenuBar system property to true.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROPERTIES_FILE

public static final String PROPERTIES_FILE
Name of the file in the user's home directory from which properties are loaded.

See Also:
Constant Field Values
Constructor Detail

Loader

public Loader()
Method Detail

starjavaDirectory

public static File starjavaDirectory()
Returns the location of the main Starlink java directory which contains the lib, bin, etc, source directories and others. It gets this by working out what jar file this class has been loaded from - there may be circumstances under which this doesn't work? but it's a best guess.

If for some reason the directory cannot be located, null is returned.

Returns:
the top level starlink java directory, or null if it can't be found

loadLibrary

public static void loadLibrary(String libname)
                        throws SecurityException,
                               UnsatisfiedLinkError
Loads a native library given its name. If it is not found on java.library.path, the architecture-specific lib directory in the installed Starlink system is searched.

Parameters:
libname - the name of the library (not including system-specifics such as 'lib' or '.so')
Throws:
SecurityException - if a security manager exists and its checkLink method doesn't allow loading of the specified dynamic library
UnsatisfiedLinkError - if the library does not exist
See Also:
System.loadLibrary(java.lang.String)

getPropertiesFile

public static File getPropertiesFile()
                              throws SecurityException
Returns the name of the file from which properties will be loaded by this class.

Returns:
a file called PROPERTIES_FILE in the directory given by the System property "user.home".
Throws:
SecurityException

loadProperties

public static void loadProperties()
Ensures that the user's customised properties have been loaded; these are read once from the file returned by the getPropertiesFile() method and incorporated into the System properties. Calling this method after the first time has no effect.

See Also:
System.getProperties()

getClassInstance

public static Object getClassInstance(String className,
                                      Class type)
Attempts to obtain an instance of a class with a given name which is an instance of a given type. If className is null or empty, null is returned directly. Otherwise, if the class className can be found using the default class loader, and if it is assignable from type, and if it has a no-arg constructor, an instance of it is constructed and returned. Otherwise, null is returned, and a message may be written through the logging system.

Parameters:
className - name of the class to instantiate
type - class which the instantiated class must be assignable from
Returns:
new className instance, or null

getClassInstances

public static List getClassInstances(String propertyName,
                                     Class type)
Attempts to obtain instances of a class from a colon-separated list of classnames in a named system property. If the named property does not exists or contains no strings, an empty list is returned. Otherwise, getClassInstance(java.lang.String, java.lang.Class) is called on each colon-separated element of the property value, and if there is a non-null return, it is added to the return list. For colon-separated elements which do not correspond to usable classes, a message may be written through the logging system.

Parameters:
propertyName - name of a system property containing colon-separated classnames
type - class which instantiated classes must be assignable from
Returns:
list of new type instances (may be empty, but not null)

getClassInstances

public static List getClassInstances(String[] defaultNames,
                                     String propertyName,
                                     Class type)
Returns a list of class instances got from a combination of a default list of classnames and the name of a property which may contain a colon-separated list of other classnames. The strings in each case must name classes which implement type and which have no-arg constructors.

Parameters:
defaultNames - array of string

is64Bit

public static boolean is64Bit()
Tests whether the JVM appears to be 64-bit or not. Not guaranteed reliable.

Returns:
true if the JVM appears to be running in 64 bits (if false, presumably it's 32 bits)

tweakGuiForMac

public static void tweakGuiForMac()
Unless it's been set already, sets the value of the apple.laf.useScreenMenuBar system property to true. This has the effect on Macintosh displays of causing menus to appear at the top of the screen rather than the top of the windows they belong in. This doesn't work on Dialog windows. Setting this property has no effect on non-Mac platforms. Probably(?) this call must be made before starting up the GUI (haven't got a Mac to hand, can't test it).

28 Nov 2005: There is at least one sighting of this code causing trouble on Macs; a not-obviously-related ArrayIndexOutOfBoundsException thrown in apple.laf.ScreenMenuBar code in Treeview at Mac OS X 10.4.3 on a PowerPC G5, running Java 1.4.2_09. If the property is set false on the command line it goes away (if it's set true on the command line it stays, so it's not a case of it not being set early enough). So I think, given that I don't have a Mac to debug it on, I'm going to have to leave it unset by default.

11 Jan 2006: Apparently this is fixed at OS X's Java 1.5 JRE. So for JRE versions >= 1.5, the screen top menus are reinstated.


Copyright © 2004 CLRC: Central Laboratory of the Research Councils. All rights reserved.