package com.hundsun.ares.studio.core.model.util; import java.util.NoSuchElementException; import java.util.StringTokenizer; /** * @author gongyf * */ public class RevisionHistoryVersion implements Comparable<RevisionHistoryVersion> { private final int major; private final int minor; private final int micro; private final int qualifier; private static final String SEPARATOR = "."; public static final RevisionHistoryVersion emptyVersion = new RevisionHistoryVersion(0, 0, 0); public RevisionHistoryVersion(int major, int minor, int micro) { this(major, minor, micro, 0); } public RevisionHistoryVersion(int major, int minor, int micro, int qualifier) { this.major = major; this.minor = minor; this.micro = micro; this.qualifier = qualifier; } public RevisionHistoryVersion(String version) { int maj = 0; int min = 0; int mic = 0; int qual = 0; try { StringTokenizer st = new StringTokenizer(version, SEPARATOR, true); maj = Integer.parseInt(st.nextToken()); if (st.hasMoreTokens()) { st.nextToken(); // consume delimiter min = Integer.parseInt(st.nextToken()); if (st.hasMoreTokens()) { st.nextToken(); // consume delimiter mic = Integer.parseInt(st.nextToken()); if (st.hasMoreTokens()) { st.nextToken(); // consume delimiter qual = Integer.parseInt(st.nextToken()); if (st.hasMoreTokens()) { throw new IllegalArgumentException("invalid format"); //$NON-NLS-1$ } } } } } catch (NumberFormatException e) { // �ƺ�����Ҫ���� } catch (NoSuchElementException e) { throw new IllegalArgumentException("invalid format"); //$NON-NLS-1$ } major = maj; minor = min; micro = mic; qualifier = qual; } /** * @return the major */ public int getMajor() { return major; } /** * @return the micro */ public int getMicro() { return micro; } /** * @return the minor */ public int getMinor() { return minor; } /** * @return the qualifier */ public int getQualifier() { return qualifier; } public int hashCode() { return (major << 24) + (minor << 16) + (micro << 8) + qualifier; } public boolean equals(Object object) { if (object == this) { // quicktest return true; } if (!(object instanceof RevisionHistoryVersion)) { return false; } RevisionHistoryVersion other = (RevisionHistoryVersion) object; return (major == other.major) && (minor == other.minor) && (micro == other.micro) && qualifier == other.qualifier; } public int compareTo(RevisionHistoryVersion other) { if (other == this) { // quicktest return 0; } int result = major - other.major; if (result != 0) { return result; } result = minor - other.minor; if (result != 0) { return result; } result = micro - other.micro; if (result != 0) { return result; } return qualifier - other.qualifier; } public String toString() { StringBuffer result = new StringBuffer(); result.append(major); result.append(SEPARATOR); result.append(minor); result.append(SEPARATOR); result.append(micro); result.append(SEPARATOR); result.append(qualifier); return result.toString(); } }