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