Stop using custom deserialisation logic for groups*, accounts and tokens

After the introduction of the CacheDef<?,?> injection in the Key JSON
deserialiser for caches, there is no need anymore to manage caches with
custom cases in the CacheKeyJsonParser.

Change-Id: I69c5a2895d3657ac314de88f0d9c7380d5f5e6da
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParser.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParser.java
index 4f2eea7..f3eb71e 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParser.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParser.java
@@ -17,10 +17,6 @@
 import com.ericsson.gerrit.plugins.highavailability.cache.Constants;
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Strings;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.gerrit.entities.Account;
-import com.google.gerrit.entities.AccountGroup;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.registration.DynamicMap;
 import com.google.gerrit.server.cache.CacheDef;
@@ -42,19 +38,7 @@
 
   public Object fromJson(String cacheName, String jsonString) {
     JsonElement json = gson.fromJson(Strings.nullToEmpty(jsonString), JsonElement.class);
-    Supplier<JsonElement> id = Suppliers.memoize(() -> json.getAsJsonObject().get("id"));
-    Supplier<JsonElement> uuid = Suppliers.memoize(() -> json.getAsJsonObject().get("uuid"));
-
-    // Need to add a case for 'adv_bases'
     switch (cacheName) {
-      case Constants.ACCOUNTS:
-      case Constants.TOKENS:
-        return id.get() == null ? null : Account.id(id.get().getAsInt());
-      case Constants.GROUPS:
-        return id.get() == null ? null : AccountGroup.id(id.get().getAsInt());
-      case Constants.GROUPS_BYINCLUDE:
-      case Constants.GROUPS_MEMBERS:
-        return uuid.get() == null ? null : AccountGroup.uuid(uuid.get().getAsString());
       case Constants.PROJECT_LIST:
         return gson.fromJson(json, Object.class);
       case Constants.PROJECTS:
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParserTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParserTest.java
index e3f9615..c08fef0 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParserTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/CacheKeyJsonParserTest.java
@@ -46,20 +46,34 @@
     cacheDefMap =
         (PrivateInternals_DynamicMapImpl<CacheDef<?, ?>>) DynamicMap.<CacheDef<?, ?>>emptyMap();
 
-    RegistrationHandle unused =
-        cacheDefMap.put(
-            Constants.GERRIT,
-            Constants.GROUPS_BYMEMBER,
-            Providers.of(new GroupsByIncludeCacheDef()));
+    defineCache(Constants.GROUPS_BYMEMBER, Account.Id.class);
+    defineCache(Constants.ACCOUNTS, Account.Id.class);
+    defineCache(Constants.TOKENS, Account.Id.class);
+    defineCache(Constants.GROUPS, AccountGroup.Id.class);
+    defineCache(Constants.GROUPS_BYINCLUDE, AccountGroup.UUID.class);
+    defineCache(Constants.GROUPS_MEMBERS, AccountGroup.UUID.class);
 
     objectUnderTest = new CacheKeyJsonParser(gson, cacheDefMap);
   }
 
-  static class GroupsByIncludeCacheDef implements CacheDef<Account.Id, Object> {
+  private void defineCache(String cacheName, Class<?> keyClass) {
+    RegistrationHandle unused =
+        cacheDefMap.put(
+            Constants.GERRIT, cacheName, Providers.of(new TestCacheDef<>(cacheName, keyClass)));
+  }
+
+  static class TestCacheDef<K> implements CacheDef<K, Object> {
+    private final Class<K> keyClass;
+    private final String name;
+
+    TestCacheDef(String name, Class<K> keyClass) {
+      this.name = name;
+      this.keyClass = keyClass;
+    }
 
     @Override
     public String name() {
-      return Constants.GROUPS_BYMEMBER;
+      return name;
     }
 
     @Override
@@ -68,8 +82,8 @@
     }
 
     @Override
-    public TypeLiteral<Account.Id> keyType() {
-      return TypeLiteral.get(Account.Id.class);
+    public TypeLiteral<K> keyType() {
+      return TypeLiteral.get(keyClass);
     }
 
     @Override
@@ -98,12 +112,12 @@
     }
 
     @Override
-    public Weigher<Account.Id, Object> weigher() {
+    public Weigher<K, Object> weigher() {
       return null;
     }
 
     @Override
-    public CacheLoader<Account.Id, Object> loader() {
+    public CacheLoader<K, Object> loader() {
       return null;
     }
   }