Author: jm
Date: 2012-10-10 14:12:10 -0700 (Wed, 10 Oct 2012)
New Revision: 30647
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
Log:
Fixes #1515: Fixed the way App Manager handles version comparisons. Updated
tests to use proper version format.
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
===================================================================
---
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
2012-10-10 19:47:52 UTC (rev 30646)
+++
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
2012-10-10 21:12:10 UTC (rev 30647)
@@ -19,6 +19,8 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.commons.io.IOUtils;
import org.cytoscape.app.internal.exception.AppDownloadException;
@@ -96,6 +98,8 @@
private String currentAppStoreUrl = DEFAULT_APP_STORE_URL;
+
+ private static final Pattern VERSION_PATTERN =
Pattern.compile("(\\d+)([.](\\d+)([.](\\d+)([.]([-_a-zA-Z0-9]+))?)?)?");
/**
* A class that represents a tag used for apps, containing information
about the tag
@@ -702,80 +706,59 @@
return null;
}
- // Find which version is more recent, assuming versions are in format
x.y[.z[tag]]
+ // Find which version is more recent, assuming versions are in format
x.y[.z[.qualifier]]
/**
- * Compares 2 versions, assuming they are in format x.y[.z[tag]],
returning a negative
+ * Compares 2 versions, assuming they are in format
x.y[.z[.qualifier]], returning a negative
* number if the first is more recent, a positive number if the second
is more recent,
* or 0 if the versions were the same or unable to determine which is
more recent.
*
- * @param first The first version
- * @param second The second version
+ * @param version1 The first version
+ * @param version2 The second version
* @return A negative integer if first more recent, a positive integer
if second more recent,
* or 0 if the versions were the same or unable to determine which is
more recent.
*/
- public static int compareVersions(String first, String second) {
- if (first == null || second == null) {
- return 0;
- }
+ public static int compareVersions(String version1, String version2) {
+ Matcher matcher1 = VERSION_PATTERN.matcher(version1);
+ Matcher matcher2 = VERSION_PATTERN.matcher(version2);
- String[] firstSplit = first.split("\\.", 3);
- String[] secondSplit = second.split("\\.", 3);
-
- int maxFields = Math.max(firstSplit.length, secondSplit.length);
-
- boolean firstHasField, secondHasField;
- //System.out.println("test2");
- // Remove non-numerical characters
- for (int i = 0; i < maxFields; i++) {
-
- firstHasField = (i < firstSplit.length);
- secondHasField = (i < secondSplit.length);
+ if (!matcher1.matches()) {
+ throw new
IllegalArgumentException("Incorrectly-formatted version string: " + version1);
+ }
+ if (!matcher2.matches()) {
+ throw new
IllegalArgumentException("Incorrectly-formatted version string: " + version2);
+ }
- /*
- if (firstHasField) {
- System.out.println("first: " + firstSplit[i]);
- }
+ // major = 1, minor = 3, micro = 5, qualifier = 7
+ for (int i = 1; i < 8; i += 2) {
+ String part1 = matcher1.group(i);
+ String part2 = matcher2.group(i);
- if (secondHasField) {
- System.out.println("second: " + secondSplit[i]);
+ if (part1 == null && part2 == null) {
+ return 0;
}
- */
-
- if (firstHasField && secondHasField) {
- firstSplit[i] =
firstSplit[i].replaceAll("[^\\d]+.*", "");
- secondSplit[i] =
secondSplit[i].replaceAll("[^\\d]+.*", "");
-
- /*
- System.out.println("firstSplit: " +
firstSplit[i]);
- System.out.println("secondSplit: " +
secondSplit[i]);
- */
-
- try {
- int firstParsed =
Integer.parseInt(firstSplit[i]);
- int secondParsed =
Integer.parseInt(secondSplit[i]);
-
- /*
- System.out.println("firstParsed: " +
firstParsed);
- System.out.println("secondParsed: " +
secondParsed);
- */
-
- if (firstParsed > secondParsed) {
- return -1;
- } else if (secondParsed > firstParsed) {
- return 1;
- }
- } catch (NumberFormatException e) {
- // System.out.println("NFE");
- return 0;
+ if (i < 7) {
+ // major/minor/micro
+ if (part1 != null && part2 == null) {
+ return Integer.parseInt(part1) == 0 ? 0
: -1;
}
- } else if (firstHasField) {
- return -1;
- } else if (secondHasField) {
- return 1;
+ if (part1 == null && part2 != null) {
+ return Integer.parseInt(part2) == 0 ? 0
: 1;
+ }
+ } else {
+ // qualifier
+ if (part1 != null && part2 == null) {
+ return -1;
+ }
+ if (part1 == null && part2 != null) {
+ return 1;
+ }
}
+ int result = part1.compareTo(part2);
+ if (result != 0) {
+ return -result;
+ }
}
-
return 0;
}
Modified:
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
===================================================================
---
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
2012-10-10 19:47:52 UTC (rev 30646)
+++
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
2012-10-10 21:12:10 UTC (rev 30647)
@@ -22,21 +22,17 @@
// <0 = first is newer, >0 = first is older
assertTrue(webQuerier.compareVersions("3.0.0", "3.0.0") == 0);
- assertTrue(webQuerier.compareVersions("3.0.0-tag", "3.0.0") ==
0);
- assertTrue(webQuerier.compareVersions("3.0.0-tag1",
"3.0.0-tag2") == 0);
+ assertTrue(webQuerier.compareVersions("3.0.0.tag", "3.0.0") <
0);
+ assertTrue(webQuerier.compareVersions("3.0.0.tag1",
"3.0.0.tag2") > 0);
- assertTrue(webQuerier.compareVersions("3.0.0-tag1",
"3.0.1-tag2") > 0);
- assertTrue(webQuerier.compareVersions("3.0.1-tag1",
"3.0.0-tag2") < 0);
- assertTrue(webQuerier.compareVersions("3.0.1-tag1",
"3.1.0-tag2") > 0);
+ assertTrue(webQuerier.compareVersions("3.0.0.tag1",
"3.0.1.tag2") > 0);
+ assertTrue(webQuerier.compareVersions("3.0.1.tag1",
"3.0.0.tag2") < 0);
+ assertTrue(webQuerier.compareVersions("3.0.1.tag1",
"3.1.0.tag2") > 0);
- assertTrue(webQuerier.compareVersions("3.0", "3.0.0") > 0);
- assertTrue(webQuerier.compareVersions("3.0-tag", "3.0.0") > 0);
+ assertTrue(webQuerier.compareVersions("3.0", "3.0.0") == 0);
assertTrue(webQuerier.compareVersions("3.1", "3.0.0") < 0);
- assertTrue(webQuerier.compareVersions("3", "3.0.0") > 0);
- assertTrue(webQuerier.compareVersions("3.1", "") == 0);
- assertTrue(webQuerier.compareVersions("", "3.1") == 0);
- assertTrue(webQuerier.compareVersions("", "") == 0);
+ assertTrue(webQuerier.compareVersions("3", "3.0.0") == 0);
assertTrue(webQuerier.compareVersions("1.7",
"3.0.0.alpha9-SNAPSHOT") > 0);
}
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.