From 0c9c04304a80de112dc11d11bfc72801700154af Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
Date: Mon, 4 Sep 2017 18:50:07 -0400
Subject: [PATCH] refactor: merged NpcStorage and AetherMudStorage.

---
 .../java/com/syncleus/aethermud/Main.java     |  2 +-
 .../commands/admin/LoadNpcCommand.java        |  4 +-
 .../command/commands/admin/SpawnCommand.java  |  2 +-
 .../aethermud/configuration/ConfigureNpc.java |  2 +-
 .../syncleus/aethermud/core/GameManager.java  |  7 --
 .../aethermud/storage/AetherMudStorage.java   | 10 +++
 .../aethermud/storage/ItemStorage.java        |  2 +-
 .../aethermud/storage/NpcStorage.java         | 28 --------
 .../graphdb/GraphDbAetherMudStorage.java      | 32 +++++++--
 .../storage/graphdb/GraphDbNpcStorage.java    | 65 -------------------
 .../common/ColorizedTextTemplateTest.java     |  6 +-
 .../aethermud/player/PlayerManagerTest.java   |  2 +-
 .../combatsimuation/NpcTestHarness.java       | 14 ++--
 13 files changed, 55 insertions(+), 121 deletions(-)
 delete mode 100644 src/main/java/com/syncleus/aethermud/storage/NpcStorage.java
 delete mode 100644 src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbNpcStorage.java

diff --git a/src/main/java/com/syncleus/aethermud/Main.java b/src/main/java/com/syncleus/aethermud/Main.java
index 36fc8769..131656f7 100644
--- a/src/main/java/com/syncleus/aethermud/Main.java
+++ b/src/main/java/com/syncleus/aethermud/Main.java
@@ -110,7 +110,7 @@ public class Main {
         }
         WrappedFramedGraph<Graph> framedGraph = new DelegatingFramedGraph(graph, FRAMED_TYPES);
 
-        GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(framedGraph);
+        GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(framedGraph, aetherMudConfiguration.databaseFileName);
         graphStorage.startAsync();
         graphStorage.awaitRunning();
 
diff --git a/src/main/java/com/syncleus/aethermud/command/commands/admin/LoadNpcCommand.java b/src/main/java/com/syncleus/aethermud/command/commands/admin/LoadNpcCommand.java
index c01e1b3a..42ca05cf 100644
--- a/src/main/java/com/syncleus/aethermud/command/commands/admin/LoadNpcCommand.java
+++ b/src/main/java/com/syncleus/aethermud/command/commands/admin/LoadNpcCommand.java
@@ -20,7 +20,7 @@ import com.syncleus.aethermud.core.GameManager;
 import com.syncleus.aethermud.npc.Npc;
 import com.syncleus.aethermud.player.PlayerRole;
 import com.syncleus.aethermud.spawner.SpawnRule;
-import com.syncleus.aethermud.storage.NpcStorage;
+import com.syncleus.aethermud.storage.AetherMudStorage;
 import com.syncleus.aethermud.storage.graphdb.NpcData;
 import com.google.common.collect.Sets;
 import org.apache.commons.beanutils.PropertyUtils;
@@ -94,7 +94,7 @@ public class LoadNpcCommand extends Command {
             }
             httpGet.reset();
 
-            NpcStorage storage = gameManager.getNpcStorage();
+            AetherMudStorage storage = gameManager.getGraphStorage();
             NpcData npcData = storage.newNpcData();
             try {
                 PropertyUtils.copyProperties(npcData, npc);
diff --git a/src/main/java/com/syncleus/aethermud/command/commands/admin/SpawnCommand.java b/src/main/java/com/syncleus/aethermud/command/commands/admin/SpawnCommand.java
index 87032d60..ec11185b 100644
--- a/src/main/java/com/syncleus/aethermud/command/commands/admin/SpawnCommand.java
+++ b/src/main/java/com/syncleus/aethermud/command/commands/admin/SpawnCommand.java
@@ -46,7 +46,7 @@ public class SpawnCommand  extends Command {
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
         execCommand(ctx, e, () -> {
-            List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+            List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
             if (originalMessageParts.size() == 1) {
                 write(getHeader());
                 for (NpcSpawn npcSpawn : npcsFromFile) {
diff --git a/src/main/java/com/syncleus/aethermud/configuration/ConfigureNpc.java b/src/main/java/com/syncleus/aethermud/configuration/ConfigureNpc.java
index fa6d0c53..f3e94f99 100644
--- a/src/main/java/com/syncleus/aethermud/configuration/ConfigureNpc.java
+++ b/src/main/java/com/syncleus/aethermud/configuration/ConfigureNpc.java
@@ -35,7 +35,7 @@ public class ConfigureNpc {
 
     public static void configureAllNpcs(GameManager gameManager) throws IOException {
         EntityManager entityManager = gameManager.getEntityManager();
-        List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+        List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
         for (NpcSpawn npcSpawn : npcsFromFile) {
             Main.startUpMessage("Adding npc spawn: " + npcSpawn.getName());
             entityManager.addEntity(npcSpawn);
diff --git a/src/main/java/com/syncleus/aethermud/core/GameManager.java b/src/main/java/com/syncleus/aethermud/core/GameManager.java
index 3a8894d1..35ed0e46 100644
--- a/src/main/java/com/syncleus/aethermud/core/GameManager.java
+++ b/src/main/java/com/syncleus/aethermud/core/GameManager.java
@@ -39,7 +39,6 @@ import com.syncleus.aethermud.spawner.NpcSpawner;
 import com.syncleus.aethermud.spells.Spells;
 import com.syncleus.aethermud.stats.Levels;
 import com.syncleus.aethermud.stats.Stats;
-import com.syncleus.aethermud.storage.graphdb.GraphDbNpcStorage;
 import com.syncleus.aethermud.stats.StatsBuilder;
 import com.syncleus.aethermud.stats.modifier.StatsModifierFactory;
 import com.syncleus.aethermud.storage.*;
@@ -104,7 +103,6 @@ public class GameManager {
     private final Spells spells;
     private final MultiThreadedEventProcessor eventProcessor = new MultiThreadedEventProcessor(new ArrayBlockingQueue<>(10000));
     private final Room detainmentRoom;
-    private final NpcStorage npcStorage;
     private final ItemStorage itemStorage;
     private final HttpClient httpclient;
     private final Gson gson;
@@ -148,7 +146,6 @@ public class GameManager {
         this.detainmentRoom = buildDetainmentRoom();
         this.gson = new GsonBuilder().setPrettyPrinting().create();
         this.filebasedJsonStorage = new FilebasedJsonStorage(gson);
-        this.npcStorage = new GraphDbNpcStorage(this, framedGraph);;
         this.itemStorage = new ItemStorage(filebasedJsonStorage);
         this.merchantStorage = new MerchantStorage(this, filebasedJsonStorage);
         this.httpclient = httpClient;
@@ -259,10 +256,6 @@ public class GameManager {
         return eventProcessor;
     }
 
-    public NpcStorage getNpcStorage() {
-        return npcStorage;
-    }
-
     public void placePlayerInLobby(Player player) {
         Room room = roomManager.getRoom(LOBBY_ID);
         room.addPresentPlayer(player.getPlayerId());
diff --git a/src/main/java/com/syncleus/aethermud/storage/AetherMudStorage.java b/src/main/java/com/syncleus/aethermud/storage/AetherMudStorage.java
index 7f288649..af363fad 100644
--- a/src/main/java/com/syncleus/aethermud/storage/AetherMudStorage.java
+++ b/src/main/java/com/syncleus/aethermud/storage/AetherMudStorage.java
@@ -17,10 +17,14 @@ package com.syncleus.aethermud.storage;
 
 
 import com.google.common.util.concurrent.Service;
+import com.syncleus.aethermud.core.GameManager;
 import com.syncleus.aethermud.items.ItemPojo;
+import com.syncleus.aethermud.npc.NpcSpawn;
 import com.syncleus.aethermud.storage.graphdb.ItemData;
+import com.syncleus.aethermud.storage.graphdb.NpcData;
 import com.syncleus.aethermud.storage.graphdb.PlayerData;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
@@ -38,5 +42,11 @@ public interface AetherMudStorage extends Service {
 
     void removeItem(String itemId);
 
+    List<? extends NpcSpawn> getAllNpcs(GameManager gameManager);
+
+    List<? extends NpcData> getNpcDatas();
+
+    NpcData newNpcData();
+
     void persist();
 }
diff --git a/src/main/java/com/syncleus/aethermud/storage/ItemStorage.java b/src/main/java/com/syncleus/aethermud/storage/ItemStorage.java
index c603d040..74a1149a 100644
--- a/src/main/java/com/syncleus/aethermud/storage/ItemStorage.java
+++ b/src/main/java/com/syncleus/aethermud/storage/ItemStorage.java
@@ -28,7 +28,7 @@ public class ItemStorage {
 
     public final static String LOCAL_ITEM_DIRECTORY = "world/items/";
 
-    private static final Logger log = Logger.getLogger(NpcStorage.class);
+    private static final Logger log = Logger.getLogger(ItemStorage.class);
     private final FilebasedJsonStorage filebasedJsonStorage;
 
     private final List<ItemMetadata> itemMetadatas;
diff --git a/src/main/java/com/syncleus/aethermud/storage/NpcStorage.java b/src/main/java/com/syncleus/aethermud/storage/NpcStorage.java
deleted file mode 100644
index 9412206b..00000000
--- a/src/main/java/com/syncleus/aethermud/storage/NpcStorage.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright 2017 Syncleus, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.syncleus.aethermud.storage;
-
-import com.syncleus.aethermud.npc.NpcSpawn;
-import com.syncleus.aethermud.storage.graphdb.NpcData;
-
-import java.util.List;
-
-public interface NpcStorage {
-    List<? extends NpcSpawn> getAllNpcs();
-    List<? extends NpcData> getNpcDatas();
-    NpcData newNpcData();
-    void persist();
-}
diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbAetherMudStorage.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbAetherMudStorage.java
index 4d05d318..2602ead4 100644
--- a/src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbAetherMudStorage.java
+++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbAetherMudStorage.java
@@ -17,26 +17,35 @@ package com.syncleus.aethermud.storage.graphdb;
 
 import com.google.common.util.concurrent.AbstractIdleService;
 import com.syncleus.aethermud.Main;
+import com.syncleus.aethermud.core.GameManager;
 import com.syncleus.aethermud.items.ItemPojo;
+import com.syncleus.aethermud.npc.NpcBuilder;
+import com.syncleus.aethermud.npc.NpcSpawn;
 import com.syncleus.aethermud.storage.AetherMudStorage;
 import com.syncleus.ferma.WrappedFramedGraph;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.log4j.Logger;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.IoCore;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.*;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.stream.Collectors;
 
 //TODO : multiple instances of this class could create conflicts in the DB
 public class GraphDbAetherMudStorage extends AbstractIdleService implements AetherMudStorage {
-
-
+    private static final Logger LOGGER = Logger.getLogger(GraphDbAetherMudStorage.class);
     private final WrappedFramedGraph<Graph> framedGraph;
+    private final String graphDbFile;
+
 
-    public GraphDbAetherMudStorage(WrappedFramedGraph<Graph> framedGraph) {
+    public GraphDbAetherMudStorage(WrappedFramedGraph<Graph> framedGraph, String graphDbFile) {
         this.framedGraph = framedGraph;
+        this.graphDbFile = graphDbFile;
     }
 
     @Override
@@ -73,7 +82,7 @@ public class GraphDbAetherMudStorage extends AbstractIdleService implements Aeth
 
     public void persist() {
         try {
-            this.framedGraph.getBaseGraph().io(IoCore.graphson()).writeGraph(Main.DEFAULT_GRAPH_DB_FILE);
+            this.framedGraph.getBaseGraph().io(IoCore.graphson()).writeGraph(this.graphDbFile);
         } catch (IOException e) {
             throw new IllegalStateException("Could not write to graph file.", e);
         }
@@ -91,6 +100,21 @@ public class GraphDbAetherMudStorage extends AbstractIdleService implements Aeth
         return itemData;
     }
 
+    public List<? extends NpcSpawn> getAllNpcs(GameManager gameManager) {
+        List<? extends NpcData> npcData = this.getNpcDatas();
+        return npcData.stream()
+            .map(metadata -> new NpcBuilder(metadata).setGameManager(gameManager).createNpc())
+            .collect(Collectors.toList());
+    }
+
+    public List<? extends NpcData> getNpcDatas() {
+        return framedGraph.traverse((g) -> framedGraph.getTypeResolver().hasType(g.V(), NpcData.class)).toList(NpcData.class);
+    }
+
+    public NpcData newNpcData() {
+        return framedGraph.addFramedVertex(NpcData.class);
+    }
+
     @Override
     protected void startUp() {
     }
diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbNpcStorage.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbNpcStorage.java
deleted file mode 100644
index b054d9b0..00000000
--- a/src/main/java/com/syncleus/aethermud/storage/graphdb/GraphDbNpcStorage.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright 2017 Syncleus, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.syncleus.aethermud.storage.graphdb;
-
-import com.syncleus.aethermud.Main;
-import com.syncleus.aethermud.core.GameManager;
-import com.syncleus.aethermud.npc.NpcSpawn;
-import com.syncleus.aethermud.npc.NpcBuilder;
-import com.syncleus.aethermud.storage.NpcStorage;
-import com.syncleus.ferma.WrappedFramedGraph;
-import org.apache.log4j.Logger;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.io.IoCore;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.stream.Collectors;
-
-public class GraphDbNpcStorage implements NpcStorage {
-    private final GameManager gameManager;
-    private static final Logger log = Logger.getLogger(GraphDbNpcStorage.class);
-    private final WrappedFramedGraph<Graph> framedGraph;
-
-    public GraphDbNpcStorage(GameManager gameManager, WrappedFramedGraph<Graph> framedGraph) {
-        this.gameManager = gameManager;
-        this.framedGraph = framedGraph;
-    }
-
-    public List<? extends NpcSpawn> getAllNpcs() {
-        List<? extends NpcData> npcData = this.getNpcDatas();
-        return npcData.stream()
-            .map(metadata -> new NpcBuilder(metadata).setGameManager(gameManager).createNpc())
-            .collect(Collectors.toList());
-    }
-
-    public List<? extends NpcData> getNpcDatas() {
-        return framedGraph.traverse((g) -> framedGraph.getTypeResolver().hasType(g.V(), NpcData.class)).toList(NpcData.class);
-    }
-
-    public NpcData newNpcData() {
-        return framedGraph.addFramedVertex(NpcData.class);
-    }
-
-    public void persist() {
-        try {
-            this.framedGraph.getBaseGraph().io(IoCore.graphson()).writeGraph(Main.DEFAULT_GRAPH_DB_FILE);
-        } catch (IOException e) {
-            throw new IllegalStateException("Could not write to graph file.", e);
-        }
-    }
-}
-
diff --git a/src/test/java/com/syncleus/aethermud/common/ColorizedTextTemplateTest.java b/src/test/java/com/syncleus/aethermud/common/ColorizedTextTemplateTest.java
index b01b2e58..2b74a2ee 100644
--- a/src/test/java/com/syncleus/aethermud/common/ColorizedTextTemplateTest.java
+++ b/src/test/java/com/syncleus/aethermud/common/ColorizedTextTemplateTest.java
@@ -18,9 +18,9 @@ package com.syncleus.aethermud.common;
 import com.google.common.collect.Lists;
 import com.syncleus.aethermud.Main;
 import com.syncleus.aethermud.items.Loot;
-import com.syncleus.aethermud.storage.graphdb.GraphDbNpcStorage;
+import com.syncleus.aethermud.storage.AetherMudStorage;
+import com.syncleus.aethermud.storage.graphdb.GraphDbAetherMudStorage;
 import com.syncleus.aethermud.storage.graphdb.NpcData;
-import com.syncleus.aethermud.storage.NpcStorage;
 import com.google.common.collect.Maps;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
@@ -66,7 +66,7 @@ public class ColorizedTextTemplateTest {
         Gson gson = new GsonBuilder().setPrettyPrinting().create();
 
         WrappedFramedGraph<Graph> framedGraph = new DelegatingFramedGraph(TinkerGraph.open(), Main.FRAMED_TYPES);
-        NpcStorage npcStorage = new GraphDbNpcStorage(null, framedGraph);
+        AetherMudStorage npcStorage = new GraphDbAetherMudStorage(framedGraph, null);
 
         List<? extends NpcData> npcData = npcStorage.getNpcDatas();
         Assert.assertTrue(npcData.isEmpty());
diff --git a/src/test/java/com/syncleus/aethermud/player/PlayerManagerTest.java b/src/test/java/com/syncleus/aethermud/player/PlayerManagerTest.java
index e4e0fcfd..b1cfb5df 100644
--- a/src/test/java/com/syncleus/aethermud/player/PlayerManagerTest.java
+++ b/src/test/java/com/syncleus/aethermud/player/PlayerManagerTest.java
@@ -49,7 +49,7 @@ public class PlayerManagerTest {
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         WrappedFramedGraph<Graph> framedGraph = new DelegatingFramedGraph(TinkerGraph.open(), Main.FRAMED_TYPES);
-        GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(framedGraph);
+        GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(framedGraph, "aethermud-test-graph.json");
         playerManager = new PlayerManager(graphStorage, sessionManager);
     }
 
diff --git a/src/test/java/com/syncleus/aethermud/player/combatsimuation/NpcTestHarness.java b/src/test/java/com/syncleus/aethermud/player/combatsimuation/NpcTestHarness.java
index ccfdb265..b27f65a8 100644
--- a/src/test/java/com/syncleus/aethermud/player/combatsimuation/NpcTestHarness.java
+++ b/src/test/java/com/syncleus/aethermud/player/combatsimuation/NpcTestHarness.java
@@ -68,7 +68,7 @@ public class NpcTestHarness {
     // Levels 1-3
     @Test
     public void testDemonCat() throws Exception {
-        List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+        List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
         NpcSpawn npcSpawnFromFile = npcsFromFile.stream().filter(npc -> npc.getName().equals("demon cat")).collect(Collectors.toList()).get(0);
         processRunAndVerify(npcSpawnFromFile, 1, Sets.newHashSet(), 98f, 90f, 10, 5, 3, 0);
         processRunAndVerify(npcSpawnFromFile, 2, Sets.newHashSet(), 99.9f, 96f, 7, 4, 3, 0);
@@ -78,7 +78,7 @@ public class NpcTestHarness {
     // Levels 2-4
     @Test
     public void testSwampBerserker() throws Exception {
-        List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+        List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
         NpcSpawn npcSpawnFromFile = npcsFromFile.stream().filter(npc -> npc.getName().equals("swamp berserker")).collect(Collectors.toList()).get(0);
         processRunAndVerify(npcSpawnFromFile, 1, Sets.newHashSet(), 15f, 0f, 10, 0, 10, 5);
         processRunAndVerify(npcSpawnFromFile, 2, Sets.newHashSet(), 25f, 0f, 10, 0, 10, 5);
@@ -89,7 +89,7 @@ public class NpcTestHarness {
     // Levels 2-4
     @Test
     public void testBloodWolf() throws Exception {
-        List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+        List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
         NpcSpawn npcSpawnFromFile = npcsFromFile.stream().filter(npc -> npc.getName().equals("blood wolf")).collect(Collectors.toList()).get(0);
         processRunAndVerify(npcSpawnFromFile, 1, Sets.newHashSet(), 15f, 0f, 10, 0, 14, 5);
         processRunAndVerify(npcSpawnFromFile, 2, Sets.newHashSet(), 25f, 0f, 10, 0, 14, 5);
@@ -100,7 +100,7 @@ public class NpcTestHarness {
     // Levels 4-6
     @Test
     public void testTreeBerserker() throws Exception {
-        List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+        List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
         NpcSpawn npcSpawnFromFile = npcsFromFile.stream().filter(npc -> npc.getName().equals("tree berserker")).collect(Collectors.toList()).get(0);
         processRunAndVerify(npcSpawnFromFile, 3, Sets.newHashSet(), 20f, 12f, 10, 0, 14, 8);
         processRunAndVerify(npcSpawnFromFile, 4, Sets.newHashSet(), 40f, 33f, 10, 0, 14, 8);
@@ -111,7 +111,7 @@ public class NpcTestHarness {
     // Levels 6-8
     @Test
     public void testSwampBear() throws Exception {
-        List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+        List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
         NpcSpawn npcSpawnFromFile = npcsFromFile.stream().filter(npc -> npc.getName().equals("swamp bear")).collect(Collectors.toList()).get(0);
         processRunAndVerify(npcSpawnFromFile, 6, getEarlyLevelArmorSet(), 55, 40f, 10, 0, 18, 12);
         processRunAndVerify(npcSpawnFromFile, 7, getEarlyLevelArmorSet(), 85, 70f, 10, 0, 18, 12);
@@ -122,7 +122,7 @@ public class NpcTestHarness {
     // Levels 8-10
     @Test
     public void testRedEyeBear() throws Exception {
-        List<? extends NpcSpawn> npcsFromFile = gameManager.getNpcStorage().getAllNpcs();
+        List<? extends NpcSpawn> npcsFromFile = gameManager.getGraphStorage().getAllNpcs(gameManager);
         NpcSpawn npcSpawnFromFile = npcsFromFile.stream().filter(npc -> npc.getName().equals("red-eyed bear")).collect(Collectors.toList()).get(0);
         processRunAndVerify(npcSpawnFromFile, 8, getMidLevelArmorSet(), 55, 36f, 10, 0, 24, 18);
         processRunAndVerify(npcSpawnFromFile, 9, getMidLevelArmorSet(), 85, 70f, 10, 0, 24, 18);
@@ -330,7 +330,7 @@ public class NpcTestHarness {
         };
         AetherMudConfiguration aetherMudConfiguration = new AetherMudConfiguration(new MapConfiguration(Maps.newHashMap()));
         WrappedFramedGraph<Graph> framedGraph = new DelegatingFramedGraph(TinkerGraph.open(), Main.FRAMED_TYPES);
-        GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(framedGraph);
+        GraphDbAetherMudStorage graphStorage = new GraphDbAetherMudStorage(framedGraph, "aethermud-tests-graph.json");
         PlayerManager playerManager = new PlayerManager(graphStorage, new SessionManager());
         RoomManager roomManager = new RoomManager(playerManager);
         MapsManager mapsManager = new MapsManager(aetherMudConfiguration, roomManager);
-- 
GitLab