Amend 'get' method adding Class type as parameter Passing the Class type will ease the implementation of the 'get' interface, avoiding the use of reflection to determine the type of the generic type. Change-Id: Iae602c364c5b57cb13abd6682e6346eadda953ff
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java index 24f86a7..ef5d5df 100644 --- a/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java +++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java
@@ -103,8 +103,10 @@ * * @param project project name * @param refName reference name + * @param clazz wanted Class of the returned value * @return {@link java.util.Optional} of the value * @throws GlobalRefDbSystemError value cannot be returned due to a system error. */ - <T> Optional<T> get(Project.NameKey project, String refName) throws GlobalRefDbSystemError; + <T> Optional<T> get(Project.NameKey project, String refName, Class<T> clazz) + throws GlobalRefDbSystemError; }
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java index 4d2e0b6..77b5af5 100644 --- a/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java +++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/FakeGlobalRefDatabase.java
@@ -105,9 +105,10 @@ @Override @SuppressWarnings("unchecked") - public <T> Optional<T> get(Project.NameKey project, String refName) + public <T> Optional<T> get(Project.NameKey project, String refName, Class<T> clazz) throws GlobalRefDbSystemError { - return Optional.ofNullable((T) projectRefDb(project).get(refName)) + String key = String.format("%s/%s", project.get(), refName); + return Optional.ofNullable((T) genericKeyValueStore.get(key)) .map(v -> ((AtomicReference<T>) v).get()); }
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java index 02d060b..de67975 100644 --- a/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java +++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java
@@ -154,17 +154,31 @@ } @Test - public void shouldReturnValueInTheGlobalRefDB() { - objectUnderTest.compareAndPut(project, initialRef, objectId1); - Optional<ObjectId> o = objectUnderTest.get(project, initialRef.getName()); + public void shouldReturnObjectValueInTheGlobalRefDB() { + Object object = new Object(); + objectUnderTest.compareAndPut(project, refName, null, object); + + Optional<Object> o = objectUnderTest.get(project, refName, Object.class); + assertThat(o.isPresent()).isTrue(); - assertThat(o.get()).isEqualTo(objectId1); + assertThat(o.get()).isEqualTo(object); + } + + @Test + public void shouldReturnLongValueInTheGlobalRefDB() { + objectUnderTest.compareAndPut(project, refName, null, 1L); + + Optional<Long> o = objectUnderTest.get(project, refName, Long.class); + + assertThat(o.isPresent()).isTrue(); + assertThat(o.get()).isEqualTo(1L); } @Test public void shouldReturnEmptyIfValueIsNotInTheGlobalRefDB() { - Optional<ObjectId> o = objectUnderTest.get(project, "nonExistentRef"); - assertThat(o.isPresent()).isFalse(); + Optional<Object> value = objectUnderTest.get(project, "nonExistentRef", Object.class); + + assertThat(value.isPresent()).isFalse(); } @Test