From c54989e0befc3b021627925f1317a6d6802671c9 Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris@kearneymail.com>
Date: Sun, 7 May 2017 09:05:50 -0700
Subject: [PATCH] sharing gson isntances in the serializers and upgraded
 mapdb/gson versions

---
 pom.xml                                                   | 4 ++--
 src/main/java/com/comandante/creeper/Main.java            | 8 +++++++-
 .../java/com/comandante/creeper/entity/EntityManager.java | 1 +
 .../com/comandante/creeper/items/EffectSerializer.java    | 8 ++++++--
 .../java/com/comandante/creeper/items/ItemSerializer.java | 8 ++++++--
 .../java/com/comandante/creeper/player/PlayerManager.java | 6 +++++-
 .../creeper/player/PlayerMetadataSerializer.java          | 7 +++++--
 .../com/comandante/creeper/player/PlayerManagerTest.java  | 2 ++
 .../creeper/player/combat_simuation/NpcTestHarness.java   | 3 +++
 9 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/pom.xml b/pom.xml
index 11d70363..9e057403 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,12 +53,12 @@
         <dependency>
             <groupId>org.mapdb</groupId>
             <artifactId>mapdb</artifactId>
-            <version>1.0.6</version>
+            <version>1.0.9</version>
         </dependency>
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
-            <version>2.2.4</version>
+            <version>2.8.0</version>
         </dependency>
         <dependency>
             <groupId>org.ow2.sirocco</groupId>
diff --git a/src/main/java/com/comandante/creeper/Main.java b/src/main/java/com/comandante/creeper/Main.java
index 2a763abb..62746b7d 100644
--- a/src/main/java/com/comandante/creeper/Main.java
+++ b/src/main/java/com/comandante/creeper/Main.java
@@ -19,6 +19,8 @@ import com.comandante.creeper.storage.WorldStorage;
 import com.comandante.creeper.world.MapsManager;
 import com.comandante.creeper.world.RoomManager;
 import com.google.common.io.Files;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.configuration.*;
 import org.apache.log4j.Logger;
@@ -79,7 +81,11 @@ public class Main {
 
         Files.isDirectory().apply(new File("world/"));
 
-        DB db = DBMaker.newFileDB(new File("world/" + creeperConfiguration.databaseFileName)).closeOnJvmShutdown().make();
+        DB db = DBMaker.newFileDB(new File("world/" + creeperConfiguration.databaseFileName))
+                .closeOnJvmShutdown()
+                .make();
+
+        Gson gson = new GsonBuilder().create();
 
         PlayerManager playerManager = new PlayerManager(db, new SessionManager());
         playerManager.createAllGauges();
diff --git a/src/main/java/com/comandante/creeper/entity/EntityManager.java b/src/main/java/com/comandante/creeper/entity/EntityManager.java
index b7d88a3a..dece67f9 100644
--- a/src/main/java/com/comandante/creeper/entity/EntityManager.java
+++ b/src/main/java/com/comandante/creeper/entity/EntityManager.java
@@ -11,6 +11,7 @@ import com.comandante.creeper.player.Player;
 import com.comandante.creeper.player.PlayerManager;
 import com.comandante.creeper.world.RoomManager;
 import com.comandante.creeper.world.model.Room;
+import com.google.gson.Gson;
 import org.apache.log4j.Logger;
 import org.mapdb.DB;
 import org.mapdb.HTreeMap;
diff --git a/src/main/java/com/comandante/creeper/items/EffectSerializer.java b/src/main/java/com/comandante/creeper/items/EffectSerializer.java
index 16f7e9e5..b4ce934c 100644
--- a/src/main/java/com/comandante/creeper/items/EffectSerializer.java
+++ b/src/main/java/com/comandante/creeper/items/EffectSerializer.java
@@ -1,5 +1,6 @@
 package com.comandante.creeper.items;
 
+import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.mapdb.Serializer;
 
@@ -9,14 +10,17 @@ import java.io.IOException;
 import java.io.Serializable;
 
 public class EffectSerializer implements Serializer<Effect>, Serializable {
+
+    private final static Gson GSON = new GsonBuilder().create();
+
     @Override
     public void serialize(DataOutput out, Effect value) throws IOException {
-        out.writeUTF(new GsonBuilder().create().toJson(value, Effect.class));
+        out.writeUTF(GSON.toJson(value, Effect.class));
     }
 
     @Override
     public Effect deserialize(DataInput in, int available) throws IOException {
-        return new GsonBuilder().create().fromJson(in.readUTF(), Effect.class);
+        return GSON.fromJson(in.readUTF(), Effect.class);
     }
 
     @Override
diff --git a/src/main/java/com/comandante/creeper/items/ItemSerializer.java b/src/main/java/com/comandante/creeper/items/ItemSerializer.java
index 4ef367d4..7b911ff0 100644
--- a/src/main/java/com/comandante/creeper/items/ItemSerializer.java
+++ b/src/main/java/com/comandante/creeper/items/ItemSerializer.java
@@ -1,5 +1,6 @@
 package com.comandante.creeper.items;
 
+import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.mapdb.Serializer;
 
@@ -9,14 +10,17 @@ import java.io.IOException;
 import java.io.Serializable;
 
 public class ItemSerializer implements Serializer<Item>, Serializable {
+
+    private final static Gson GSON = new GsonBuilder().create();
+
     @Override
     public void serialize(DataOutput out, Item value) throws IOException {
-        out.writeUTF(new GsonBuilder().create().toJson(value, Item.class));
+        out.writeUTF(GSON.toJson(value, Item.class));
     }
 
     @Override
     public Item deserialize(DataInput in, int available) throws IOException {
-        return new GsonBuilder().create().fromJson(in.readUTF(), Item.class);
+        return GSON.fromJson(in.readUTF(), Item.class);
     }
 
     @Override
diff --git a/src/main/java/com/comandante/creeper/player/PlayerManager.java b/src/main/java/com/comandante/creeper/player/PlayerManager.java
index fe56f01d..c00297e9 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerManager.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerManager.java
@@ -6,6 +6,7 @@ import com.comandante.creeper.Main;
 import com.comandante.creeper.core_game.SessionManager;
 import com.comandante.creeper.storage.MapDbAutoCommitService;
 import com.comandante.creeper.world.model.Room;
+import com.google.gson.Gson;
 import org.apache.commons.codec.binary.Base64;
 import org.mapdb.DB;
 import org.mapdb.HTreeMap;
@@ -30,7 +31,10 @@ public class PlayerManager {
         if (db.exists("playerMetadata")) {
             this.playerMetadataStore = db.get("playerMetadata");
         } else {
-            this.playerMetadataStore = db.createHashMap("playerMetadata").valueSerializer(new PlayerMetadataSerializer()).make();
+            this.playerMetadataStore = db
+                    .createHashMap("playerMetadata")
+                    .valueSerializer(new PlayerMetadataSerializer())
+                    .make();
         }
         MapDbAutoCommitService mapDbAutoCommitService = new MapDbAutoCommitService(db);
         mapDbAutoCommitService.startAsync();
diff --git a/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java b/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java
index 17691677..fdc2f58f 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerMetadataSerializer.java
@@ -1,5 +1,6 @@
 package com.comandante.creeper.player;
 
+import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.mapdb.Serializer;
 
@@ -10,14 +11,16 @@ import java.io.Serializable;
 
 public class PlayerMetadataSerializer implements Serializer<PlayerMetadata>, Serializable {
 
+    private final static Gson GSON = new GsonBuilder().create();
+
     @Override
     public void serialize(DataOutput out, PlayerMetadata value) throws IOException {
-        out.writeUTF(new GsonBuilder().create().toJson(value, PlayerMetadata.class));
+        out.writeUTF(GSON.toJson(value, PlayerMetadata.class));
     }
 
     @Override
     public PlayerMetadata deserialize(DataInput in, int available) throws IOException {
-        return new GsonBuilder().create().fromJson(in.readUTF(), PlayerMetadata.class);
+        return GSON.fromJson(in.readUTF(), PlayerMetadata.class);
     }
 
     @Override
diff --git a/src/test/com/comandante/creeper/player/PlayerManagerTest.java b/src/test/com/comandante/creeper/player/PlayerManagerTest.java
index 4b6d0f17..b3daba5e 100644
--- a/src/test/com/comandante/creeper/player/PlayerManagerTest.java
+++ b/src/test/com/comandante/creeper/player/PlayerManagerTest.java
@@ -3,6 +3,8 @@ package com.comandante.creeper.player;
 import com.comandante.creeper.core_game.SessionManager;
 import com.comandante.creeper.world.model.Room;
 import com.google.common.collect.Sets;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
index 1287198e..31b66a18 100644
--- a/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
+++ b/src/test/com/comandante/creeper/player/combat_simuation/NpcTestHarness.java
@@ -22,6 +22,8 @@ import com.comandante.creeper.world.MapsManager;
 import com.comandante.creeper.world.RoomManager;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import org.apache.commons.configuration.MapConfiguration;
 import org.jboss.netty.channel.Channel;
 import org.junit.Assert;
@@ -301,6 +303,7 @@ public class NpcTestHarness {
         };
         CreeperConfiguration creeperConfiguration = new CreeperConfiguration(new MapConfiguration(Maps.newHashMap()));
         DB db = DBMaker.newMemoryDB().closeOnJvmShutdown().make();
+        Gson gson = new GsonBuilder().create();
         PlayerManager playerManager = new PlayerManager(db, new SessionManager());
         RoomManager roomManager = new RoomManager(playerManager);
         MapsManager mapsManager = new MapsManager(creeperConfiguration, roomManager);
-- 
GitLab