package org.ovirt.engine.core.compat; import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; @XmlSeeAlso({ Version.class, RpmVersion.class }) @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "version") public class Version implements Comparable<Version>, Serializable { private static final long serialVersionUID = -3938214651005908651L; private int major; private int minor; private int build; private int revision; public Version(String value) { this(); setValue(value); } public Version() { major = minor = build = revision = -1; } public Version(int major, int minor) { this.major = major; this.minor = minor; build = revision = -1; } public Version(int major2, int minor2, int build2) { this.major = major2; this.minor = minor2; this.build = build2; this.revision = -1; } public Version(int major2, int minor2, int build2, Integer revision2) { this.major = major2; this.minor = minor2; this.build = build2; this.revision = revision2; } @XmlElement(name = "value") public String getValue() { String val = ""; if (this.major > -1) val += this.major; if (this.minor > -1) val += (val != "" ? "." : "") + this.minor; if (this.build > -1) val += (val != "" ? "." : "") + this.build; if (this.revision > -1) val += (val != "" ? "." : "") + this.revision; return val; } public void setValue(String value) { if (value == null || value.isEmpty()) { major = minor = build = revision = -1; } else { String[] partialVersions = value.split("\\."); switch (partialVersions.length) { case (4): revision = Integer.parseInt(partialVersions[3]); case (3): build = Integer.parseInt(partialVersions[2]); case (2): minor = Integer.parseInt(partialVersions[1]); case (1): major = Integer.parseInt(partialVersions[0]); } } } public String toString(int i) { StringBuilder sb = new StringBuilder(); switch (i) { case (4): sb.append(".").append(revision); case (3): sb.insert(0, build).insert(0, "."); case (2): sb.insert(0, minor).insert(0, "."); case (1): sb.insert(0, major); } return sb.toString(); } @Override public String toString() { return this.getValue(); } @Override public int compareTo(Version other) { if (other == null) return 5; if (this == other) return 0; int result = major - other.major; if (result == 0) { result = minor - other.minor; if (result == 0) { result = build - other.build; if (result == 0) { result = revision - other.revision; } } } return result; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + major; result = prime * result + minor; result = prime * result + revision; result = prime * result + build; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Version other = (Version) obj; if (major == other.major && minor == other.minor && revision == other.revision && build == other.build) { return true; } return false; } public static boolean OpEquality(Version v1, Version v2) { if (v1 == null) return (v2 == null) ? true : false; else return v1.equals(v2); } public static boolean OpInequality(Version v1, Version v2) { return !OpEquality(v1, v2); } public int getMajor() { return this.major; } public int getMinor() { return this.minor; } public int getBuild() { return this.build; } public int getRevision() { return this.revision; } }