Configuration.java

package edu.hawaii.ics.yucheng;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * An immutable class that contains the configuration information for a cluster
 * of nodes and a catalog. They are parsed from the 'clustercfg' file.
 * 
 * @author     Cheng Jade
 * @assignment ICS 421 Assignment 2-2
 * @date       Mar 19, 2010
 * @bugs       None
 */
public class Configuration {
    
    // The catalog node configuration
    public final ConfigurationNode catalog;
    
    // The local node configuration
    public final ConfigurationNode localNode;
    
    public Configuration(final String path) throws ProgramException {
        // Throw an exception if the specified path is null.
        if (null == path)
            throw new NullPointerException("path");

        // Declare a Properties object and load it with the specified file.
        final Properties properties = getProperties(path);
        this.catalog = new ConfigurationNode(properties, "catalog");
        ConfigurationNode tryLocalNode;
        try {
            tryLocalNode = new ConfigurationNode(properties, "localnode");
        } catch (ProgramException e) {
            tryLocalNode = new ConfigurationNode(properties, "catalog");
        }
        this.localNode = tryLocalNode;
    }
    
    /**
     * Open a file, check for errors, and return a loaded properties object.
     * 
     * @param path
     *            The path to the properties file.
     * 
     * @return A loaded properties object.
     * 
     * @throws ProgramException
     *             Thrown if there is a problem reading the configuration file.
     */
    private static Properties getProperties(final String path)
            throws ProgramException {
        assert null != path;

        try {
            final FileInputStream file = new FileInputStream(path);
            try {
                final Properties properties = new Properties();
                properties.load(file);
                return properties;
            } finally {
                file.close();
            }
        } catch (final IOException e) {
            throw new ProgramException("Cannot read configuration file.", e);
        }
    }




}
Valid HTML 4.01 Valid CSS