package com.constellio.app.services.migrations;
import java.util.Comparator;
public class VersionsComparator implements Comparator<String> {
public static boolean isFirstVersionBeforeOrEqualToSecond(String firstVersion, String secondVersion) {
return new VersionsComparator().compare(firstVersion, secondVersion) != 1;
}
public static boolean isFirstVersionBeforeSecond(String firstVersion, String secondVersion) {
return new VersionsComparator().compare(firstVersion, secondVersion) == -1;
}
@Override
public int compare(String versionOne, String versionTwo) {
String[] version1VersionAndSubVersion = versionOne.split("-");
String[] version2VersionAndSubVersion = versionTwo.split("-");
String[] versionsOneWithoutSubVersion = split(version1VersionAndSubVersion[0]);
String[] versionsTwoWithoutSubVersion = split(version2VersionAndSubVersion[0]);
for (int i = 0; i < Math.min(versionsOneWithoutSubVersion.length, versionsTwoWithoutSubVersion.length); i++) {
if (Integer.parseInt(versionsOneWithoutSubVersion[i]) > Integer.parseInt(versionsTwoWithoutSubVersion[i])) {
return 1;
} else if (Integer.parseInt(versionsOneWithoutSubVersion[i]) < Integer.parseInt(versionsTwoWithoutSubVersion[i])) {
return -1;
}
}
if (versionsOneWithoutSubVersion.length > versionsTwoWithoutSubVersion.length) {
return 1;
} else if (versionOne.length() < versionTwo.length()) {
return -1;
}
String subVersion1 = "", subVersion2 = "";
if (version1VersionAndSubVersion.length > 1) {
subVersion1 = version1VersionAndSubVersion[1];
}
if (version2VersionAndSubVersion.length > 1) {
subVersion2 = version2VersionAndSubVersion[1];
if (subVersion1.isEmpty()) {
return -1;
} else {
return Integer.valueOf(subVersion1).compareTo(Integer.valueOf(subVersion2));
}
} else {
if (subVersion1.isEmpty()) {
return 0;
} else {
return 1;
}
}
}
private String[] split(String version) {
int index = 0;
String[] normalizedVersion = new String[] { "0", "0", "0", "0", "0" };
for (String part : version.split("\\.")) {
normalizedVersion[index++] = part;
}
return normalizedVersion;
}
}