From ed777b59551e2fd5d406e0c2ae6393f2e99d846a Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Dec 2020 21:58:05 +0300 Subject: [PATCH] Config optimization --- .../ru/betterend/config/ConfigKeeper.java | 135 +++++---- .../ru/betterend/config/DeprecatedConfig.java | 257 ------------------ 2 files changed, 64 insertions(+), 328 deletions(-) delete mode 100644 src/main/java/ru/betterend/config/DeprecatedConfig.java diff --git a/src/main/java/ru/betterend/config/ConfigKeeper.java b/src/main/java/ru/betterend/config/ConfigKeeper.java index 8db36380..f35babc1 100644 --- a/src/main/java/ru/betterend/config/ConfigKeeper.java +++ b/src/main/java/ru/betterend/config/ConfigKeeper.java @@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.minecraft.util.JsonHelper; @@ -35,34 +34,10 @@ public final class ConfigKeeper { this.changed = false; } - private > boolean has(ConfigKey key, E entry) { - if (configObject == null) { - return false; - } - String group = key.getOwner(); - if (!configObject.has(group)) { - return false; - } - JsonObject jsonGroup = JsonHelper.getObject(configObject, group); - String category = key.getCategory(); - if (!jsonGroup.has(category)) { - return false; - } - JsonObject jsonCategory = JsonHelper.getObject(jsonGroup, category); - String paramKey = key.getEntry(); - paramKey += " [default: " + entry.getDefault() + "]"; - return jsonCategory.has(paramKey); - } - - private > void storeValue(ConfigKey key, E entry, T value) { + private > void initializeEntry(ConfigKey key, E entry) { if (configObject == null) { return; } - if (has(key, entry)) { - T val = entry.getValue(); - if (value.equals(val)) return; - } - String group = key.getOwner(); JsonObject jsonGroup; if (configObject.has(group)) { @@ -81,23 +56,24 @@ public final class ConfigKeeper { } String paramKey = key.getEntry(); paramKey += " [default: " + entry.getDefault() + "]"; - entry.toJson(jsonCategory, paramKey, value); + this.changed = entry.setLocation(jsonCategory, paramKey); + } + + private > void storeValue(E entry, T value) { + if (configObject == null) { + return; + } + T val = entry.getValue(); + if (value.equals(val)) return; + entry.toJson(value); this.changed = true; } - private > T getValue(ConfigKey key, E entry) { - if (!has(key, entry)) { + private > T getValue(E entry) { + if (!entry.hasLocation()) { return entry.getDefault(); } - String group = key.getOwner(); - String category = key.getCategory(); - JsonObject jsonGroup = JsonHelper.getObject(configObject, group); - JsonObject jsonCategory = JsonHelper.getObject(jsonGroup, category); - - String paramKey = key.getEntry(); - paramKey += " [default: " + entry.getDefault() + "]"; - - return entry.fromJson(jsonCategory.get(paramKey)); + return entry.fromJson(); } @Nullable @@ -119,9 +95,9 @@ public final class ConfigKeeper { } public > E registerEntry(ConfigKey key, E entry) { - entry.setWriter(value -> this.storeValue(key, entry, value)); - entry.setReader(() -> { return this.getValue(key, entry); }); - this.storeValue(key, entry, entry.getValue()); + entry.setWriter(value -> this.storeValue(entry, value)); + entry.setReader(() -> { return this.getValue(entry); }); + this.initializeEntry(key, entry); this.configEntries.put(key, entry); return entry; } @@ -133,13 +109,13 @@ public final class ConfigKeeper { } @Override - public Boolean fromJson(JsonElement json) { - return json.getAsBoolean(); + public Boolean fromJson() { + return JsonHelper.getBoolean(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Boolean value) { - json.addProperty(key, value); + public void toJson(Boolean value) { + this.location.addProperty(key, value); } } @@ -150,13 +126,13 @@ public final class ConfigKeeper { } @Override - public Float fromJson(JsonElement json) { - return json.getAsFloat(); + public Float fromJson() { + return JsonHelper.getFloat(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Float value) { - json.addProperty(key, value); + public void toJson(Float value) { + this.location.addProperty(key, value); } } @@ -167,13 +143,13 @@ public final class ConfigKeeper { } @Override - public Float fromJson(JsonElement json) { - return json.getAsFloat(); + public Float fromJson() { + return JsonHelper.getFloat(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Float value) { - json.addProperty(key, value); + public void toJson(Float value) { + this.location.addProperty(key, value); } } @@ -189,13 +165,13 @@ public final class ConfigKeeper { } @Override - public Integer fromJson(JsonElement json) { - return json.getAsInt(); + public Integer fromJson() { + return JsonHelper.getInt(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Integer value) { - json.addProperty(key, value); + public void toJson(Integer value) { + this.location.addProperty(key, value); } } @@ -206,13 +182,13 @@ public final class ConfigKeeper { } @Override - public Integer fromJson(JsonElement json) { - return json.getAsInt(); + public Integer fromJson() { + return JsonHelper.getInt(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Integer value) { - json.addProperty(key, value); + public void toJson(Integer value) { + this.location.addProperty(key, value); } } @@ -223,13 +199,13 @@ public final class ConfigKeeper { } @Override - public String fromJson(JsonElement json) { - return json.getAsString(); + public String fromJson() { + return JsonHelper.getString(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, String value) { - json.addProperty(key, value); + public void toJson(String value) { + this.location.addProperty(key, value); } } @@ -252,13 +228,13 @@ public final class ConfigKeeper { } @Override - public T fromJson(JsonElement json) { - return JsonFactory.GSON.fromJson(json, type); + public T fromJson() { + return JsonFactory.GSON.fromJson(location.get(key), type); } @Override - public void toJson(JsonObject json, String key, T value) { - json.addProperty(key, JsonFactory.GSON.toJson(json, type)); + public void toJson(T value) { + location.addProperty(key, JsonFactory.GSON.toJson(value, type)); } } @@ -291,9 +267,11 @@ public final class ConfigKeeper { protected final T defaultValue; protected Consumer writer; protected Supplier reader; + protected JsonObject location; + protected String key; - public abstract T fromJson(JsonElement json); - public abstract void toJson(JsonObject json, String key, T value); + public abstract T fromJson(); + public abstract void toJson(T value); public Entry (T defaultValue) { this.defaultValue = defaultValue; @@ -307,6 +285,21 @@ public final class ConfigKeeper { this.reader = reader; } + protected boolean setLocation(JsonObject location, String key) { + this.location = location; + this.key = key; + if (!location.has(key)) { + this.toJson(defaultValue); + return true; + } + return false; + } + + protected boolean hasLocation() { + return this.location != null && + this.key != null; + } + public T getValue() { return this.reader.get(); } diff --git a/src/main/java/ru/betterend/config/DeprecatedConfig.java b/src/main/java/ru/betterend/config/DeprecatedConfig.java deleted file mode 100644 index f1f109e4..00000000 --- a/src/main/java/ru/betterend/config/DeprecatedConfig.java +++ /dev/null @@ -1,257 +0,0 @@ -package ru.betterend.config; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import ru.betterend.BetterEnd; - -@Deprecated -public final class DeprecatedConfig { - private boolean rewrite = false; - private final String name; - private JsonObject config; - - public DeprecatedConfig(String name) { - this.name = name; - } - - private void load() { - if (config == null) { - File file = getFolder(); - if (!file.exists()) - file.mkdirs(); - file = getFile(); - if (file.exists()) { - Gson gson = new Gson(); - try { - Reader reader = new FileReader(file); - config = gson.fromJson(reader, JsonObject.class); - if (config == null) { - config = new JsonObject(); - rewrite = true; - } - else { - rewrite = false; - } - } - catch (FileNotFoundException e) { - e.printStackTrace(); - config = new JsonObject(); - rewrite = true; - } - } - else { - config = new JsonObject(); - rewrite = true; - } - } - } - - public void save() { - if (rewrite) { - File file = getFolder(); - if (!file.exists()) - file.mkdirs(); - file = getFile(); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - try { - FileWriter writer = new FileWriter(file); - String gstring = gson.toJson(config); - writer.write(gstring); - writer.flush(); - writer.close(); - rewrite = false; - } - catch (IOException e) { - e.printStackTrace(); - } - } - } - - private File getFile() { - return new File(String.format("./config/%s/%s.json", BetterEnd.MOD_ID, name)); - } - - private File getFolder() { - return new File("./config/" + BetterEnd.MOD_ID + "/"); - } - - public boolean getBoolean(String groups, String name, boolean def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsBoolean(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public void setBoolean(String groups, String name, boolean def, boolean value) { - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - group.addProperty(name, value); - - rewrite = true; - } - - public float getFloat(String groups, String name, float def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsFloat(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public void setFloat(String groups, String name, float def, float value) { - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - group.addProperty(name, value); - - rewrite = true; - } - - public int getInt(String groups, String name, int def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsInt(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public String getString(String groups, String name, String def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsString(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public void setInt(String groups, String name, int def, int value) { - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - group.addProperty(name, value); - - rewrite = true; - } - - public void setStringLoad(String groups, String name, String value) { - JsonObject group = getGroup(groups); - group.addProperty(name, value); - } - - public String[] getStringArray(String groups, String name, String[] def) { - load(); - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return toStringArray(element.getAsJsonArray()); - } - else { - group.add(name, toJsonArray(def)); - rewrite = true; - return def; - } - } - - private String[] toStringArray(JsonArray array) { - load(); - String[] result = new String[array.size()]; - for (int i = 0; i < array.size(); i++) - result[i] = array.get(i).getAsString(); - return result; - } - - private JsonArray toJsonArray(String[] array) { - load(); - JsonArray result = new JsonArray(); - for (String s : array) - result.add(s); - return result; - } - - public JsonObject getGroup(String groups) { - JsonObject obj = config; - String[] groupsArr = groups.split("\\."); - for (String group : groupsArr) { - JsonObject jGroup = obj.getAsJsonObject(group); - if (jGroup == null) { - jGroup = new JsonObject(); - obj.add(group, jGroup); - } - obj = jGroup; - } - return obj; - } - - public List getBaseGroups() { - List groups = new ArrayList(); - Iterator> iterator = config.entrySet().iterator(); - iterator.forEachRemaining((element) -> { - groups.add(element.getKey()); - }); - return groups; - } - - public List> getGroupMembers(JsonObject group) { - List> result = new ArrayList>(); - result.addAll(group.entrySet()); - return result; - } - - public void markToSave() { - rewrite = true; - } -}