// Path: opennms-pris-api/src/main/java/org/opennms/pris/api/Configuration.java
// public interface Configuration {
// 
//     /**
//      * Returns the path to the configuration.
//      *
//      * @return the absolute path to the configuration folder.
//      */
//     Path getBasePath();
// 
//     /**
//      * Check if the configuration is empty.
//      *
//      * @return {@code true} if the configuration contains no property,
//      * {@code false} otherwise
//      */
//     boolean isEmpty();
// 
//     /**
//      * Check if the configuration contains the specified key.
//      *
//      * @param key the key whose presence in this configuration is to be tested
//      *
//      * @return {@literal true} if the configuration contains a value for this
//      * key, {@literal false} otherwise
//      */
//     boolean containsKey(final String key);
// 
//     /**
//      * Get a boolean associated with the given configuration key.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated boolean
//      */
//     boolean getBoolean(final String key);
// 
//     /**
//      * Get a boolean associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated boolean
//      */
//     boolean getBoolean(final String key,
//             final boolean defaultValue);
// 
//     /**
//      * Get a int associated with the given configuration key.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated int
//      */
//     int getInt(final String key);
// 
//     /**
//      * Get a int associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated int
//      */
//     int getInt(final String key,
//             final int defaultValue);
// 
//     /**
//      * Get a path associated with the given configuration key.
//      *
//      * The returned path is resolved to the base directory of the instance
//      * configuration.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated path
//      */
//     Path getPath(final String key);
// 
//     /**
//      * Get all paths associated with the given configuration key.
//      *
//      * The returned paths are resolved to the base directory of the instance
//      * configuration.
//      *
//      * @param key The configuration key
//      *
//      * @return A List of the associated paths
//      */
//     List<Path> getPaths(final String key);
// 
//     /**
//      * Get a path associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * The returned path is resolved to the base directory if the instance
//      * configuration.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated path if key is found and has valid format, default
//      * value otherwise
//      */
//     Path getPath(final String key,
//             final Path defaultValue);
// 
//     /**
//      * Get a string associated with the given configuration key.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated string
//      */
//     String getString(final String key);
// 
//     /**
//      * Get a string associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated string if key is found and has valid format,
//      * default value otherwise
//      */
//     String getString(final String key,
//             final String defaultValue);
// 
//     /**
//      * Get an array of strings associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object an empty array is returned.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated string array if key is found
//      */
//     String[] getStringArray(final String key);
// 
//     /**
//      * Get the list of the keys contained in the configuration. The returned
//      * iterator can be used to obtain all defined keys. Note that the exact
//      * behavior of the iterator's {@code remove()} method is specific to a
//      * concrete implementation. It <em>may</em> remove the corresponding
//      * property from the configuration, but this is not guaranteed. In any case
//      * it is no replacement for calling {@link #clearProperty(String)} for this
//      * property. So it is highly recommended to avoid using the iterator's
//      * {@code remove()} method.
//      *
//      * @return An Iterator.
//      */
//     Iterator<String> getKeys();
// 
//     
//     void addProperty(String key, String string);
// }


import com.google.common.base.Joiner;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.opennms.pris.api.Configuration;
/**
 * *****************************************************************************
 * This file is part of OpenNMS(R).
 *
 * Copyright (C) 2014 The OpenNMS Group, Inc. OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc.
 *
 * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
 *
 * OpenNMS(R) is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * OpenNMS(R) is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with OpenNMS(R). If not, see: http://www.gnu.org/licenses/
 *
 * For more information contact: OpenNMS(R) Licensing <license@opennms.org>
 * http://www.opennms.org/ http://www.opennms.com/ *****************************************************************************
 */
package org.opennms.pris.config;


public abstract class AbstractApacheConfiguration implements Configuration {
    
    private final org.apache.commons.configuration.Configuration config;

// Path: opennms-pris-api/src/main/java/org/opennms/pris/api/Configuration.java
// public interface Configuration {
// 
//     /**
//      * Returns the path to the configuration.
//      *
//      * @return the absolute path to the configuration folder.
//      */
//     Path getBasePath();
// 
//     /**
//      * Check if the configuration is empty.
//      *
//      * @return {@code true} if the configuration contains no property,
//      * {@code false} otherwise
//      */
//     boolean isEmpty();
// 
//     /**
//      * Check if the configuration contains the specified key.
//      *
//      * @param key the key whose presence in this configuration is to be tested
//      *
//      * @return {@literal true} if the configuration contains a value for this
//      * key, {@literal false} otherwise
//      */
//     boolean containsKey(final String key);
// 
//     /**
//      * Get a boolean associated with the given configuration key.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated boolean
//      */
//     boolean getBoolean(final String key);
// 
//     /**
//      * Get a boolean associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated boolean
//      */
//     boolean getBoolean(final String key,
//             final boolean defaultValue);
// 
//     /**
//      * Get a int associated with the given configuration key.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated int
//      */
//     int getInt(final String key);
// 
//     /**
//      * Get a int associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated int
//      */
//     int getInt(final String key,
//             final int defaultValue);
// 
//     /**
//      * Get a path associated with the given configuration key.
//      *
//      * The returned path is resolved to the base directory of the instance
//      * configuration.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated path
//      */
//     Path getPath(final String key);
// 
//     /**
//      * Get all paths associated with the given configuration key.
//      *
//      * The returned paths are resolved to the base directory of the instance
//      * configuration.
//      *
//      * @param key The configuration key
//      *
//      * @return A List of the associated paths
//      */
//     List<Path> getPaths(final String key);
// 
//     /**
//      * Get a path associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * The returned path is resolved to the base directory if the instance
//      * configuration.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated path if key is found and has valid format, default
//      * value otherwise
//      */
//     Path getPath(final String key,
//             final Path defaultValue);
// 
//     /**
//      * Get a string associated with the given configuration key.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated string
//      */
//     String getString(final String key);
// 
//     /**
//      * Get a string associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object, the default value is
//      * returned.
//      *
//      * @param key The configuration key
//      * @param defaultValue The default value
//      *
//      * @return The associated string if key is found and has valid format,
//      * default value otherwise
//      */
//     String getString(final String key,
//             final String defaultValue);
// 
//     /**
//      * Get an array of strings associated with the given configuration key.
//      *
//      * If the key doesn't map to an existing object an empty array is returned.
//      *
//      * @param key The configuration key
//      *
//      * @return The associated string array if key is found
//      */
//     String[] getStringArray(final String key);
// 
//     /**
//      * Get the list of the keys contained in the configuration. The returned
//      * iterator can be used to obtain all defined keys. Note that the exact
//      * behavior of the iterator's {@code remove()} method is specific to a
//      * concrete implementation. It <em>may</em> remove the corresponding
//      * property from the configuration, but this is not guaranteed. In any case
//      * it is no replacement for calling {@link #clearProperty(String)} for this
//      * property. So it is highly recommended to avoid using the iterator's
//      * {@code remove()} method.
//      *
//      * @return An Iterator.
//      */
//     Iterator<String> getKeys();
// 
//     
//     void addProperty(String key, String string);
// }


// Path: opennms-pris-main/src/main/java/org/opennms/pris/config/AbstractApacheConfiguration.java
import com.google.common.base.Joiner;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.opennms.pris.api.Configuration;

/**
 * *****************************************************************************
 * This file is part of OpenNMS(R).
 *
 * Copyright (C) 2014 The OpenNMS Group, Inc. OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc.
 *
 * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
 *
 * OpenNMS(R) is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * OpenNMS(R) is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with OpenNMS(R). If not, see: http://www.gnu.org/licenses/
 *
 * For more information contact: OpenNMS(R) Licensing <license@opennms.org>
 * http://www.opennms.org/ http://www.opennms.com/ *****************************************************************************
 */
package org.opennms.pris.config;


public abstract class AbstractApacheConfiguration implements Configuration {
    
    private final org.apache.commons.configuration.Configuration config;

    public org.apache.commons.configuration.Configuration getConfiguration() {