You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2017/06/30 14:02:57 UTC
[09/27] brooklyn-server git commit: tidy version comparator,
removing old code
tidy version comparator, removing old code
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/cc703928
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/cc703928
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/cc703928
Branch: refs/heads/master
Commit: cc703928e1a2bd9c97795acab9a747a3733eb4a2
Parents: 5b2cc48
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Jun 20 16:49:57 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Jun 20 16:49:57 2017 +0100
----------------------------------------------------------------------
.../brooklyn/util/text/VersionComparator.java | 143 -------------------
.../util/text/VersionComparatorTest.java | 21 ---
2 files changed, 164 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cc703928/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java b/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java
index bac1929..e5d1fbf 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/text/VersionComparator.java
@@ -18,17 +18,10 @@
*/
package org.apache.brooklyn.util.text;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
import java.util.Comparator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.brooklyn.util.text.NaturalOrderComparator;
-import org.apache.brooklyn.util.text.Strings;
-
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
/**
@@ -121,140 +114,4 @@ public class VersionComparator implements Comparator<String> {
return q.matches() ? q.group(1) : "";
}
- private boolean isQualifiedAndUnqualifiedVariantOfSameVersion(String v1, String v2) {
- Matcher q = Pattern.compile("([0-9]+(\\.[0-9]+(\\.[0-9])?)?)(.*)").matcher(v1);
- return (q.matches() && q.group(1).equals(v2));
- }
-
- private static boolean hasQualifier(String v) {
- return !v.matches("[0-9]+(\\.[0-9]+(\\.[0-9])?)?");
- }
-
- @VisibleForTesting
- static String[] splitOnDot(String v) {
- return v.split("(?<=\\.)|(?=\\.)");
- }
-
- private int compareDotSplitParts(String[] v1Parts, String[] v2Parts) {
- for (int i = 0; ; i++) {
- if (i >= v1Parts.length && i >= v2Parts.length) {
- // end of both
- return 0;
- }
- if (i == v1Parts.length) {
- // sequence depends whether the extra part *starts with* a number
- // ie
- // 2.0 < 2.0.0
- // and
- // 2.0.qualifier < 2.0 < 2.0.0qualifier < 2.0.0-qualifier < 2.0.0.qualifier < 2.0.0 < 2.0.9-qualifier
- return isNumberInFirstCharPossiblyAfterADot(v2Parts, i) ? -1 : 1;
- }
- if (i == v2Parts.length) {
- // as above but inverted
- return isNumberInFirstCharPossiblyAfterADot(v1Parts, i) ? 1 : -1;
- }
- // not at end; compare this dot split part
-
- int result = compareDotSplitPart(v1Parts[i], v2Parts[i]);
- if (result!=0) return result;
- }
- }
-
- private int compareDotSplitPart(String v1, String v2) {
- String[] v1Parts = splitOnNonWordChar(v1);
- String[] v2Parts = splitOnNonWordChar(v2);
-
- for (int i = 0; ; i++) {
- if (i >= v1Parts.length && i >= v2Parts.length) {
- // end of both
- return 0;
- }
- if (i == v1Parts.length) {
- // shorter set always wins here; i.e.
- // 1-qualifier < 1
- return 1;
- }
- if (i == v2Parts.length) {
- // as above but inverted
- return -1;
- }
- // not at end; compare this dot split part
-
- String v1p = v1Parts[i];
- String v2p = v2Parts[i];
-
- if (v1p.equals(v2p)) continue;
-
- if (isNumberInFirstChar(v1p) || isNumberInFirstChar(v2p)) {
- // something starting with a number is higher than something not
- if (!isNumberInFirstChar(v1p)) return -1;
- if (!isNumberInFirstChar(v2p)) return 1;
-
- // both start with numbers; can use natural order comparison *unless*
- // one is purely a number AND the other *begins* with that number,
- // followed by non-digit chars, in which case prefer the pure number
- // ie:
- // 1beta < 1
- // but note
- // 1 < 2beta < 11beta
- if (isNumber(v1p) || isNumber(v2p)) {
- if (!isNumber(v1p)) {
- if (v1p.startsWith(v2p)) {
- if (!isNumberInFirstChar(Strings.removeFromStart(v1p, v2p))) {
- // v2 is a number, and v1 is the same followed by non-numbers
- return -1;
- }
- }
- }
- if (!isNumber(v2p)) {
- // as above but inverted
- if (v2p.startsWith(v1p)) {
- if (!isNumberInFirstChar(Strings.removeFromStart(v2p, v1p))) {
- return 1;
- }
- }
- }
- // both numbers, skip to natural order comparison
- }
- }
-
- // otherwise it is in-order
- int result = NaturalOrderComparator.INSTANCE.compare(v1p, v2p);
- if (result!=0) return result;
- }
- }
-
- @VisibleForTesting
- static String[] splitOnNonWordChar(String v) {
- Collection<String> parts = new ArrayList<String>();
- String remaining = v;
-
- // use lookahead to split on all non-letter non-numbers, putting them into their own buckets
- parts.addAll(Arrays.asList(remaining.split("(?<=[^0-9\\p{L}])|(?=[^0-9\\p{L}])")));
- return parts.toArray(new String[parts.size()]);
- }
-
- @VisibleForTesting
- static boolean isNumberInFirstCharPossiblyAfterADot(String[] parts, int i) {
- if (parts==null || parts.length<=i) return false;
- if (isNumberInFirstChar(parts[i])) return true;
- if (".".equals(parts[i])) {
- if (parts.length>i+1)
- if (isNumberInFirstChar(parts[i+1]))
- return true;
- }
- return false;
- }
-
- @VisibleForTesting
- static boolean isNumberInFirstChar(String v) {
- if (v==null || v.length()==0) return false;
- return Character.isDigit(v.charAt(0));
- }
-
- @VisibleForTesting
- static boolean isNumber(String v) {
- if (v==null || v.length()==0) return false;
- return v.matches("[\\d]+");
- }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cc703928/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java
index 0821267..aa01c79 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/text/VersionComparatorTest.java
@@ -27,27 +27,6 @@ import org.testng.Assert;
import org.testng.annotations.Test;
public class VersionComparatorTest {
-
- @Test
- public void testStaticHelpers() {
- Assert.assertEquals(VersionComparator.splitOnDot("a.b.cc"), new String[] { "a", ".", "b", ".", "cc" });
- Assert.assertEquals(VersionComparator.splitOnDot("a..b-c"), new String[] { "a", ".", ".", "b-c" });
-
- Assert.assertEquals(VersionComparator.splitOnNonWordChar("a1-b__cc9c"), new String[] {
- "a1", "-", "b", "_", "_", "cc9c" });
-
- Assert.assertEquals(VersionComparator.isNumberInFirstChar("1a"), true);
- Assert.assertEquals(VersionComparator.isNumberInFirstChar("a1"), false);
- Assert.assertEquals(VersionComparator.isNumberInFirstChar(""), false);
- Assert.assertEquals(VersionComparator.isNumberInFirstChar(null), false);
-
- Assert.assertEquals(VersionComparator.isNumber("1"), true);
- Assert.assertEquals(VersionComparator.isNumber("1111"), true);
- Assert.assertEquals(VersionComparator.isNumber("1a"), false);
- Assert.assertEquals(VersionComparator.isNumber("a1"), false);
- Assert.assertEquals(VersionComparator.isNumber(""), false);
- Assert.assertEquals(VersionComparator.isNumber(null), false);
- }
@Test
public void testSnapshotSuffixComparison() {