101 lines
2.7 KiB
Java
101 lines
2.7 KiB
Java
package com.company;
|
|
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
public class Version {
|
|
public enum result{
|
|
UNKNOWN,
|
|
SUPPORTED_LATEST,
|
|
SUPPORTED_OLD,
|
|
DEVELOPMENT,
|
|
UNSUPPORTED_OLD,
|
|
UNSUPPORTED_NEW
|
|
}
|
|
|
|
|
|
public static result check(String min, String last, String value) {
|
|
|
|
final Pattern pattern_stable_release = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)$");
|
|
final Pattern pattern_dev_release = Pattern.compile("^(\\d).(\\d+).(\\d+)(\\D)(.+)");
|
|
Matcher m ;
|
|
|
|
m = pattern_stable_release.matcher(value);
|
|
if (m.find()) {
|
|
|
|
switch (correlate(min, last, m.group())){
|
|
case 0:
|
|
return result.UNSUPPORTED_OLD;
|
|
case 1:
|
|
return result.SUPPORTED_OLD;
|
|
case 2:
|
|
return result.SUPPORTED_LATEST;
|
|
default:
|
|
return result.UNSUPPORTED_NEW;
|
|
}
|
|
|
|
}
|
|
m = pattern_dev_release.matcher(value);
|
|
if (m.find()) {
|
|
|
|
m = Pattern.compile("^(\\d)\\.(\\d+)\\.(\\d+)").matcher(value);
|
|
m.find();
|
|
|
|
if (correlate(min, last, m.group())>0) {
|
|
return result.DEVELOPMENT;
|
|
} else {
|
|
return result.UNSUPPORTED_OLD;
|
|
}
|
|
|
|
}
|
|
|
|
return result.UNKNOWN;
|
|
|
|
}
|
|
|
|
//helper
|
|
// 0 to less
|
|
// 1 in spectrum
|
|
// 2 at the top
|
|
// 3 above
|
|
private static int correlate(String min, String last, String value){
|
|
//init
|
|
int i_min = 0, i_last = 0, i_value = 0;
|
|
|
|
while (value.indexOf(".")>0) {
|
|
|
|
//prepare for checks
|
|
if (min.indexOf(".") >= 0) i_min = Integer.valueOf(min.substring(0,min.indexOf(".")));
|
|
if (last.indexOf(".") >= 0) i_last = Integer.valueOf(last.substring(0,last.indexOf(".")));
|
|
if (value.indexOf(".") >= 0) i_value = Integer.valueOf(value.substring(0,value.indexOf(".")));
|
|
|
|
|
|
if ( i_min != i_last ) {
|
|
//check
|
|
if (i_value < i_min) return 0;
|
|
if (i_value > i_last) return 3;
|
|
}
|
|
|
|
//prepare for next checks
|
|
if (min.indexOf(".") < 0) return 0;
|
|
|
|
min = min.substring(min.indexOf(".")+1);
|
|
last = last.substring(last.indexOf(".")+1);
|
|
value = value.substring(value.indexOf(".")+1);
|
|
|
|
}
|
|
|
|
i_min = Integer.valueOf(min);
|
|
i_last = Integer.valueOf(last);
|
|
i_value = Integer.valueOf(value);
|
|
|
|
if (i_value < i_min) return 0;
|
|
if (i_min < i_value && i_value < i_last) return 1;
|
|
if (i_value == i_last) return 2;
|
|
if (i_value > i_last) return 3;
|
|
|
|
|
|
return 0;
|
|
}
|
|
}
|