/* * The MIT License (MIT) * * Copyright (c) 2020 ROMVoid * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package net.romvoid.crashbot.config; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class Configuration { private File file; private JsonObject json; public JsonParser jsonParser; private Gson gson = new GsonBuilder().setPrettyPrinting().create(); public Configuration(final File file) { this.file = file; String cont = null; try { if (file.exists()) { BufferedReader reader = new BufferedReader(new FileReader(file)); cont = reader.lines().collect(Collectors.joining("\n")); reader.close(); } } catch (Exception e) { e.printStackTrace(); } if (cont == null || cont.equals("")) { cont = "{}"; } json = JsonParser.parseString(cont).getAsJsonObject(); } /** * @param key * @param val * @description Sets tha value of a key in config */ public Configuration set(final String key, final String val) { if (json.has(key)) { json.remove(key); } if (val != null) { json.addProperty(key, val); } return this.save(); } /** * @param key * @param val * @description Sets the value of a key in config */ public Configuration set(final String key, final int val) { if (json.has(key)) { json.remove(key); } this.json.addProperty(key, val); return this.save(); } /** * @param key * @description Removes key from config */ public Configuration unset(final String key) { if (json.has(key)) json.remove(key); return this.save(); } /** * @description Saves the config */ private Configuration save() { try { if (json.entrySet().size() == 0) { if (file.exists()) { file.delete(); } } else { if (!file.exists()) { file.createNewFile(); } BufferedWriter br = new BufferedWriter(new FileWriter(file)); String jsonOut = gson.toJson(json); br.write(jsonOut); br.close(); } } catch (Exception e) { e.printStackTrace(); } return this; } /** * @param key * @return Value of key in config as string */ public String getString(final String key) { try { return json.get(key).getAsString(); } catch (Exception e) { e.printStackTrace(); } return ""; } /** * @param key * @return Value of key in config as integer */ public int getInt(final String key) { if (json.has(key)) { return json.get(key).getAsInt(); } return 0; } /** * @param key * @return If key exists */ public boolean has(final String key) { try { return json.has(key); } catch (NullPointerException ex) { return false; } } public List<String> keySet() { List<String> keys = new ArrayList<>(); Set<Map.Entry<String, JsonElement>> entries = json.entrySet(); for (Map.Entry<String, JsonElement> entry : entries) { keys.add(entry.getKey()); } return keys; } public List<String> values() { List<String> values = new ArrayList<>(); Set<Map.Entry<String, JsonElement>> entries = json.entrySet(); for (Map.Entry<String, JsonElement> entry : entries) { values.add(entry.getValue().getAsString()); } return values; } }