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; } }