add maxValueOf() for NumericUtil (#30)

Change-Id: Ie34be6a9aa187691b004391f956891b8c55554fb
diff --git a/pom.xml b/pom.xml
index 7f97011..41974a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>com.baidu.hugegraph</groupId>
     <artifactId>hugegraph-common</artifactId>
-    <version>1.6.6</version>
+    <version>1.6.7</version>
 
     <name>hugegraph-common</name>
     <url>https://github.com/hugegraph/hugegraph-common</url>
@@ -212,7 +212,7 @@
                         <manifestEntries>
                             <!-- Must be on one line, otherwise the automatic
                                  upgrade script cannot replace the version number -->
-                            <Implementation-Version>1.6.6.0</Implementation-Version>
+                            <Implementation-Version>1.6.7.0</Implementation-Version>
                         </manifestEntries>
                     </archive>
                 </configuration>
diff --git a/src/main/java/com/baidu/hugegraph/util/NumericUtil.java b/src/main/java/com/baidu/hugegraph/util/NumericUtil.java
index f976f92..1dafa8b 100644
--- a/src/main/java/com/baidu/hugegraph/util/NumericUtil.java
+++ b/src/main/java/com/baidu/hugegraph/util/NumericUtil.java
@@ -212,6 +212,26 @@
         throw unsupportedNumberType(clazz);
     }
 
+    public static Number maxValueOf(Class<?> clazz) {
+        E.checkArgumentNotNull(clazz, "The clazz can't be null");
+
+        if (Long.class.isAssignableFrom(clazz) ||
+            Double.class.isAssignableFrom(clazz) ) {
+            return Long.MAX_VALUE;
+        }
+        if (Integer.class.isAssignableFrom(clazz) ||
+            Float.class.isAssignableFrom(clazz) ||
+            Short.class.isAssignableFrom(clazz)) {
+            return Integer.MAX_VALUE;
+        }
+        if (Byte.class.isAssignableFrom(clazz)) {
+            return Byte.MAX_VALUE;
+        }
+
+        // TODO: support other number types
+        throw unsupportedNumberType(clazz);
+    }
+
     public static byte[] longToSortableBytes(long value) {
         return longToBytes(value + FULL_LONG);
     }
diff --git a/src/main/java/com/baidu/hugegraph/version/CommonVersion.java b/src/main/java/com/baidu/hugegraph/version/CommonVersion.java
index da9b44c..43494b5 100644
--- a/src/main/java/com/baidu/hugegraph/version/CommonVersion.java
+++ b/src/main/java/com/baidu/hugegraph/version/CommonVersion.java
@@ -27,5 +27,5 @@
 
     // The second parameter of Version.of() is for all-in-one JAR
     public static final Version VERSION = Version.of(CommonVersion.class,
-                                                     "1.6.6");
+                                                     "1.6.7");
 }
diff --git a/src/test/java/com/baidu/hugegraph/unit/util/NumericUtilTest.java b/src/test/java/com/baidu/hugegraph/unit/util/NumericUtilTest.java
index 0a90964..a7221b9 100644
--- a/src/test/java/com/baidu/hugegraph/unit/util/NumericUtilTest.java
+++ b/src/test/java/com/baidu/hugegraph/unit/util/NumericUtilTest.java
@@ -364,6 +364,31 @@
         });
     }
 
+    @Test
+    public void testMaxValueOf() {
+        Assert.assertEquals(Byte.MAX_VALUE,
+                            NumericUtil.maxValueOf(Byte.class));
+
+        Assert.assertEquals(Integer.MAX_VALUE,
+                            NumericUtil.maxValueOf(Short.class));
+        Assert.assertEquals(Integer.MAX_VALUE,
+                            NumericUtil.maxValueOf(Integer.class));
+        Assert.assertEquals(Integer.MAX_VALUE,
+                            NumericUtil.maxValueOf(Float.class));
+
+        Assert.assertEquals(Long.MAX_VALUE,
+                            NumericUtil.maxValueOf(Long.class));
+        Assert.assertEquals(Long.MAX_VALUE,
+                            NumericUtil.maxValueOf(Double.class));
+
+        Assert.assertThrows(IllegalArgumentException.class, () -> {
+            NumericUtil.minValueOf(null);
+        });
+        Assert.assertThrows(IllegalArgumentException.class, () -> {
+            NumericUtil.minValueOf(Character.class);
+        });
+    }
+
     private static void assertEquals(byte[] bytes1, byte[] bytes2) {
         Assert.assertTrue(Bytes.toHex(bytes1) + " != " + Bytes.toHex(bytes2),
                           Bytes.equals(bytes1, bytes2));