package app.simplexdev.config.json; import app.simplexdev.config.Configuration; import app.simplexdev.config.Section; import app.simplexdev.data.ConfigType; import app.simplexdev.parser.JSONParser; import app.simplexdev.parser.Parser; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonConfig implements Configuration { private final JSONParser configurationParser; private final String name; private final JsonObject jsonObject; public JsonConfig(JsonObject jsonObject) { this.configurationParser = new JSONParser(); this.name = "config"; this.jsonObject = jsonObject; } public JsonObject getJsonObject() { return jsonObject; } @Override public ConfigType getConfigurationType() { return ConfigType.JSON; } @Override public Parser getConfigurationParser() { return configurationParser; } @Override public String getName() { return name; } @Override public Section getSection(String path) { JsonObject sectionObject = jsonObject.getAsJsonObject(path); if (sectionObject != null) { return new JsonConfig(sectionObject); } return null; } @Override public Boolean getBoolean(String path) { return jsonObject.getAsJsonPrimitive(path).getAsBoolean(); } @Override public Integer getInteger(String path) { return jsonObject.getAsJsonPrimitive(path).getAsInt(); } @Override public Double getDouble(String path) { return jsonObject.getAsJsonPrimitive(path).getAsDouble(); } @Override public String getString(String path) { return jsonObject.getAsJsonPrimitive(path).getAsString(); } @Override public Long getLong(String path) { return jsonObject.getAsJsonPrimitive(path).getAsLong(); } @Override public Float getFloat(String path) { return jsonObject.getAsJsonPrimitive(path).getAsFloat(); } @Override public Short getShort(String path) { return jsonObject.getAsJsonPrimitive(path).getAsShort(); } @Override public Byte getByte(String path) { return jsonObject.getAsJsonPrimitive(path).getAsByte(); } @Override public Object get(String path) { return jsonObject.get(path); } @Override public List getStringList(String path) { JsonArray jsonArray = jsonObject.getAsJsonArray(path); if (jsonArray != null) { List stringList = new ArrayList<>(); for (JsonElement element : jsonArray) { stringList.add(element.getAsString()); } return stringList; } return null; } @Override public List getList(String path, Class type) { JsonArray jsonArray = jsonObject.getAsJsonArray(path); if (jsonArray != null) { List list = new ArrayList<>(); for (JsonElement element : jsonArray) { list.add(new Gson().fromJson(element, type)); } return list; } return null; } @Override public Map getMap(String path, Class valueType) { JsonObject mapObject = jsonObject.getAsJsonObject(path); if (mapObject != null) { Map map = new HashMap<>(); for (Map.Entry entry : mapObject.entrySet()) { String key = new Gson().fromJson(entry.getKey(), String.class); Object value = new Gson().fromJson(entry.getValue(), valueType); map.put(key, value); } return map; } return null; } @Override public T get(String path, Class type) { return new Gson().fromJson(jsonObject.get(path), type); } @Override public void set(String path, Object value) { jsonObject.add(path, new Gson().toJsonTree(value)); } }