Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / configuration / MemoryConfiguration.java
@vlad20012 vlad20012 on 24 Feb 2017 1 KB initial
package org.bukkit.configuration;

import org.apache.commons.lang.Validate;

import java.util.Map;

/**
 * This is a {@link Configuration} implementation that does not save or load
 * from any source, and stores all values in memory only.
 * This is useful for temporary Configurations for providing defaults.
 */
public class MemoryConfiguration extends MemorySection implements Configuration
{
	protected Configuration defaults;
	protected MemoryConfigurationOptions options;

	/**
	 * Creates an empty {@link MemoryConfiguration} with no default values.
	 */
	public MemoryConfiguration()
	{
	}

	/**
	 * Creates an empty {@link MemoryConfiguration} using the specified {@link
	 * Configuration} as a source for all default values.
	 *
	 * @param defaults Default value provider
	 * @throws IllegalArgumentException Thrown if defaults is null
	 */
	public MemoryConfiguration(Configuration defaults)
	{
		this.defaults = defaults;
	}

	@Override
	public void addDefault(String path, Object value)
	{
		Validate.notNull(path, "Path may not be null");

		if(defaults == null)
		{
			defaults = new MemoryConfiguration();
		}

		defaults.set(path, value);
	}

	public void addDefaults(Map<String, Object> defaults)
	{
		Validate.notNull(defaults, "Defaults may not be null");

		for(Map.Entry<String, Object> entry : defaults.entrySet())
		{
			addDefault(entry.getKey(), entry.getValue());
		}
	}

	public void addDefaults(Configuration defaults)
	{
		Validate.notNull(defaults, "Defaults may not be null");

		addDefaults(defaults.getValues(true));
	}

	public void setDefaults(Configuration defaults)
	{
		Validate.notNull(defaults, "Defaults may not be null");

		this.defaults = defaults;
	}

	public Configuration getDefaults()
	{
		return defaults;
	}

	@Override
	public ConfigurationSection getParent()
	{
		return null;
	}

	public MemoryConfigurationOptions options()
	{
		if(options == null)
		{
			options = new MemoryConfigurationOptions(this);
		}

		return options;
	}
}