From 9fdb09fc7932d92e70de36572c9cd9ab6846f041 Mon Sep 17 00:00:00 2001 From: AppleDash Date: Mon, 4 Nov 2019 05:01:09 -0500 Subject: [PATCH] JSON schema update, probably --- .../type/EconomyStorageBackendJSON.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/backend/type/EconomyStorageBackendJSON.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/backend/type/EconomyStorageBackendJSON.java index 1773159..6d78ca6 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/backend/type/EconomyStorageBackendJSON.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/backend/type/EconomyStorageBackendJSON.java @@ -1,5 +1,6 @@ package org.appledash.saneeconomy.economy.backend.type; +import com.avaje.ebeaninternal.server.cluster.DataHolder; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -38,18 +39,25 @@ public class EconomyStorageBackendJSON extends EconomyStorageBackendCaching { try { // try to load the old format and convert it - balances = new ConcurrentHashMap<>((Map)gson.fromJson(new FileReader(file), new TypeToken>(){}.getType())); + // if that fails, load the new format + DataHolderOld dataHolder = gson.fromJson(new FileReader(file), DataHolderOld.class); + this.balances = new ConcurrentHashMap<>(); + this.uuidToName = new ConcurrentHashMap<>(dataHolder.uuidToName); + + dataHolder.balances.forEach((s, bal) -> { + this.balances.put(s, new BigDecimal(bal)); + }); + this.saveDatabase(); } catch (FileNotFoundException e) { throw new RuntimeException("Failed to load database!", e); } catch (Exception e) { - // if that fails, load the new format try { DataHolder dataHolder = gson.fromJson(new FileReader(file), DataHolder.class); - //FIXME this.balances = new ConcurrentHashMap<>(dataHolder.balances); + this.balances = new ConcurrentHashMap<>(dataHolder.balances); this.uuidToName = new ConcurrentHashMap<>(dataHolder.uuidToName); - } catch (FileNotFoundException e1) { - throw new RuntimeException("Failed to load database!", e1); + } catch (FileNotFoundException ex) { + throw new RuntimeException("Failed to load database!", e); } } } @@ -61,20 +69,32 @@ public class EconomyStorageBackendJSON extends EconomyStorageBackendCaching { private synchronized void saveDatabase() { try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, false))) { - //FIXME DataHolder dataHolder = new DataHolder(this.balances, this.uuidToName); - //FIXMEbufferedWriter.write(gson.toJson(dataHolder)); + DataHolder dataHolder = new DataHolder(this.balances, this.uuidToName); + bufferedWriter.write(gson.toJson(dataHolder)); } catch (IOException e) { throw new RuntimeException("Failed to save database", e); } } - private static class DataHolder { + private static class DataHolderOld { @SerializedName("balances") private Map balances; @SerializedName("uuidToName") private Map uuidToName; - public DataHolder(Map balances, Map uuidToName) { + public DataHolderOld(Map balances, Map uuidToName) { + this.balances = balances; + this.uuidToName = uuidToName; + } + } + + private static class DataHolder { + @SerializedName("balances") + private Map balances; + @SerializedName("uuidToName") + private Map uuidToName; + + public DataHolder(Map balances, Map uuidToName) { this.balances = balances; this.uuidToName = uuidToName; }