From 7825f3af14dfb087c9039c17be100ee7214ed560 Mon Sep 17 00:00:00 2001
From: liamfallon <liam.fallon@est.tech>
Date: Fri, 5 Apr 2019 04:51:42 +0000
Subject: Add string constructor to Version class

Issue-ID: POLICY-1095
Change-Id: Ib0d2c778f3e8dc5e52369e43b98249ed426fc14a
Signed-off-by: liamfallon <liam.fallon@est.tech>
---
 .../policy/common/utils/validation/Version.java    | 42 +++++++++++++++-------
 1 file changed, 30 insertions(+), 12 deletions(-)

(limited to 'utils/src/main/java/org')

diff --git a/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java b/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java
index b5769948..d8106ec6 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/validation/Version.java
@@ -25,13 +25,14 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Version of an object within the model. Versions are assumed to be of the form: major or
- * major.minor.patch, where each component is numeric.
+ * Version of an object within the model. Versions are assumed to be of the form: major or major.minor.patch, where each
+ * component is numeric.
  */
 @Data
 @RequiredArgsConstructor
@@ -40,8 +41,7 @@ public class Version implements Comparable<Version> {
     private static final Logger logger = LoggerFactory.getLogger(Version.class);
 
     /**
-     * Pattern to match a version of the form, major or major.minor.patch, where all
-     * components are numeric.
+     * Pattern to match a version of the form, major or major.minor.patch, where all components are numeric.
      */
     private static final Pattern VERSION_PAT = Pattern.compile("(\\d+)([.](\\d+)[.](\\d+))?");
 
@@ -56,9 +56,8 @@ public class Version implements Comparable<Version> {
      * @param type type of object with which the version is associated, used when logging
      * @param name name with which the version is associated, used when logging
      * @param versionText the version, in textual form
-     * @return a new version, or {@code null} if the version cannot be created from the
-     *         key (e.g., the key has a version that does not match the major.minor.patch
-     *         form)
+     * @return a new version, or {@code null} if the version cannot be created from the key (e.g., the key has a version
+     *         that does not match the major.minor.patch form)
      */
     public static Version makeVersion(String type, String name, String versionText) {
         Matcher matcher = VERSION_PAT.matcher(versionText);
@@ -75,7 +74,7 @@ public class Version implements Comparable<Version> {
             } else {
                 // form: major.minor.patch
                 return new Version(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(3)),
-                                Integer.parseInt(matcher.group(4)));
+                        Integer.parseInt(matcher.group(4)));
             }
 
         } catch (NumberFormatException e) {
@@ -85,10 +84,29 @@ public class Version implements Comparable<Version> {
     }
 
     /**
-     * Generates a new version from the current version.
+     * String constructor.
      *
-     * @return a new version, of the form major.0.0, where "major" is one more than "this"
-     *         version's major number
+     * @param versionString the version string
+     */
+    public Version(@NonNull final String versionString) {
+        Version newVersion = makeVersion("String", "constructor", versionString);
+
+        if (newVersion != null) {
+            this.major = newVersion.major;
+            this.minor = newVersion.minor;
+            this.patch = newVersion.patch;
+        }
+        else {
+            this.major = 0;
+            this.minor = 0;
+            this.patch = 0;
+        }
+    }
+
+    /**
+     * Generates a new version from a string.
+     *
+     * @return a new version, of the form major.0.0, where "major" is one more than "this" version's major number
      */
     public Version newVersion() {
         return new Version(major + 1, 0, 0);
@@ -110,4 +128,4 @@ public class Version implements Comparable<Version> {
     public String toString() {
         return major + "." + minor + "." + patch;
     }
-}
\ No newline at end of file
+}
-- 
cgit 1.2.3-korg