Added mechanism to add properties from other sources than the primary

properties file, e.g. a Zip file.
This commit is contained in:
hns 2002-10-01 15:50:59 +00:00
parent 6f96481c2b
commit e6de4746d9

View file

@ -17,12 +17,13 @@ public final class SystemProperties extends Properties {
private Properties newProps; // used while building up props private Properties newProps; // used while building up props
private Properties defaultProps; // the default/fallback properties. private Properties defaultProps; // the default/fallback properties.
private File file; // the underlying properties file from which we read. private File file; // the underlying properties file from which we read.
private long lastread, lastcheck; // time we last read/checked the underlying properties file private long lastread, lastcheck, lastadd; // time we last read/checked the underlying properties file
// the timespan for which we omit checking for changed files after we // the timespan for which we omit checking for changed files after we
// did a check, in milliseconds. // did a check, in milliseconds.
final static long cacheTime = 1500l; final static long cacheTime = 1500l;
private HashMap additionalProps = null;
/** /**
* Construct an empty properties object. * Construct an empty properties object.
@ -71,7 +72,7 @@ public final class SystemProperties extends Properties {
this.defaultProps = defaultProps; this.defaultProps = defaultProps;
props = defaultProps == null ? new Properties () : new Properties (defaultProps); props = defaultProps == null ? new Properties () : new Properties (defaultProps);
file = filename == null ? null : new File (filename); file = filename == null ? null : new File (filename);
lastcheck = lastread = 0; lastcheck = lastread = lastadd = 0;
} }
/** /**
@ -79,8 +80,8 @@ public final class SystemProperties extends Properties {
*/ */
public long lastModified () { public long lastModified () {
if (file == null || !file.exists ()) if (file == null || !file.exists ())
return lastread; return lastadd;
return file.lastModified (); return Math.max (file.lastModified (), lastadd);
} }
/** /**
@ -119,6 +120,10 @@ public final class SystemProperties extends Properties {
lastread = System.currentTimeMillis (); lastread = System.currentTimeMillis ();
props = newProps; props = newProps;
newProps = null; newProps = null;
if (additionalProps != null) {
for (Iterator i=additionalProps.values().iterator(); i.hasNext(); )
props.putAll ((Properties) i.next());
}
} }
@ -126,9 +131,27 @@ public final class SystemProperties extends Properties {
* Similar to load(), but adds to the existing properties instead * Similar to load(), but adds to the existing properties instead
* of discarding them. * of discarding them.
*/ */
public synchronized void add (InputStream in) throws IOException { public synchronized void addProps (String key, InputStream in) throws IOException {
super.load (in); Properties p = new Properties();
lastread = System.currentTimeMillis (); p.load (in);
if (additionalProps == null)
additionalProps = new HashMap ();
additionalProps.put (key, p);
if (props != null)
props.putAll (p);
else
props = p;
lastadd = System.currentTimeMillis ();
}
public synchronized void removeProps (String key) {
if (additionalProps != null) {
// remove added properties for this key. If we had
// properties associated with the key, mark props as updated.
Object p = additionalProps.remove (key);
if (p != null)
lastadd = System.currentTimeMillis ();
}
} }