VersionComparator.java
2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package it.softecspa.fileproxy.util;
import it.softecspa.kahuna.lang.XString;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
public class VersionComparator {
private Logger log = Logger.getLogger(getClass());
private Integer normalized;
public VersionComparator(String version) {
normalized = normalize(version);
if (normalized==null) throw new NullPointerException();
}
private Integer normalize(String appVersion) {
if (XString.isBlankNullTrim(appVersion)) return null;
String v = null;
try {
Pattern pattern = Pattern.compile("\\d+[\\.\\d+]+");
Matcher matcher = pattern.matcher(appVersion);
if (matcher.find()) {
v = matcher.group(0);
if (log.isDebugEnabled()) log.debug("Match pattern find record: '"+v+"'");
}
} catch (Exception e) {
log.warn("Error match patter in check version");
v = appVersion;
}
if (v==null) return null;
return build(v);
}
private Integer build(String v) {
String[] s = v.split("\\.");
if (s.length==0) return null;
int device_version=0;
try {
if (s.length==3) {
device_version = (((Integer.parseInt(s[0])*1000) + Integer.parseInt(s[1]))*1000) + Integer.parseInt(s[2]);
} else if (s.length==2) {
device_version = (((Integer.parseInt(s[0])*1000) + Integer.parseInt(s[1]))*1000);
} else if (s.length==1) {
device_version = ((Integer.parseInt(s[0])*1000)*1000);
} else if (s.length>3) {
device_version = (((Integer.parseInt(s[0])*1000) + Integer.parseInt(s[1]))*1000) + Integer.parseInt(s[2]);
}
} catch (NumberFormatException e) {
log.error("NumberFormatException splitting version number: '"+v+"'");
return null;
}
return device_version;
}
private Integer build(int m, int s, int r) {
return new Integer((((m*1000) + s)*1000) + r);
}
public boolean greaterThan(int m, int s, int r) {
return (normalized>build(m,s,r));
}
public boolean greaterThan(String version) {
if (version==null) throw new NullPointerException();
return (normalized>normalize(version));
}
public boolean greaterThan(VersionComparator version) {
return (normalized>version.normalized);
}
public boolean greaterThanOrEqual(int m, int s, int r) {
return (normalized>=build(m,s,r));
}
public boolean greaterThanOrEqual(String version) {
if (version==null) throw new NullPointerException();
return (normalized>=normalize(version));
}
public boolean greaterThanOrEqual(VersionComparator version) {
return (normalized>=version.normalized);
}
}