FileDocCategorySizeDatePackage
Property.javaAPI DocAndroid 1.5 API16971Wed May 06 22:41:16 BST 2009com.vladium.util

Property

public abstract class Property extends Object
author
Vlad Roubtsov, (C) 2003

Fields Summary
private static String
s_systemFingerprint
private static Properties
s_systemProperties
private static Properties
s_systemRedirects
Constructors Summary
Methods Summary
public static java.util.Propertiescombine(java.util.Properties overrides, java.util.Properties base)
NOTE: this does not guarantee that the result will be mutatable independently from 'overrides' or 'base', so this method should be used for read-only property only

param
overrides [null is equivalent to empty]
param
base [null is equivalent to empty]
return
[never null, could be empty]

        // note: no defensive copies here
         
        if (base == null)
        {
            if (overrides == null)
                return new XProperties ();
            else
                return overrides;
        }
        
        // [assertion: base != null]
        
        if (overrides == null) return base;
        
        // [assertion: both 'overrides' and 'base' are not null]
        
        final Properties result = new XProperties (base);
        
        // note: must use propertyNames() because that is the only method that recurses
        // into possible bases inside 'overrides'
        
        for (Enumeration overrideNames = overrides.propertyNames (); overrideNames.hasMoreElements (); )
        {
            final String n = (String) overrideNames.nextElement ();
            final String v = overrides.getProperty (n);
            
            result.setProperty (n, v);
        }
        
        return result;
    
public static java.util.PropertiesgetAppProperties(java.lang.String namespace, java.lang.ClassLoader loader)
Creates a set of properties for an application with a given namespace. This method is not property aliasing-aware.

param
namespace application namespace [may not be null]
param
loader classloader to use for any classloader resource lookups [null is equivalent to the applicaton classloader]
return
application properties [never null, a new instance is created on each invocation]

        if (namespace == null)
            throw new IllegalArgumentException ("null properties: appNameLC");
        
        final Properties appDefaults = Property.getProperties (namespace + "_default.properties", loader);
        final Properties systemFileOverrides;
        {
            final String fileName = Property.getSystemProperty (namespace + ".properties");
            final File file = fileName != null
                ? new File (fileName)
                : null;

            systemFileOverrides = Property.getLazyPropertiesFromFile (file);
        }
        final Properties systemOverrides = Property.getSystemProperties (namespace);
        final Properties resOverrides = Property.getProperties (namespace + ".properties", loader);
        
        return combine (resOverrides,
               combine (systemOverrides,
               combine (systemFileOverrides,
                        appDefaults)));
    
public static java.util.PropertiesgetLazyPropertiesFromFile(java.io.File file)
Returns a lazy property implementation that will read 'load' as a .properties file on first use. If there are any file I/O errors when reading the file, they will be thrown as runtime exceptions (also on first use).

param
file [can be null, which results in an empty property set returned]
return
[never null]

        return new FilePropertyLookup (file);
    
public static java.util.PropertiesgetProperties(java.lang.String name, java.lang.ClassLoader loader)
does not throw

param
name
param
loader
return

        Properties result = null;
        
        InputStream in = null;
        try
        {
            in = ResourceLoader.getResourceAsStream (name, loader);
            if (in != null)
            {
                result = new XProperties ();
                result.load (in);
            }
        }
        catch (Throwable t)
        {
            result = null;
        }
        finally
        {
            if (in != null) try { in.close (); } catch (Throwable ignore) {}
            in = null;
        }
        
        return result;
    
public static java.util.PropertiesgetProperties(java.lang.String name)
does not throw

param
name
return

        Properties result = null;
        
        InputStream in = null;
        try
        {
            in = ResourceLoader.getResourceAsStream (name);
            if (in != null)
            {
                result = new XProperties ();
                result.load (in);
            }
        }
        catch (Throwable t)
        {
            result = null;
        }
        finally
        {
            if (in != null) try { in.close (); } catch (Throwable ignore) {}
            in = null;
        }
        
        return result;
    
public static java.util.PropertiesgetPropertiesFromFile(java.io.File file)
Loads 'file' as a .properties file.

param
file [may not be null]
return
read properties [never null]
throws
IOException on any file I/O errors

        if (file == null)
            throw new IllegalArgumentException ("null input: file");
        
        Properties result = null;
        
        InputStream in = null;
        try
        {
            in = new BufferedInputStream (new FileInputStream (file), 8 * 1024);

            result = new XProperties ();
            result.load (in);
        }
        finally
        {
            if (in != null) try { in.close (); } catch (Throwable ignore) {}
            in = null;
        }
        
        return result;
    
public static java.lang.StringgetSystemFingerprint()

        // [not synchronized intentionally]
        
        if (s_systemFingerprint != null)
            return s_systemFingerprint;
        else
        {
            final StringBuffer s = new StringBuffer ();
            final char delimiter = ':";
            
            s.append (getSystemProperty ("java.vm.name", ""));
            s.append (delimiter);
            s.append (getSystemProperty ("java.vm.version", ""));
            s.append (delimiter);
            s.append (getSystemProperty ("java.vm.vendor", ""));
            s.append (delimiter);
            s.append (getSystemProperty ("os.name", ""));
            s.append (delimiter);
            s.append (getSystemProperty ("os.version", ""));
            s.append (delimiter);
            s.append (getSystemProperty ("os.arch", ""));
            
            s_systemFingerprint = s.toString ();
            return s_systemFingerprint;
        }
    
public static java.util.PropertiesgetSystemProperties(java.lang.String systemPrefix)

        // note: this method is not synchronized on purpose
        
        Properties result = s_systemProperties;
        if (result == null)
        {
            result = new SystemPropertyLookup (systemPrefix);
            
            s_systemProperties = result;
            return result;
        }
        
        return result;
    
public static java.lang.StringgetSystemProperty(java.lang.String key)

        try
        {
            return System.getProperty (key);
        }
        catch (SecurityException se)
        {
            return null;
        }
    
public static java.lang.StringgetSystemProperty(java.lang.String key, java.lang.String def)

        try
        {
            return System.getProperty (key, def);
        }
        catch (SecurityException se)
        {
            return def;
        }
    
public static java.util.PropertiesgetSystemPropertyRedirects(java.util.Map systemRedirects)

        // note: this method is not synchronized on purpose
        
        Properties result = s_systemRedirects;
        if (result == null)
        {
            result = new SystemRedirectsLookup (systemRedirects);
            
            s_systemRedirects = result;
            return result;
        }
        
        return result;
    
public static booleantoBoolean(java.lang.String value)

        if (value == null)
            return false;
        else
            return value.startsWith ("t") || value.startsWith ("y");