SearchGUIParser.java
package it.fulminazzo.yagl.parser;
import it.fulminazzo.fulmicollection.interfaces.functions.BiFunctionException;
import it.fulminazzo.fulmicollection.interfaces.functions.TriConsumer;
import it.fulminazzo.yagl.gui.GUI;
import it.fulminazzo.yagl.gui.GUIType;
import it.fulminazzo.yagl.gui.SearchGUI;
import it.fulminazzo.yagl.gui.TypeGUI;
import it.fulminazzo.yagl.util.ParserUtils;
import it.fulminazzo.yamlparser.configuration.ConfigurationSection;
import it.fulminazzo.yamlparser.configuration.IConfiguration;
import it.fulminazzo.yamlparser.parsers.YAMLParser;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
/**
* A parser to serialize {@link SearchGUI}.
*/
@SuppressWarnings("unchecked")
public class SearchGUIParser extends YAMLParser<SearchGUI<?>> {
private static final @NotNull Map<String, Object> FIXED_VARIABLES = new HashMap<>();
static {
FIXED_VARIABLES.put("inventory-type", GUIType.ANVIL.name());
FIXED_VARIABLES.put("size", GUIType.ANVIL.getSize());
FIXED_VARIABLES.put("upper-gui-type", ParserUtils.classToType(GUI.class, TypeGUI.class));
FIXED_VARIABLES.put("gui-type", ParserUtils.classToType(
GUI.class, (Class<? extends GUI>) SearchGUI.class.getDeclaredClasses()[0]
));
}
private final @NotNull PageableGUIParser internalParser;
/**
* Instantiates a new Search gui parser.
*/
public SearchGUIParser() {
super((Class<SearchGUI<?>>) (Class<?>) SearchGUI.class);
this.internalParser = new PageableGUIParser();
}
@Override
protected BiFunctionException<IConfiguration, String, SearchGUI<?>, Exception> getLoader() {
return (c, s) -> {
ConfigurationSection section = c.getConfigurationSection(s);
if (section == null) return null;
final Integer lowerGuiSize = section.getInteger("lower-gui-size");
if (lowerGuiSize == null) throw new IllegalArgumentException("'lower-gui-size' cannot be null");
Map<String, Object> previous = new HashMap<>();
FIXED_VARIABLES.forEach((k, v) -> {
previous.put(k, section.getObject(k));
section.set(k, v);
});
SearchGUI<?> gui = (SearchGUI<?>) this.internalParser.load(c, s);
previous.forEach(section::set);
return gui;
};
}
@Override
protected TriConsumer<IConfiguration, String, SearchGUI<?>> getDumper() {
return (c, s, g) -> {
this.internalParser.dump(c, s, g);
if (c.isConfigurationSection(s))
FIXED_VARIABLES.forEach((k, v) -> c.set(s + "." + k, null));
};
}
}