-
Notifications
You must be signed in to change notification settings - Fork 712
/
FitNesseVersion.java
77 lines (68 loc) · 2.34 KB
/
FitNesseVersion.java
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
// Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the GNU General Public License version 2 or later.
package fitnesse;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Represents a version of a fitnesse release. Versions have the following format: v20100103[suffix]
* I.e. the suffix is optional.
**/
public class FitNesseVersion {
private static final Logger LOG = Logger.getLogger(FitNesseVersion.class.getName());
private static final String UNKNOWN_VERSION = "vUnknown";
private final String version;
public FitNesseVersion() {
this(versionFromMetaInf());
}
public FitNesseVersion(String version) {
this.version = version;
}
private static String versionFromMetaInf() {
InputStream is = null;
try {
is = FitNesseVersion.class.getResourceAsStream("/META-INF/FitNesseVersion.txt");
if (is == null) {
return UNKNOWN_VERSION;
}
byte[] b = new byte[64];
int len = is.read(b);
return new String(b, 0, len, Charset.forName("ISO-8859-1"));
} catch (IOException e) {
LOG.log(Level.WARNING, "Unable to read FitNesse version", e);
return UNKNOWN_VERSION;
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
LOG.log(Level.SEVERE, "Unable to close FitNesse version file (should never happen)", e);
}
}
}
}
@Override
public String toString() {
return version;
}
static Long dateVersion(String fullTextVersion) {
try {
return Long.parseLong(fullTextVersion.substring(1, Math.min(9, fullTextVersion.length())));
} catch (Exception e) {
throw new IllegalArgumentException("Unable to extract date version from " + fullTextVersion, e);
}
}
/**
* Compare this instance's version against the specified one.
* Note: the suffixes are ignored when comparing versions
* @param requiredVersion minimum required version
* @return true if this version is not younger than the specified one, suffix excluded
**/
public boolean isAtLeast(String requiredVersion) {
long thisVersion = dateVersion(version);
long otherVersion = dateVersion(requiredVersion);
return thisVersion >= otherVersion;
}
}