001: package org.jgroups;
002:
003: /**
004: * We're using the scheme described at http://www.jboss.com/index.html?module=bb&op=viewtopic&t=77231
005: * for major, minor and micro version numbers. We have 5 bits for major and minor version numbers each and
006: * 6 bits for the micro version.
007: * This gives:
008: * X = 0-31 for major versions
009: * Y = 0-31 for minor versions
010: * Z = 0-63 for micro versions
011: *
012: * @author Bela Ban
013: * @version $Id: Version.java,v 1.42.2.5 2007/04/27 07:27:16 belaban Exp $
014: * Holds version information for JGroups.
015: */
016: public class Version {
017: public static final short major = 2;
018: public static final short minor = 4;
019: public static final short micro = 1;
020: public static final String description = "2.4.1 SP-3";
021:
022: public static final short version = encode(major, minor, micro);
023: public static final String string_version = print(version);
024: public static final String cvs = "$Id: Version.java,v 1.42.2.5 2007/04/27 07:27:16 belaban Exp $";
025:
026: private static final int MAJOR_SHIFT = 11;
027: private static final int MINOR_SHIFT = 6;
028: private static final int MAJOR_MASK = 0x00f800; // 1111100000000000 bit mask
029: private static final int MINOR_MASK = 0x0007c0; // 11111000000 bit mask
030: private static final int MICRO_MASK = 0x00003f; // 111111 bit mask
031:
032: /**
033: * Prints the value of the description and cvs fields to System.out.
034: * @param args
035: */
036: public static void main(String[] args) {
037: System.out.println("\nVersion: \t" + description);
038: System.out.println("CVS: \t\t" + cvs);
039: System.out
040: .println("History: \t(see doc/history.txt for details)\n");
041: }
042:
043: /**
044: * Returns the catenation of the description and cvs fields.
045: * @return String with description
046: */
047: public static String printDescription() {
048: return "JGroups " + description + " [" + cvs + "]";
049: }
050:
051: /**
052: * Returns the version field as a String.
053: * @return String with version
054: */
055: public static String printVersion() {
056: return string_version;
057: }
058:
059: /**
060: * Compares the specified version number against the current version number.
061: * @param v short
062: * @return Result of == operator.
063: */
064: public static boolean isSame(short v) {
065: return version == v;
066: }
067:
068: /** Method copied from http://www.jboss.com/index.html?module=bb&op=viewtopic&t=77231 */
069: public static short encode(int major, int minor, int micro) {
070: return (short) ((major << MAJOR_SHIFT) + (minor << MINOR_SHIFT) + micro);
071: }
072:
073: /** Method copied from http://www.jboss.com/index.html?module=bb&op=viewtopic&t=77231 */
074: public static String print(short version) {
075: int major = (version & MAJOR_MASK) >> MAJOR_SHIFT;
076: int minor = (version & MINOR_MASK) >> MINOR_SHIFT;
077: int micro = (version & MICRO_MASK);
078: return major + "." + minor + "." + micro;
079: }
080:
081: public static short[] decode(short version) {
082: short major = (short) ((version & MAJOR_MASK) >> MAJOR_SHIFT);
083: short minor = (short) ((version & MINOR_MASK) >> MINOR_SHIFT);
084: short micro = (short) (version & MICRO_MASK);
085: return new short[] { major, minor, micro };
086: }
087:
088: /**
089: * Checks whether ver is binary compatible with the current version. The rule for binary compatibility is that
090: * the major and minor versions have to match, whereas micro versions can differ.
091: * @param ver
092: * @return
093: */
094: public static boolean isBinaryCompatible(short ver) {
095: if (ver == version)
096: return true;
097: short[] tmp = decode(ver);
098: short tmp_major = tmp[0], tmp_minor = tmp[1];
099: return major == tmp_major && minor == tmp_minor;
100: }
101:
102: public static boolean isBinaryCompatible(short ver1, short ver2) {
103: if (ver1 == ver2)
104: return true;
105: short[] tmp = decode(ver1);
106: short tmp_major = tmp[0], tmp_minor = tmp[1];
107: tmp = decode(ver2);
108: short tmp_major2 = tmp[0], tmp_minor2 = tmp[1];
109: return tmp_major == tmp_major2 && tmp_minor == tmp_minor2;
110: }
111:
112: }
|