SubServers-2/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Config/YAMLSection.java

474 lines
15 KiB
Java

package net.ME1312.SubServers.Bungee.Library.Config;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.md_5.bungee.api.ChatColor;
import org.json.JSONObject;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.error.YAMLException;
import java.io.InputStream;
import java.io.Reader;
import java.util.*;
@SuppressWarnings({"unchecked", "unused"})
public class YAMLSection {
protected Map<String, Object> map;
protected String label = null;
protected YAMLSection up = null;
private Yaml yaml;
public YAMLSection() {
this.map = new HashMap<>();
this.yaml = new Yaml(YAMLConfig.getDumperOptions());
}
public YAMLSection(InputStream io) throws YAMLException {
this.map = (Map<String, Object>) (this.yaml = new Yaml(YAMLConfig.getDumperOptions())).load(io);
}
public YAMLSection(Reader reader) throws YAMLException {
this.map = (Map<String, Object>) (this.yaml = new Yaml(YAMLConfig.getDumperOptions())).load(reader);
}
public YAMLSection(JSONObject json) {
this.map = (Map<String, Object>) (this.yaml = new Yaml(YAMLConfig.getDumperOptions())).load(json.toString(4));
}
public YAMLSection(String yaml) throws YAMLException {
this.map = (Map<String, Object>) (this.yaml = new Yaml(YAMLConfig.getDumperOptions())).load(yaml);
}
protected YAMLSection(Map<String, ?> map, YAMLSection up, String label, Yaml yaml) {
this.map = new HashMap<String, Object>();
this.yaml = yaml;
this.label = label;
this.up = up;
if (map != null) {
for (String key : map.keySet()) {
this.map.put(key, map.get(key));
}
}
}
public Set<String> getKeys() {
return map.keySet();
}
public Collection<YAMLValue> getValues() {
List<YAMLValue> values = new ArrayList<YAMLValue>();
for (String value : map.keySet()) {
values.add(new YAMLValue(map.get(value), this, value, yaml));
}
return values;
}
public boolean contains(String label) {
return map.keySet().contains(label);
}
public void remove(String label) {
map.remove(label);
}
public void clear() {
map.clear();
}
public void set(String label, Object value) {
if (value instanceof YAMLConfig) { // YAML Handler Values
((YAMLConfig) value).get().up = this;
((YAMLConfig) value).get().label = label;
map.put(label, ((YAMLConfig) value).get().map);
} else if (value instanceof YAMLSection) {
((YAMLSection) value).up = this;
((YAMLSection) value).label = label;
map.put(label, ((YAMLSection) value).map);
} else if (value instanceof YAMLValue) {
map.put(label, ((YAMLValue) value).asObject());
} else if (value instanceof UUID) {
map.put(label, ((UUID) value).toString());
} else {
map.put(label, value);
}
if (this.label != null && this.up != null) {
this.up.set(this.label, this);
}
}
public void setAll(Map<String, ?> values) {
for (String value : values.keySet()) {
set(value, values.get(value));
}
}
public void setAll(YAMLSection values) {
for (String value : values.map.keySet()) {
set(value, values.map.get(value));
}
}
public YAMLSection superSection() {
return up;
}
@Override
public String toString() {
return yaml.dump(map);
}
public JSONObject toJSON() {
return new JSONObject(map);
}
public YAMLValue get(String label) {
return (map.get(label) != null)?(new YAMLValue(map.get(label), this, label, yaml)):null;
}
public YAMLValue get(String label, Object def) {
return new YAMLValue((map.get(label) != null)?map.get(label):def, this, label, yaml);
}
public YAMLValue get(String label, YAMLValue def) {
return (map.get(label) != null) ? (new YAMLValue(map.get(label), this, label, yaml)) : def;
}
public List<YAMLValue> getList(String label) {
if (map.get(label) != null) {
List<YAMLValue> values = new ArrayList<YAMLValue>();
for (Object value : (List<?>) map.get(label)) {
values.add(new YAMLValue(value, null, null, yaml));
}
return values;
} else {
return null;
}
}
public List<YAMLValue> getList(String label, Collection<?> def) {
if (map.get(label) != null) {
return getList(label);
} else {
List<YAMLValue> values = new ArrayList<YAMLValue>();
for (Object value : def) {
values.add(new YAMLValue(value, null, null, yaml));
}
return values;
}
}
public List<YAMLValue> getList(String label, List<? extends YAMLValue> def) {
if (map.get(label) != null) {
return getList(label);
} else {
List<YAMLValue> values = new ArrayList<YAMLValue>();
for (YAMLValue value : def) {
values.add(value);
}
return values;
}
}
public Object getObject(String label) {
return map.get(label);
}
public Object getObject(String label, Object def) {
return (map.get(label) != null)?map.get(label):def;
}
public List<?> getObjectList(String label) {
return (List<?>) map.get(label);
}
public List<?> getObjectList(String label, List<?> def) {
return (List<?>) ((map.get(label) != null)?map.get(label):def);
}
public boolean getBoolean(String label) {
return (boolean) map.get(label);
}
public boolean getBoolean(String label, boolean def) {
return (boolean) ((map.get(label) != null)?map.get(label):def);
}
public List<Boolean> getBooleanList(String label) {
return (List<Boolean>) map.get(label);
}
public List<Boolean> getBooleanList(String label, List<Boolean> def) {
return (List<Boolean>) ((map.get(label) != null)?map.get(label):def);
}
public YAMLSection getSection(String label) {
return (map.get(label) != null)?(new YAMLSection((Map<String, Object>) map.get(label), this, label, yaml)):null;
}
public YAMLSection getSection(String label, Map<String, ?> def) {
return new YAMLSection((Map<String, Object>) ((map.get(label) != null)?map.get(label):def), this, label, yaml);
}
public YAMLSection getSection(String label, YAMLSection def) {
return (map.get(label) != null)?(new YAMLSection((Map<String, Object>) map.get(label), this, label, yaml)):def;
}
public List<YAMLSection> getSectionList(String label) {
if (map.get(label) != null) {
List<YAMLSection> values = new ArrayList<YAMLSection>();
for (Map<String, ?> value : (List<? extends Map<String, ?>>) map.get(label)) {
values.add(new YAMLSection(value, null, null, yaml));
}
return values;
} else {
return null;
}
}
public List<YAMLSection> getSectionList(String label, Collection<? extends Map<String, ?>> def) {
if (map.get(label) != null) {
return getSectionList(label);
} else {
List<YAMLSection> values = new ArrayList<YAMLSection>();
for (Map<String, ?> value : def) {
values.add(new YAMLSection(value, null, null, yaml));
}
return values;
}
}
public List<YAMLSection> getSectionList(String label, List<? extends YAMLSection> def) {
if (map.get(label) != null) {
return getSectionList(label);
} else {
List<YAMLSection> values = new ArrayList<YAMLSection>();
for (YAMLSection value : def) {
values.add(value);
}
return values;
}
}
public double getDouble(String label) {
return (double) map.get(label);
}
public double getDouble(String label, double def) {
return (double) ((map.get(label) != null)?map.get(label):def);
}
public List<Double> getDoubleList(String label) {
return (List<Double>) map.get(label);
}
public List<Double> getDoubleList(String label, List<Double> def) {
return (List<Double>) ((map.get(label) != null)?map.get(label):def);
}
public float getFloat(String label) {
return (float) map.get(label);
}
public float getFloat(String label, float def) {
return (float) ((map.get(label) != null)?map.get(label):def);
}
public List<Float> getFloatList(String label) {
return (List<Float>) map.get(label);
}
public List<Float> getFloatList(String label, float def) {
return (List<Float>) ((map.get(label) != null)?map.get(label):def);
}
public int getInt(String label) {
return (int) map.get(label);
}
public int getInt(String label, int def) {
return (int) ((map.get(label) != null)?map.get(label):def);
}
public List<Integer> getIntList(String label) {
return (List<Integer>) map.get(label);
}
public List<Integer> getIntList(String label, List<Integer> def) {
return (List<Integer>) ((map.get(label) != null)?map.get(label):def);
}
public long getLong(String label) {
return (long) map.get(label);
}
public long getLong(String label, long def) {
return (long) ((map.get(label) != null)?map.get(label):def);
}
public List<Long> getLongList(String label) {
return (List<Long>) map.get(label);
}
public List<Long> getLongList(String label, List<Long> def) {
return (List<Long>) ((map.get(label) != null)?map.get(label):def);
}
public short getShort(String label) {
return (short) map.get(label);
}
public short getShort(String label, short def) {
return (short) ((map.get(label) != null)?map.get(label):def);
}
public List<Short> getShortList(String label) {
return (List<Short>) map.get(label);
}
public List<Short> getShortList(String label, List<Short> def) {
return (List<Short>) ((map.get(label) != null)?map.get(label):def);
}
public String getRawString(String label) {
return (String) map.get(label);
}
public String getRawString(String label, String def) {
return (String) ((map.get(label) != null)?map.get(label):def);
}
public List<String> getRawStringList(String label) {
return (List<String>) map.get(label);
}
public List<String> getRawStringList(String label, List<String> def) {
return (List<String>) ((map.get(label) != null)?map.get(label):def);
}
public String getString(String label) {
return (map.get(label) != null)?Util.unescapeJavaString((String) map.get(label)):null;
}
public String getString(String label, String def) {
return Util.unescapeJavaString((String) ((map.get(label) != null) ? map.get(label) : def));
}
public List<String> getStringList(String label) {
if (map.get(label) != null) {
List<String> values = new ArrayList<String>();
for (String value : (List<String>) map.get(label)) {
values.add(Util.unescapeJavaString(value));
}
return values;
} else {
return null;
}
}
public List<String> getStringList(String label, List<String> def) {
if (map.get(label) != null) {
return getStringList(label);
} else {
List<String> values = new ArrayList<String>();
for (String value : def) {
values.add(Util.unescapeJavaString(value));
}
return values;
}
}
public String getColoredString(String label, char color) {
return (map.get(label) != null)? ChatColor.translateAlternateColorCodes(color, Util.unescapeJavaString((String) map.get(label))):null;
}
public String getColoredString(String label, String def, char color) {
return ChatColor.translateAlternateColorCodes(color, Util.unescapeJavaString((String) ((map.get(label) != null) ? map.get(label) : def)));
}
public List<String> getColoredStringList(String label, char color) {
if (map.get(label) != null) {
List<String> values = new ArrayList<String>();
for (String value : (List<String>) map.get(label)) {
values.add(ChatColor.translateAlternateColorCodes(color, Util.unescapeJavaString(value)));
}
return values;
} else {
return null;
}
}
public List<String> getColoredStringList(String label, List<String> def, char color) {
if (map.get(label) != null) {
return getColoredStringList(label, color);
} else {
List<String> values = new ArrayList<String>();
for (String value : def) {
values.add(ChatColor.translateAlternateColorCodes(color, Util.unescapeJavaString(value)));
}
return values;
}
}
public UUID getUUID(String label) {
return (map.get(label) != null)?UUID.fromString((String) map.get(label)):null;
}
public UUID getUUID(String label, UUID def) {
return UUID.fromString((String) ((map.get(label) != null) ? map.get(label) : def));
}
public List<UUID> getUUIDList(String label) {
if (map.get(label) != null) {
List<UUID> values = new ArrayList<UUID>();
for (String value : (List<String>) map.get(label)) {
values.add(UUID.fromString(value));
}
return values;
} else {
return null;
}
}
public List<UUID> getUUIDList(String label, List<UUID> def) {
if (map.get(label) != null) {
return getUUIDList(label);
} else {
return def;
}
}
public boolean isBoolean(String label) {
return (map.get(label) instanceof Boolean);
}
public boolean isSection(String label) {
return (map.get(label) instanceof Map);
}
public boolean isDouble(String label) {
return (map.get(label) instanceof Double);
}
public boolean isFloat(String label) {
return (map.get(label) instanceof Float);
}
public boolean isInt(String label) {
return (map.get(label) instanceof Integer);
}
public boolean isList(String label) {
return (map.get(label) instanceof List);
}
public boolean isLong(String label) {
return (map.get(label) instanceof Long);
}
public boolean isString(String label) {
return (map.get(label) instanceof String);
}
}