PropertyManager.java Source code

Java tutorial

Introduction

Here is the source code for PropertyManager.java

Source

//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);
    }

}