ONOS-2124 FIxed Version to allow two-segment versions and to be more robust in general.

Change-Id: I92db41ad0aa7c604375dae5a0ac6804462532ba9
diff --git a/core/api/src/main/java/org/onosproject/core/Version.java b/core/api/src/main/java/org/onosproject/core/Version.java
index 30424b3..7a26357 100644
--- a/core/api/src/main/java/org/onosproject/core/Version.java
+++ b/core/api/src/main/java/org/onosproject/core/Version.java
@@ -26,8 +26,9 @@
  */
 public final class Version {
 
-    public static final String FORMAT = "%d.%d.%s.%s";
+    public static final String FORMAT_MINIMAL = "%d.%d";
     public static final String FORMAT_SHORT = "%d.%d.%s";
+    public static final String FORMAT_LONG = "%d.%d.%s.%s";
 
     private static final String NEGATIVE = "Version segment cannot be negative";
 
@@ -44,9 +45,12 @@
         this.minor = minor;
         this.patch = patch;
         this.build = build;
-        this.format = isNullOrEmpty(build) ?
-                String.format(FORMAT_SHORT, major, minor, patch) :
-                String.format(FORMAT, major, minor, patch, build);
+        this.format =
+                isNullOrEmpty(patch) ?
+                        String.format(FORMAT_MINIMAL, major, minor) :
+                        (isNullOrEmpty(build) ?
+                                String.format(FORMAT_SHORT, major, minor, patch) :
+                                String.format(FORMAT_LONG, major, minor, patch, build));
     }
 
 
@@ -74,7 +78,8 @@
     public static Version version(String string) {
         String[] fields = string.split("[.-]");
         return new Version(parseInt(fields[0]), parseInt(fields[1]),
-                           fields[2], fields.length == 4 ? fields[3] : null);
+                           fields.length >= 3 ? fields[2] : null,
+                           fields.length >= 4 ? fields[3] : null);
     }
 
     /**