blob: 47e74478ce6b0369b692c2db69a4f0e8a9717967 [file] [log] [blame]
Stuart McCulloch26e7a5a2011-10-17 10:31:43 +00001package aQute.libg.version;
2
3import java.util.regex.*;
4
5public class VersionRange {
6 Version high;
7 Version low;
8 char start = '[';
9 char end = ']';
10
11 static Pattern RANGE = Pattern.compile("(\\(|\\[)\\s*(" +
12 Version.VERSION_STRING + ")\\s*,\\s*(" +
13 Version.VERSION_STRING + ")\\s*(\\)|\\])");
14
15 public VersionRange(String string) {
16 string = string.trim();
17 Matcher m = RANGE.matcher(string);
18 if (m.matches()) {
19 start = m.group(1).charAt(0);
20 String v1 = m.group(2);
21 String v2 = m.group(10);
22 low = new Version(v1);
23 high = new Version(v2);
24 end = m.group(18).charAt(0);
25 if (low.compareTo(high) > 0)
26 throw new IllegalArgumentException(
27 "Low Range is higher than High Range: " + low + "-" +
28 high);
29
30 } else
31 high = low = new Version(string);
32 }
33
34 public boolean isRange() {
35 return high != low;
36 }
37
38 public boolean includeLow() {
39 return start == '[';
40 }
41
42 public boolean includeHigh() {
43 return end == ']';
44 }
45
46 public String toString() {
47 if (high == low)
48 return high.toString();
49
50 StringBuffer sb = new StringBuffer();
51 sb.append(start);
52 sb.append(low);
53 sb.append(',');
54 sb.append(high);
55 sb.append(end);
56 return sb.toString();
57 }
58
59 public Version getLow() {
60 return low;
61 }
62
63 public Version getHigh() {
64 return high;
65 }
66
67 public boolean includes(Version v) {
68 if ( !isRange() ) {
69 return low.compareTo(v) <=0;
70 }
71 if (includeLow()) {
72 if (v.compareTo(low) < 0)
73 return false;
74 } else if (v.compareTo(low) <= 0)
75 return false;
76
77 if (includeHigh()) {
78 if (v.compareTo(high) > 0)
79 return false;
80 } else if (v.compareTo(high) >= 0)
81 return false;
82
83 return true;
84 }
85}