001 package org.bukkit.configuration; 002 003 import java.util.Map; 004 005 /** 006 * Represents a source of configurable options and settings 007 */ 008 public interface Configuration extends ConfigurationSection { 009 /** 010 * Sets the default value of the given path as provided. 011 * <p> 012 * If no source {@link Configuration} was provided as a default 013 * collection, then a new {@link MemoryConfiguration} will be created to 014 * hold the new default value. 015 * <p> 016 * If value is null, the value will be removed from the default 017 * Configuration source. 018 * 019 * @param path Path of the value to set. 020 * @param value Value to set the default to. 021 * @throws IllegalArgumentException Thrown if path is null. 022 */ 023 public void addDefault(String path, Object value); 024 025 /** 026 * Sets the default values of the given paths as provided. 027 * <p> 028 * If no source {@link Configuration} was provided as a default 029 * collection, then a new {@link MemoryConfiguration} will be created to 030 * hold the new default values. 031 * 032 * @param defaults A map of Path->Values to add to defaults. 033 * @throws IllegalArgumentException Thrown if defaults is null. 034 */ 035 public void addDefaults(Map<String, Object> defaults); 036 037 /** 038 * Sets the default values of the given paths as provided. 039 * <p> 040 * If no source {@link Configuration} was provided as a default 041 * collection, then a new {@link MemoryConfiguration} will be created to 042 * hold the new default value. 043 * <p> 044 * This method will not hold a reference to the specified Configuration, 045 * nor will it automatically update if that Configuration ever changes. If 046 * you require this, you should set the default source with {@link 047 * #setDefaults(org.bukkit.configuration.Configuration)}. 048 * 049 * @param defaults A configuration holding a list of defaults to copy. 050 * @throws IllegalArgumentException Thrown if defaults is null or this. 051 */ 052 public void addDefaults(Configuration defaults); 053 054 /** 055 * Sets the source of all default values for this {@link Configuration}. 056 * <p> 057 * If a previous source was set, or previous default values were defined, 058 * then they will not be copied to the new source. 059 * 060 * @param defaults New source of default values for this configuration. 061 * @throws IllegalArgumentException Thrown if defaults is null or this. 062 */ 063 public void setDefaults(Configuration defaults); 064 065 /** 066 * Gets the source {@link Configuration} for this configuration. 067 * <p> 068 * If no configuration source was set, but default values were added, then 069 * a {@link MemoryConfiguration} will be returned. If no source was set 070 * and no defaults were set, then this method will return null. 071 * 072 * @return Configuration source for default values, or null if none exist. 073 */ 074 public Configuration getDefaults(); 075 076 /** 077 * Gets the {@link ConfigurationOptions} for this {@link Configuration}. 078 * <p> 079 * All setters through this method are chainable. 080 * 081 * @return Options for this configuration 082 */ 083 public ConfigurationOptions options(); 084 }