/*
* This file is part of Foxbot.
*
* Foxbot 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.
*
* Foxbot 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 Foxbot. If not, see <http://www.gnu.org/licenses/>.
*/
package co.foxdev.foxbot.config.yamlconfig;
/**
* Various settings for controlling the input and output of a
* {@link Configuration}
*/
public class ConfigurationOptions
{
private char pathSeparator = '.';
private boolean copyDefaults = false;
private final Configuration configuration;
protected ConfigurationOptions(Configuration configuration)
{
this.configuration = configuration;
}
/**
* Returns the {@link Configuration} that this object is responsible for.
*
* @return Parent configuration
*/
public Configuration configuration()
{
return configuration;
}
/**
* Gets the char that will be used to separate {@link ConfigurationSection}s
* <p/>
* This value does not affect how the {@link Configuration} is stored, only
* in how you access the data. The default value is '.'.
*
* @return Path separator
*/
public char pathSeparator()
{
return pathSeparator;
}
/**
* Sets the char that will be used to separate {@link ConfigurationSection}s
* <p/>
* This value does not affect how the {@link Configuration} is stored, only
* in how you access the data. The default value is '.'.
*
* @param value Path separator
* @return This object, for chaining
*/
public ConfigurationOptions pathSeparator(char value)
{
this.pathSeparator = value;
return this;
}
/**
* Checks if the {@link Configuration} should copy values from its default
* {@link Configuration} directly.
* <p/>
* If this is true, all values in the default Configuration will be directly
* copied, making it impossible to distinguish between values that were set
* and values that are provided by default. As a result,
* {@link ConfigurationSection#contains(java.lang.String)} will always
* return the same value as
* {@link ConfigurationSection#isSet(java.lang.String)}. The default value
* is false.
*
* @return Whether or not defaults are directly copied
*/
public boolean copyDefaults()
{
return copyDefaults;
}
/**
* Sets if the {@link Configuration} should copy values from its default
* {@link Configuration} directly.
* <p/>
* If this is true, all values in the default Configuration will be directly
* copied, making it impossible to distinguish between values that were set
* and values that are provided by default. As a result,
* {@link ConfigurationSection#contains(java.lang.String)} will always
* return the same value as
* {@link ConfigurationSection#isSet(java.lang.String)}. The default value
* is false.
*
* @param value Whether or not defaults are directly copied
* @return This object, for chaining
*/
public ConfigurationOptions copyDefaults(boolean value)
{
this.copyDefaults = value;
return this;
}
}