Merge branch 'stable-3.1'

* stable-3.1:
  Set version to 3.0.2
  Amend 'get' method adding Class type as parameter
  Ignore Eclipse IDE files

Change-Id: I3237138479ef578f99c212df5457683c3060c9c9
diff --git a/.gitignore b/.gitignore
index 16f1fc2..dfa6ffb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,12 @@
 # Maven target
 target
 
+# Eclipse
+.classpath
+.factorypath
+.project
+.settings/
+
 # IntelliJ
 .idea
 *.iml
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java
index 3b75019..d1b6d53 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 40d7a8e..44c4fbb 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 b2656bb..bb5ad8d 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabaseTest.java
@@ -155,17 +155,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