package net.t7seven7t.craftfx.data;
import com.google.common.collect.MapMaker;
import org.bukkit.configuration.ConfigurationSection;
import java.util.Map;
import java.util.Optional;
/**
*
*/
public class ConfigDataHolder implements DataHolder {
private final ConfigurationSection config;
private final Map<Class<? extends Data>, Data> dataMap = new MapMaker().makeMap();
public ConfigDataHolder(ConfigurationSection config) {
this.config = config;
}
@Override
public void offer(Data data) {
dataMap.put(data.getClass(), data);
data.setHolder(this);
}
@Override
public <T extends Data> Optional<T> getData(Class<T> clazz) {
return Optional.ofNullable((T) dataMap.get(clazz));
}
@Override
public <T> Optional<T> get(String propertyName, Class<T> clazz) {
Object o = config.get(propertyName);
return clazz.isInstance(o) ? Optional.of((T) o) : Optional.<T>empty();
}
/**
* Sets a property for this DataHolder
*
* @param propertyName the property name
* @param value new value of the property
*/
@Override
public void set(String propertyName, Object value) {
config.set(propertyName, value);
dataMap.values().forEach(Data::onDataHolderUpdate);
}
public ConfigurationSection getConfig() {
return config;
}
}