001    package org.bukkit.configuration.file;
002    
003    import org.bukkit.configuration.*;
004    
005    /**
006     * Various settings for controlling the input and output of a {@link
007     * FileConfiguration}
008     */
009    public class FileConfigurationOptions extends MemoryConfigurationOptions {
010        private String header = null;
011        private boolean copyHeader = true;
012    
013        protected FileConfigurationOptions(MemoryConfiguration configuration) {
014            super(configuration);
015        }
016    
017        @Override
018        public FileConfiguration configuration() {
019            return (FileConfiguration) super.configuration();
020        }
021    
022        @Override
023        public FileConfigurationOptions copyDefaults(boolean value) {
024            super.copyDefaults(value);
025            return this;
026        }
027    
028        @Override
029        public FileConfigurationOptions pathSeparator(char value) {
030            super.pathSeparator(value);
031            return this;
032        }
033    
034        /**
035         * Gets the header that will be applied to the top of the saved output.
036         * <p>
037         * This header will be commented out and applied directly at the top of
038         * the generated output of the {@link FileConfiguration}. It is not
039         * required to include a newline at the end of the header as it will
040         * automatically be applied, but you may include one if you wish for extra
041         * spacing.
042         * <p>
043         * Null is a valid value which will indicate that no header is to be
044         * applied. The default value is null.
045         *
046         * @return Header
047         */
048        public String header() {
049            return header;
050        }
051    
052        /**
053         * Sets the header that will be applied to the top of the saved output.
054         * <p>
055         * This header will be commented out and applied directly at the top of
056         * the generated output of the {@link FileConfiguration}. It is not
057         * required to include a newline at the end of the header as it will
058         * automatically be applied, but you may include one if you wish for extra
059         * spacing.
060         * <p>
061         * Null is a valid value which will indicate that no header is to be
062         * applied.
063         *
064         * @param value New header
065         * @return This object, for chaining
066         */
067        public FileConfigurationOptions header(String value) {
068            this.header = value;
069            return this;
070        }
071    
072        /**
073         * Gets whether or not the header should be copied from a default source.
074         * <p>
075         * If this is true, if a default {@link FileConfiguration} is passed to
076         * {@link
077         * FileConfiguration#setDefaults(org.bukkit.configuration.Configuration)}
078         * then upon saving it will use the header from that config, instead of
079         * the one provided here.
080         * <p>
081         * If no default is set on the configuration, or the default is not of
082         * type FileConfiguration, or that config has no header ({@link #header()}
083         * returns null) then the header specified in this configuration will be
084         * used.
085         * <p>
086         * Defaults to true.
087         *
088         * @return Whether or not to copy the header
089         */
090        public boolean copyHeader() {
091            return copyHeader;
092        }
093    
094        /**
095         * Sets whether or not the header should be copied from a default source.
096         * <p>
097         * If this is true, if a default {@link FileConfiguration} is passed to
098         * {@link
099         * FileConfiguration#setDefaults(org.bukkit.configuration.Configuration)}
100         * then upon saving it will use the header from that config, instead of
101         * the one provided here.
102         * <p>
103         * If no default is set on the configuration, or the default is not of
104         * type FileConfiguration, or that config has no header ({@link #header()}
105         * returns null) then the header specified in this configuration will be
106         * used.
107         * <p>
108         * Defaults to true.
109         *
110         * @param value Whether or not to copy the header
111         * @return This object, for chaining
112         */
113        public FileConfigurationOptions copyHeader(boolean value) {
114            copyHeader = value;
115    
116            return this;
117        }
118    }