Improve code structure in the CacheKeyJsonParser Handle all cache name cases in the same switch statement. Change-Id: I772c4407da66b29ae6cef1d476a3640afb004c38
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 01c7dbc..48f3bff 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
@@ -16,13 +16,14 @@ import com.ericsson.gerrit.plugins.highavailability.cache.Constants; 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.server.events.EventGson; import com.google.gson.Gson; import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -37,39 +38,28 @@ public Object fromJson(String cacheName, String jsonString) { JsonElement json = gson.fromJson(Strings.nullToEmpty(jsonString), JsonElement.class); - Object key; + 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' - if (!json.isJsonObject()) { - if (Constants.PROJECTS.equals(cacheName)) { - return Project.nameKey(json.getAsString()); - } - return json.getAsString(); - } - JsonObject asJsonObject = json.getAsJsonObject(); switch (cacheName) { case Constants.ACCOUNTS: - key = asJsonObject.has("id") ? Account.id(asJsonObject.get("id").getAsInt()) : null; - break; + return id.get() == null ? null : Account.id(id.get().getAsInt()); case Constants.GROUPS: - key = asJsonObject.has("id") ? AccountGroup.id(asJsonObject.get("id").getAsInt()) : null; - break; + return id.get() == null ? null : AccountGroup.id(id.get().getAsInt()); case Constants.GROUPS_BYINCLUDE: case Constants.GROUPS_MEMBERS: - key = - asJsonObject.has("uuid") - ? AccountGroup.uuid(asJsonObject.get("uuid").getAsString()) - : null; - break; + return uuid.get() == null ? null : AccountGroup.uuid(uuid.get().getAsString()); case Constants.PROJECT_LIST: - key = gson.fromJson(json, Object.class); - break; + return gson.fromJson(json, Object.class); + case Constants.PROJECTS: + return Project.nameKey(json.getAsString()); default: try { - key = gson.fromJson(json, String.class); + return gson.fromJson(json, String.class); } catch (Exception e) { - key = gson.fromJson(json, Object.class); + return gson.fromJson(json, Object.class); } } - return key; } }