org.kitodo.config.ConfigMain.java Source code

Java tutorial

Introduction

Here is the source code for org.kitodo.config.ConfigMain.java

Source

/*
 * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
 *
 * This file is part of the Kitodo project.
 *
 * It is licensed under GNU General Public License version 3 or later.
 *
 * For the full copyright and license information, please read the
 * GPL3-License.txt file that was distributed with this source code.
 */

package org.kitodo.config;

import java.util.NoSuchElementException;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.ConversionException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class ConfigMain {
    private static final Logger logger = LogManager.getLogger(ConfigMain.class);
    private static volatile PropertiesConfiguration config;
    private static final String CONFIG_FILE = "kitodo_config.properties";

    /**
     * Private constructor to hide the implicit public one.
     */
    private ConfigMain() {

    }

    /**
     * Get properties from configuration file.
     *
     * @return PropertiesConfiguration object
     */
    private static PropertiesConfiguration getConfig() {
        if (config == null) {
            synchronized (ConfigMain.class) {
                PropertiesConfiguration initialized = config;
                if (initialized == null) {
                    PropertiesConfiguration.setDefaultListDelimiter('&');
                    try {
                        initialized = new PropertiesConfiguration(CONFIG_FILE);
                    } catch (ConfigurationException e) {
                        logger.warn("Loading of {} failed. Trying to start with empty configuration. Exception: {}",
                                CONFIG_FILE, e);
                        initialized = new PropertiesConfiguration();
                    }
                    initialized.setListDelimiter('&');
                    initialized.setReloadingStrategy(new FileChangedReloadingStrategy());
                    config = initialized;
                }
            }
        }
        return config;
    }

    /**
     * Request selected parameter with given default value from configuration.
     *
     * @param inParameter
     *            name of parameter in config file
     * @param inDefaultIfNull
     *            default value in case parameter taken from config file is null or
     *            exception occurred
     * @return Parameter as String
     */
    public static String getParameter(String inParameter, String inDefaultIfNull) {
        try {
            return getConfig().getString(inParameter, inDefaultIfNull);
        } catch (ConversionException e) {
            return inDefaultIfNull;
        }
    }

    /**
     * Request boolean parameter from configuration, default if missing: false.
     *
     * @return Parameter as String
     */
    public static boolean getBooleanParameter(String inParameter) {
        return getBooleanParameter(inParameter, false);
    }

    /**
     * Request boolean parameter from configuration.
     *
     * @param inParameter
     *            name of parameter in config file
     * @param inDefault
     *            default value in case parameter taken from config file is null or
     *            exception occurred
     * @return Parameter as boolean
     */
    public static boolean getBooleanParameter(String inParameter, boolean inDefault) {
        try {
            return getConfig().getBoolean(inParameter, inDefault);
        } catch (ConversionException e) {
            return inDefault;
        }
    }

    /**
     * Request int-parameter from Configuration with default-value.
     *
     * @param inParameter
     *            name of parameter in config file
     * @param inDefault
     *            default value in case parameter taken from config file is null or
     *            exception occurred
     * @return Parameter as int
     */
    public static int getIntParameter(String inParameter, int inDefault) {
        try {
            return getConfig().getInt(inParameter, inDefault);
        } catch (NoSuchElementException e) {
            return inDefault;
        }
    }
}