001 /*
002 @license.text@
003 */
004 package biz.hammurapi.util;
005
006 import java.util.StringTokenizer;
007
008 /**
009 * Represents 3-digit version
010 * @author Pavel Vlasov
011 * @version $Revision: 1.2 $
012 */
013 public final class Version implements Comparable {
014 private int major;
015 private int minor;
016 private int micro;
017
018 /**
019 * Create a new instance of a <code>Version</code> object with the
020 * specified version numbers.
021 *
022 * @param major Major version number.
023 * @param minor Minor version number.
024 * @param rev Micro version number.
025 */
026 public Version(int major, int minor, int micro) {
027 this.major = major;
028 this.minor = minor;
029 this.micro = micro;
030 }
031
032 public Version(String version) {
033 StringTokenizer st=new StringTokenizer(version, ".");
034 if (st.countTokens()==3) {
035 major=Integer.parseInt(st.nextToken());
036 minor=Integer.parseInt(st.nextToken());
037 micro=Integer.parseInt(st.nextToken());
038 } else {
039 throw new IllegalArgumentException("Invalid version format: "+version);
040 }
041 }
042
043 /**
044 *
045 * @param other
046 * @return
047 */
048 public boolean equals(Object o) {
049 if (o instanceof Version) {
050 Version v=(Version) o;
051 return v.major==major && v.minor==minor && v.micro==micro;
052 } else {
053 return super.equals(o);
054 }
055 }
056
057 /**
058 * Overload toString to report version correctly.
059 *
060 * @return the dot seperated version string
061 */
062 public String toString() {
063 return major + "." + minor + "." + micro;
064 }
065
066 public int compareTo(Object o) {
067 if (o instanceof Version) {
068 Version v=(Version) o;
069 if (v.major==major) {
070 if (v.minor==minor) {
071 return micro-v.micro;
072 } else {
073 return minor-v.minor;
074 }
075 } else {
076 return major-v.major;
077 }
078 } else {
079 return hashCode()-o.hashCode();
080 }
081 }
082
083 public int hashCode() {
084 return major ^ minor ^ micro;
085 }
086
087 public int getMajor() {
088 return major;
089 }
090
091 public int getMicro() {
092 return micro;
093 }
094
095 public int getMinor() {
096 return minor;
097 }
098 }