Property Manager
//package abc.util;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.*;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Properties;
public final class PropertyManager {
private final static String DEFAULT_PROPERTIES_FILE = "ressources" + File.separator + "default.properties";
private final static String APP_PROPERTIES_FILE = "ressources" + File.separator + "app.properties";
private Properties defaultProps = new Properties();
private Properties appProps = null;
private Hashtable listeners = null;
private static Object lock = new Object();
private static PropertyManager instance = null;
private PropertyManager() {
}
public static PropertyManager getInstance() throws IOException {
if (instance == null) {
synchronized (lock) {
if (instance == null) {
instance = new PropertyManager();
instance.loadProperties();
}
}
}
return (instance);
}
private void loadProperties() throws IOException {
// create and load default properties
FileInputStream in = new FileInputStream(DEFAULT_PROPERTIES_FILE);
defaultProps.load(in);
in.close();
// create application properties with default
appProps = new Properties(defaultProps);
try {
// user/application properties
in = new FileInputStream(APP_PROPERTIES_FILE);
appProps.load(in);
in.close();
} catch (Throwable th) {
// TODO: log something
}
}
public void storeProperties() throws IOException {
FileOutputStream out = new FileOutputStream(DEFAULT_PROPERTIES_FILE);
defaultProps.store(out, "---Default properties---");
out.close();
out = new FileOutputStream(APP_PROPERTIES_FILE);
appProps.store(out, "---App/User properties---");
out.close();
}
public String getProperty(String key) {
String val = null;
if (key != null) {
if (appProps != null)
val = (String)appProps.getProperty(key);
if (val == null) {
val = defaultProps.getProperty(key);
}
}
return (val);
}
/**
* Sets Application/User String properties; default property values cannot be set.
*/
public void setProperty(String key, String val) {
ArrayList list = null;
Object oldValue = null;
oldValue = getProperty(key);
appProps.setProperty(key, val);
if (listeners.containsKey(key)) {
list = (ArrayList)listeners.get(key);
int len = list.size();
if (len > 0) {
PropertyChangeEvent evt = new PropertyChangeEvent(this, key, oldValue, val);
for (int i=0; i < len; i++) {
if (list.get(i) instanceof PropertyChangeListener)
((PropertyChangeListener)list.get(i)).propertyChange(evt);
}
}
}
}
public boolean addListener (String key, PropertyChangeListener listener) {
boolean added = false;
ArrayList list = null;
if (listeners == null)
listeners = new Hashtable();
if (!listeners.contains(key)) {
list = new ArrayList();
added = list.add(listener);
listeners.put(key, list);
} else {
list = (ArrayList)listeners.get(key);
added = list.add(listener);
}
return (added);
}
public void removeListener (PropertyChangeListener listener) {
if (listeners != null && listeners.size() > 0)
listeners.remove(listener);
}
}
Related examples in the same category