X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FVersion.java;fp=src%2Fbe%2Fnikiroo%2Futils%2FVersion.java;h=550c5e9dfc156f2e11b30b9d461955ee3d6e6ee3;hb=32ae20790403c7bce40bf278db8ca0258623945c;hp=0000000000000000000000000000000000000000;hpb=16d593780fa5a4c39cc36b29382da610eae951da;p=fanfix.git diff --git a/src/be/nikiroo/utils/Version.java b/src/be/nikiroo/utils/Version.java new file mode 100644 index 0000000..550c5e9 --- /dev/null +++ b/src/be/nikiroo/utils/Version.java @@ -0,0 +1,140 @@ +package be.nikiroo.utils; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * This class describe a program {@link Version}. + * + * @author niki + */ +public class Version { + private String version; + private int major; + private int minor; + private int patch; + + /** + * Create a new {@link Version} with the given values. + * + * @param major + * the major version + * @param minor + * the minor version + * @param patch + * the patch version + */ + public Version(int major, int minor, int patch) { + this.major = major; + this.minor = minor; + this.patch = patch; + this.version = String.format("%d.%d.%d", major, minor, patch); + } + + /** + * Create a new {@link Version} with the given value, which must be in the + * form MAJOR.MINOR.PATCH. + * + * @param version + * the version (MAJOR.MINOR.PATCH) + */ + public Version(String version) { + this.version = version; + try { + String[] tab = version.split("\\."); + this.major = Integer.parseInt(tab[0]); + this.minor = Integer.parseInt(tab[1]); + this.patch = Integer.parseInt(tab[2]); + } catch (Exception e) { + this.major = 0; + this.minor = 0; + this.patch = 0; + } + } + + /** + * The 'major' version. + *

+ * This version should only change when API-incompatible changes are made to + * the program. + * + * @return the major version + */ + public int getMajor() { + return major; + } + + /** + * The 'minor' version. + *

+ * This version should only change when new, backwards-compatible + * functionality has been added to the program. + * + * @return the minor version + */ + public int getMinor() { + return minor; + } + + /** + * The 'patch' version. + *

+ * This version should change when backwards-compatible bugfixes have been + * added to the program. + * + * @return the patch version + */ + public int getPatch() { + return patch; + } + + /** + * Check if this {@link Version} is "empty" (i.e., the version was not + * parse-able or not given). + *

+ * An empty {@link Version} is always 0.0.0. + * + * @return TRUS if it is empty + */ + public boolean isEmpty() { + return major == 0 && minor == 0 && patch == 0; + } + + /** + * Return the version of the running program if it follows the VERSION + * convention (i.e., if it has a file called VERSION containing the version + * as a {@link String} in its binary root, and if this {@link String} + * follows the Major/Minor/Patch convention). + *

+ * If it does not, return an empty {@link Version} object. + * + * @return the {@link Version} of the program, or an empty {@link Version} + * (does not return NULL) + */ + public static String getCurrentVersion() { + String version = null; + + InputStream in = IOUtils.openResource("VERSION"); + if (in != null) { + try { + ByteArrayOutputStream ba = new ByteArrayOutputStream(); + IOUtils.write(in, ba); + in.close(); + + version = ba.toString("UTF-8").trim(); + } catch (IOException e) { + } + } + + return version; + } + + /** + * Return a user-readable form of this {@link Version}. + */ + @Override + public String toString() { + return version == null ? "[unknown]" : version; + } +}