001    package org.bukkit.configuration;
002    
003    /**
004     * Various settings for controlling the input and output of a {@link
005     * Configuration}
006     */
007    public class ConfigurationOptions {
008        private char pathSeparator = '.';
009        private boolean copyDefaults = false;
010        private final Configuration configuration;
011    
012        protected ConfigurationOptions(Configuration configuration) {
013            this.configuration = configuration;
014        }
015    
016        /**
017         * Returns the {@link Configuration} that this object is responsible for.
018         *
019         * @return Parent configuration
020         */
021        public Configuration configuration() {
022            return configuration;
023        }
024    
025        /**
026         * Gets the char that will be used to separate {@link
027         * ConfigurationSection}s
028         * <p>
029         * This value does not affect how the {@link Configuration} is stored,
030         * only in how you access the data. The default value is '.'.
031         *
032         * @return Path separator
033         */
034        public char pathSeparator() {
035            return pathSeparator;
036        }
037    
038        /**
039         * Sets the char that will be used to separate {@link
040         * ConfigurationSection}s
041         * <p>
042         * This value does not affect how the {@link Configuration} is stored,
043         * only in how you access the data. The default value is '.'.
044         *
045         * @param value Path separator
046         * @return This object, for chaining
047         */
048        public ConfigurationOptions pathSeparator(char value) {
049            this.pathSeparator = value;
050            return this;
051        }
052    
053        /**
054         * Checks if the {@link Configuration} should copy values from its default
055         * {@link Configuration} directly.
056         * <p>
057         * If this is true, all values in the default Configuration will be
058         * directly copied, making it impossible to distinguish between values
059         * that were set and values that are provided by default. As a result,
060         * {@link ConfigurationSection#contains(java.lang.String)} will always
061         * return the same value as {@link
062         * ConfigurationSection#isSet(java.lang.String)}. The default value is
063         * false.
064         *
065         * @return Whether or not defaults are directly copied
066         */
067        public boolean copyDefaults() {
068            return copyDefaults;
069        }
070    
071        /**
072         * Sets if the {@link Configuration} should copy values from its default
073         * {@link Configuration} directly.
074         * <p>
075         * If this is true, all values in the default Configuration will be
076         * directly copied, making it impossible to distinguish between values
077         * that were set and values that are provided by default. As a result,
078         * {@link ConfigurationSection#contains(java.lang.String)} will always
079         * return the same value as {@link
080         * ConfigurationSection#isSet(java.lang.String)}. The default value is
081         * false.
082         *
083         * @param value Whether or not defaults are directly copied
084         * @return This object, for chaining
085         */
086        public ConfigurationOptions copyDefaults(boolean value) {
087            this.copyDefaults = value;
088            return this;
089        }
090    }