Merge pull request #64 from caskdata/feature/TEPHRA-111-improve-version-parsing

(TEPHRA-111) Improve version string parsing to cater for the forth nu…
diff --git a/pom.xml b/pom.xml
index f308b6a..e53da6c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,7 +99,7 @@
     <hadoop.version>2.2.0</hadoop.version>
     <hbase96.version>0.96.2-hadoop2</hbase96.version>
     <hbase98.version>0.98.11-hadoop2</hbase98.version>
-    <hbase10.version>1.0.1</hbase10.version>
+    <hbase10.version>1.0.1.1</hbase10.version>
     <hbase10cdh.version>1.0.0-cdh5.4.2</hbase10cdh.version>
     <junit.version>4.11</junit.version>
     <slf4j.version>1.7.5</slf4j.version>
diff --git a/tephra-core/src/main/java/co/cask/tephra/util/HBaseVersion.java b/tephra-core/src/main/java/co/cask/tephra/util/HBaseVersion.java
index 8ecdfa3..a01ba98 100644
--- a/tephra-core/src/main/java/co/cask/tephra/util/HBaseVersion.java
+++ b/tephra-core/src/main/java/co/cask/tephra/util/HBaseVersion.java
@@ -118,24 +118,27 @@
 
   /**
    * Utility class to parse apart version number components.  The version string provided is expected to be in
-   * the format: major[.minor[.patch][-classifier][-SNAPSHOT]
+   * the format: major[.minor[.patch[.last]][-classifier][-SNAPSHOT]
    *
    * <p>Only the major version number is actually required.</p>
    */
   public static class VersionNumber {
     private static final Pattern PATTERN =
-        Pattern.compile("(\\d+)(\\.(\\d+))?(\\.(\\d+))?(\\-(?!SNAPSHOT)([^\\-]+))?(\\-SNAPSHOT)?");
+        Pattern.compile("(\\d+)(\\.(\\d+))?(\\.(\\d+))?(\\.(\\d+))?(\\-(?!SNAPSHOT)([^\\-]+))?(\\-SNAPSHOT)?");
 
     private Integer major;
     private Integer minor;
     private Integer patch;
+    private Integer last;
     private String classifier;
     private boolean snapshot;
 
-    private VersionNumber(Integer major, Integer minor, Integer patch, String classifier, boolean snapshot) {
+    private VersionNumber(Integer major, Integer minor, Integer patch, Integer last,
+                          String classifier, boolean snapshot) {
       this.major = major;
       this.minor = minor;
       this.patch = patch;
+      this.last = last;
       this.classifier = classifier;
       this.snapshot = snapshot;
     }
@@ -152,6 +155,10 @@
       return patch;
     }
 
+    public Integer getLast() {
+      return last;
+    }
+
     public String getClassifier() {
       return classifier;
     }
@@ -166,11 +173,13 @@
         String majorString = matcher.group(1);
         String minorString = matcher.group(3);
         String patchString = matcher.group(5);
-        String classifier = matcher.group(7);
-        String snapshotString = matcher.group(8);
+        String last = matcher.group(7);
+        String classifier = matcher.group(9);
+        String snapshotString = matcher.group(10);
         return new VersionNumber(new Integer(majorString),
             minorString != null ? new Integer(minorString) : null,
             patchString != null ? new Integer(patchString) : null,
+            last != null ? new Integer(last) : null,
             classifier,
             "-SNAPSHOT".equals(snapshotString));
       }