package org.openecomp.sdc.tosca.parser.utils; import java.util.Arrays; public class GeneralUtility { public static boolean isEmptyString(String str) { return str == null || str.trim().isEmpty(); } /** * Compares two version strings. *

* Use this instead of String.compareTo() for a non-lexicographical * comparison that works for version strings. e.g. "1.10".compareTo("1.6"). * * @param str1 a string of ordinal numbers separated by decimal points. * @param str2 a string of ordinal numbers separated by decimal points. * @return The result is a negative integer if str1 is _numerically_ less than str2. * The result is a positive integer if str1 is _numerically_ greater than str2. * The result is zero if the strings are _numerically_ equal. * @note It does not work if "1.10" is supposed to be equal to "1.10.0". */ public static int conformanceLevelCompare(String str1, String str2) { String[] vals1 = str1.split("\\."); String[] vals2 = str2.split("\\."); int i = 0; // set index to first non-equal ordinal or length of shortest version string while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) { i++; } // compare first non-equal ordinal number if (i < vals1.length && i < vals2.length) { int diff = Integer.valueOf(vals1[i]).compareTo(Integer.valueOf(vals2[i])); return Integer.signum(diff); } //in case of 0 after the . e.g: "3" = "3.0" or "3.0.0.0" = "3.0" str2 = str2.substring(i).replace(".", ""); str1 = str1.substring(i).replace(".", ""); if ((!(str1.equals(""))) && Integer.valueOf(str1) == 0){ vals1 = Arrays.copyOf(vals1, i); } if ((!(str2.equals(""))) && Integer.valueOf(str2) == 0){ vals2 = Arrays.copyOf(vals2, i); } // the strings are equal or one string is a substring of the other // e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4" return Integer.signum(vals1.length - vals2.length); } }