package org.bukkit.configuration; import java.util.Map; import java.util.Set; import java.util.List; import org.bukkit.Color; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.util.Vector; import org.bukkit.inventory.ItemStack; /** * Represents a section of a {@link Configuration} */ public interface ConfigurationSection { /** * Gets a set containing all keys in this section. *

* If deep is set to true, then this will contain all the keys within any * child {@link ConfigurationSection}s (and their children, etc). These * will be in a valid path notation for you to use. *

* If deep is set to false, then this will contain only the keys of any * direct children, and not their own children. * * @param deep Whether or not to get a deep list, as opposed to a shallow * list. * @return Set of keys contained within this ConfigurationSection. */ public Set getKeys(boolean deep); /** * Gets a Map containing all keys and their values for this section. *

* If deep is set to true, then this will contain all the keys and values * within any child {@link ConfigurationSection}s (and their children, * etc). These keys will be in a valid path notation for you to use. *

* If deep is set to false, then this will contain only the keys and * values of any direct children, and not their own children. * * @param deep Whether or not to get a deep list, as opposed to a shallow * list. * @return Map of keys and values of this section. */ public Map getValues(boolean deep); /** * Checks if this {@link ConfigurationSection} contains the given path. *

* If the value for the requested path does not exist but a default value * has been specified, this will return true. * * @param path Path to check for existence. * @return True if this section contains the requested path, either via * default or being set. * @throws IllegalArgumentException Thrown when path is null. */ public boolean contains(String path); /** * Checks if this {@link ConfigurationSection} contains the given path. *

* If the value for the requested path does not exist, the boolean parameter * of true has been specified, a default value for the path exists, this * will return true. *

* If a boolean parameter of false has been specified, true will only be * returned if there is a set value for the specified path. * * @param path Path to check for existence. * @param ignoreDefault Whether or not to ignore if a default value for the * specified path exists. * @return True if this section contains the requested path, or if a default * value exist and the boolean parameter for this method is true. * @throws IllegalArgumentException Thrown when path is null. */ public boolean contains(String path, boolean ignoreDefault); /** * Checks if this {@link ConfigurationSection} has a value set for the * given path. *

* If the value for the requested path does not exist but a default value * has been specified, this will still return false. * * @param path Path to check for existence. * @return True if this section contains the requested path, regardless of * having a default. * @throws IllegalArgumentException Thrown when path is null. */ public boolean isSet(String path); /** * Gets the path of this {@link ConfigurationSection} from its root {@link * Configuration} *

* For any {@link Configuration} themselves, this will return an empty * string. *

* If the section is no longer contained within its root for any reason, * such as being replaced with a different value, this may return null. *

* To retrieve the single name of this section, that is, the final part of * the path returned by this method, you may use {@link #getName()}. * * @return Path of this section relative to its root */ public String getCurrentPath(); /** * Gets the name of this individual {@link ConfigurationSection}, in the * path. *

* This will always be the final part of {@link #getCurrentPath()}, unless * the section is orphaned. * * @return Name of this section */ public String getName(); /** * Gets the root {@link Configuration} that contains this {@link * ConfigurationSection} *

* For any {@link Configuration} themselves, this will return its own * object. *

* If the section is no longer contained within its root for any reason, * such as being replaced with a different value, this may return null. * * @return Root configuration containing this section. */ public Configuration getRoot(); /** * Gets the parent {@link ConfigurationSection} that directly contains * this {@link ConfigurationSection}. *

* For any {@link Configuration} themselves, this will return null. *

* If the section is no longer contained within its parent for any reason, * such as being replaced with a different value, this may return null. * * @return Parent section containing this section. */ public ConfigurationSection getParent(); /** * Gets the requested Object by path. *

* If the Object does not exist but a default value has been specified, * this will return the default value. If the Object does not exist and no * default value was specified, this will return null. * * @param path Path of the Object to get. * @return Requested Object. */ public Object get(String path); /** * Gets the requested Object by path, returning a default value if not * found. *

* If the Object does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the Object to get. * @param def The default value to return if the path is not found. * @return Requested Object. */ public Object get(String path, Object def); /** * Sets the specified path to the given value. *

* If value is null, the entry will be removed. Any existing entry will be * replaced, regardless of what the new value is. *

* Some implementations may have limitations on what you may store. See * their individual javadocs for details. No implementations should allow * you to store {@link Configuration}s or {@link ConfigurationSection}s, * please use {@link #createSection(java.lang.String)} for that. * * @param path Path of the object to set. * @param value New value to set the path to. */ public void set(String path, Object value); /** * Creates an empty {@link ConfigurationSection} at the specified path. *

* Any value that was previously set at this path will be overwritten. If * the previous value was itself a {@link ConfigurationSection}, it will * be orphaned. * * @param path Path to create the section at. * @return Newly created section */ public ConfigurationSection createSection(String path); /** * Creates a {@link ConfigurationSection} at the specified path, with * specified values. *

* Any value that was previously set at this path will be overwritten. If * the previous value was itself a {@link ConfigurationSection}, it will * be orphaned. * * @param path Path to create the section at. * @param map The values to used. * @return Newly created section */ public ConfigurationSection createSection(String path, Map map); // Primitives /** * Gets the requested String by path. *

* If the String does not exist but a default value has been specified, * this will return the default value. If the String does not exist and no * default value was specified, this will return null. * * @param path Path of the String to get. * @return Requested String. */ public String getString(String path); /** * Gets the requested String by path, returning a default value if not * found. *

* If the String does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the String to get. * @param def The default value to return if the path is not found or is * not a String. * @return Requested String. */ public String getString(String path, String def); /** * Checks if the specified path is a String. *

* If the path exists but is not a String, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a String and return appropriately. * * @param path Path of the String to check. * @return Whether or not the specified path is a String. */ public boolean isString(String path); /** * Gets the requested int by path. *

* If the int does not exist but a default value has been specified, this * will return the default value. If the int does not exist and no default * value was specified, this will return 0. * * @param path Path of the int to get. * @return Requested int. */ public int getInt(String path); /** * Gets the requested int by path, returning a default value if not found. *

* If the int does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the int to get. * @param def The default value to return if the path is not found or is * not an int. * @return Requested int. */ public int getInt(String path, int def); /** * Checks if the specified path is an int. *

* If the path exists but is not a int, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a int and return appropriately. * * @param path Path of the int to check. * @return Whether or not the specified path is an int. */ public boolean isInt(String path); /** * Gets the requested boolean by path. *

* If the boolean does not exist but a default value has been specified, * this will return the default value. If the boolean does not exist and * no default value was specified, this will return false. * * @param path Path of the boolean to get. * @return Requested boolean. */ public boolean getBoolean(String path); /** * Gets the requested boolean by path, returning a default value if not * found. *

* If the boolean does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the boolean to get. * @param def The default value to return if the path is not found or is * not a boolean. * @return Requested boolean. */ public boolean getBoolean(String path, boolean def); /** * Checks if the specified path is a boolean. *

* If the path exists but is not a boolean, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a boolean and return appropriately. * * @param path Path of the boolean to check. * @return Whether or not the specified path is a boolean. */ public boolean isBoolean(String path); /** * Gets the requested double by path. *

* If the double does not exist but a default value has been specified, * this will return the default value. If the double does not exist and no * default value was specified, this will return 0. * * @param path Path of the double to get. * @return Requested double. */ public double getDouble(String path); /** * Gets the requested double by path, returning a default value if not * found. *

* If the double does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the double to get. * @param def The default value to return if the path is not found or is * not a double. * @return Requested double. */ public double getDouble(String path, double def); /** * Checks if the specified path is a double. *

* If the path exists but is not a double, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a double and return appropriately. * * @param path Path of the double to check. * @return Whether or not the specified path is a double. */ public boolean isDouble(String path); /** * Gets the requested long by path. *

* If the long does not exist but a default value has been specified, this * will return the default value. If the long does not exist and no * default value was specified, this will return 0. * * @param path Path of the long to get. * @return Requested long. */ public long getLong(String path); /** * Gets the requested long by path, returning a default value if not * found. *

* If the long does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the long to get. * @param def The default value to return if the path is not found or is * not a long. * @return Requested long. */ public long getLong(String path, long def); /** * Checks if the specified path is a long. *

* If the path exists but is not a long, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a long and return appropriately. * * @param path Path of the long to check. * @return Whether or not the specified path is a long. */ public boolean isLong(String path); // Java /** * Gets the requested List by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return null. * * @param path Path of the List to get. * @return Requested List. */ public List getList(String path); /** * Gets the requested List by path, returning a default value if not * found. *

* If the List does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the List to get. * @param def The default value to return if the path is not found or is * not a List. * @return Requested List. */ public List getList(String path, List def); /** * Checks if the specified path is a List. *

* If the path exists but is not a List, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a List and return appropriately. * * @param path Path of the List to check. * @return Whether or not the specified path is a List. */ public boolean isList(String path); /** * Gets the requested List of String by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a String if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of String. */ public List getStringList(String path); /** * Gets the requested List of Integer by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Integer if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Integer. */ public List getIntegerList(String path); /** * Gets the requested List of Boolean by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Boolean if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Boolean. */ public List getBooleanList(String path); /** * Gets the requested List of Double by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Double if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Double. */ public List getDoubleList(String path); /** * Gets the requested List of Float by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Float if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Float. */ public List getFloatList(String path); /** * Gets the requested List of Long by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Long if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Long. */ public List getLongList(String path); /** * Gets the requested List of Byte by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Byte if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Byte. */ public List getByteList(String path); /** * Gets the requested List of Character by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Character if * possible, but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Character. */ public List getCharacterList(String path); /** * Gets the requested List of Short by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Short if possible, * but may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Short. */ public List getShortList(String path); /** * Gets the requested List of Maps by path. *

* If the List does not exist but a default value has been specified, this * will return the default value. If the List does not exist and no * default value was specified, this will return an empty List. *

* This method will attempt to cast any values into a Map if possible, but * may miss any values out if they are not compatible. * * @param path Path of the List to get. * @return Requested List of Maps. */ public List> getMapList(String path); // Bukkit /** * Gets the requested {@link ConfigurationSerializable} object at the given * path. * * If the Object does not exist but a default value has been specified, this * will return the default value. If the Object does not exist and no * default value was specified, this will return null. * * @param the type of {@link ConfigurationSerializable} * @param path the path to the object. * @param clazz the type of {@link ConfigurationSerializable} * @return Requested {@link ConfigurationSerializable} object */ public T getSerializable(String path, Class clazz); /** * Gets the requested {@link ConfigurationSerializable} object at the given * path, returning a default value if not found * * If the Object does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param the type of {@link ConfigurationSerializable} * @param path the path to the object. * @param clazz the type of {@link ConfigurationSerializable} * @param def the default object to return if the object is not present at * the path * @return Requested {@link ConfigurationSerializable} object */ public T getSerializable(String path, Class clazz, T def); /** * Gets the requested Vector by path. *

* If the Vector does not exist but a default value has been specified, * this will return the default value. If the Vector does not exist and no * default value was specified, this will return null. * * @param path Path of the Vector to get. * @return Requested Vector. */ public Vector getVector(String path); /** * Gets the requested {@link Vector} by path, returning a default value if * not found. *

* If the Vector does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the Vector to get. * @param def The default value to return if the path is not found or is * not a Vector. * @return Requested Vector. */ public Vector getVector(String path, Vector def); /** * Checks if the specified path is a Vector. *

* If the path exists but is not a Vector, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a Vector and return appropriately. * * @param path Path of the Vector to check. * @return Whether or not the specified path is a Vector. */ public boolean isVector(String path); /** * Gets the requested OfflinePlayer by path. *

* If the OfflinePlayer does not exist but a default value has been * specified, this will return the default value. If the OfflinePlayer * does not exist and no default value was specified, this will return * null. * * @param path Path of the OfflinePlayer to get. * @return Requested OfflinePlayer. */ public OfflinePlayer getOfflinePlayer(String path); /** * Gets the requested {@link OfflinePlayer} by path, returning a default * value if not found. *

* If the OfflinePlayer does not exist then the specified default value * will returned regardless of if a default has been identified in the * root {@link Configuration}. * * @param path Path of the OfflinePlayer to get. * @param def The default value to return if the path is not found or is * not an OfflinePlayer. * @return Requested OfflinePlayer. */ public OfflinePlayer getOfflinePlayer(String path, OfflinePlayer def); /** * Checks if the specified path is an OfflinePlayer. *

* If the path exists but is not a OfflinePlayer, this will return false. * If the path does not exist, this will return false. If the path does * not exist but a default value has been specified, this will check if * that default value is a OfflinePlayer and return appropriately. * * @param path Path of the OfflinePlayer to check. * @return Whether or not the specified path is an OfflinePlayer. */ public boolean isOfflinePlayer(String path); /** * Gets the requested ItemStack by path. *

* If the ItemStack does not exist but a default value has been specified, * this will return the default value. If the ItemStack does not exist and * no default value was specified, this will return null. * * @param path Path of the ItemStack to get. * @return Requested ItemStack. */ public ItemStack getItemStack(String path); /** * Gets the requested {@link ItemStack} by path, returning a default value * if not found. *

* If the ItemStack does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the ItemStack to get. * @param def The default value to return if the path is not found or is * not an ItemStack. * @return Requested ItemStack. */ public ItemStack getItemStack(String path, ItemStack def); /** * Checks if the specified path is an ItemStack. *

* If the path exists but is not a ItemStack, this will return false. If * the path does not exist, this will return false. If the path does not * exist but a default value has been specified, this will check if that * default value is a ItemStack and return appropriately. * * @param path Path of the ItemStack to check. * @return Whether or not the specified path is an ItemStack. */ public boolean isItemStack(String path); /** * Gets the requested Color by path. *

* If the Color does not exist but a default value has been specified, * this will return the default value. If the Color does not exist and no * default value was specified, this will return null. * * @param path Path of the Color to get. * @return Requested Color. */ public Color getColor(String path); /** * Gets the requested {@link Color} by path, returning a default value if * not found. *

* If the Color does not exist then the specified default value will * returned regardless of if a default has been identified in the root * {@link Configuration}. * * @param path Path of the Color to get. * @param def The default value to return if the path is not found or is * not a Color. * @return Requested Color. */ public Color getColor(String path, Color def); /** * Checks if the specified path is a Color. *

* If the path exists but is not a Color, this will return false. If the * path does not exist, this will return false. If the path does not exist * but a default value has been specified, this will check if that default * value is a Color and return appropriately. * * @param path Path of the Color to check. * @return Whether or not the specified path is a Color. */ public boolean isColor(String path); /** * Gets the requested ConfigurationSection by path. *

* If the ConfigurationSection does not exist but a default value has been * specified, this will return the default value. If the * ConfigurationSection does not exist and no default value was specified, * this will return null. * * @param path Path of the ConfigurationSection to get. * @return Requested ConfigurationSection. */ public ConfigurationSection getConfigurationSection(String path); /** * Checks if the specified path is a ConfigurationSection. *

* If the path exists but is not a ConfigurationSection, this will return * false. If the path does not exist, this will return false. If the path * does not exist but a default value has been specified, this will check * if that default value is a ConfigurationSection and return * appropriately. * * @param path Path of the ConfigurationSection to check. * @return Whether or not the specified path is a ConfigurationSection. */ public boolean isConfigurationSection(String path); /** * Gets the equivalent {@link ConfigurationSection} from the default * {@link Configuration} defined in {@link #getRoot()}. *

* If the root contains no defaults, or the defaults doesn't contain a * value for this path, or the value at this path is not a {@link * ConfigurationSection} then this will return null. * * @return Equivalent section in root configuration */ public ConfigurationSection getDefaultSection(); /** * Sets the default value in the root at the given path as provided. *

* If no source {@link Configuration} was provided as a default * collection, then a new {@link MemoryConfiguration} will be created to * hold the new default value. *

* If value is null, the value will be removed from the default * Configuration source. *

* If the value as returned by {@link #getDefaultSection()} is null, then * this will create a new section at the path, replacing anything that may * have existed there previously. * * @param path Path of the value to set. * @param value Value to set the default to. * @throws IllegalArgumentException Thrown if path is null. */ public void addDefault(String path, Object value); }