001: /* Copyright 2002 The JA-SIG Collaborative. All rights reserved.
002: * See license distributed with this file and
003: * available online at http://www.uportal.org/license.html
004: */
005:
006: package org.jasig.portal.tools.versioning;
007:
008: /**
009: * Represents the version of a specific unit of code that is currently installed
010: * in the portal. The unit of code is represented by its functional name. For
011: * the portal codebase this functional name uses the value of the IPermission
012: * interface, PORTAL_FRAMEWORK variable which currently is "UP_FRAMEWORK".
013: *
014: * The version of a specific piece of code is represented by three integers.
015: * In most significant order these are Major, Minor, and Micro.
016: *
017: * @author Mark Boyd {@link <a href="mailto:mark.boyd@engineer.com">mark.boyd@engineer.com</a>}
018: * @version $Revision: 36757 $
019: */
020: public class Version {
021: private String fname = null;
022: private String description = null;
023: private int major = 0;
024: private int minor = 0;
025: private int micro = 0;
026:
027: /**
028: * Only the versioning package classes are expected to create these
029: * objects.
030: *
031: * @param fname the functional name of the code being represented
032: * @param major the major version of this code
033: * @param minor the minor version of this code
034: * @param micro the micro version of this code
035: */
036: public Version(String fname, String description, int major,
037: int minor, int micro) {
038: this .fname = fname;
039: this .description = description;
040: this .major = major;
041: this .minor = minor;
042: this .micro = micro;
043: }
044:
045: /**
046: * Returns the functional name of the unit of code for which this object
047: * represents the version of this code that is currently installed in the
048: * portal.
049: *
050: * @return String
051: */
052: public String getFname() {
053: return fname;
054: }
055:
056: /**
057: * Returns the description of the unit of code for which this object
058: * represents the version of this code that is currently installed in the
059: * portal.
060: *
061: * @return String
062: */
063: public String getDescription() {
064: return description;
065: }
066:
067: /**
068: * The major version of the code represented by this object.
069: *
070: * @return int
071: */
072: public int getMajor() {
073: return major;
074: }
075:
076: /**
077: * The minor version of the code represented by this object.
078: *
079: * @return int
080: */
081: public int getMinor() {
082: return minor;
083: }
084:
085: /**
086: * The micro version of the code represented by this object.
087: *
088: * @return int
089: */
090: public int getMicro() {
091: return micro;
092: }
093:
094: /**
095: * Returns a string representation of the version. The format is:
096: * <functionalName>: <major>.<minor>.<micro>
097: *
098: * @return java.lang.String
099: *
100: */
101: public String toString() {
102: return this .getFname() + ": " + this .getMajor() + "."
103: + this .getMinor() + "." + this .getMicro() + " ["
104: + this .getDescription() + "]";
105: }
106:
107: /**
108: * Returns true of the passed in object is a Version object and the
109: * functional names of the objects are equal and the version numbers
110: * within this class are equal to those of the passed in version object.
111: *
112: * @param obj a Version object to be compared to this one
113: * @return boolean true if the above conditions are met
114: */
115: public boolean equals(Object obj) {
116: if (!(obj instanceof Version))
117: return false;
118:
119: Version v = (Version) obj;
120:
121: return fname.equals(v.getFname()) && equalTo(v);
122: }
123:
124: /**
125: * Returns true of the version represented by this class is equal to
126: * that represented by the passed in version object. The functional name
127: * is not queried for this evaluation. Only version numbers are compared.
128: *
129: * @param v the version to be compared with this version
130: * @return boolean true if this version is equal to the passed in version
131: */
132: public boolean equalTo(Version v) {
133: return major == v.getMajor() && minor == v.getMinor()
134: && micro == v.getMicro();
135: }
136:
137: /**
138: * Returns true of the version represented by this class is less than
139: * that represented by the passed in version object. The functional name
140: * is not queried for this evaluation. Only version numbers are compared.
141: *
142: * @param v the version to be compared with this version
143: * @return boolean true if this version is less than to the passed in version
144: */
145: public boolean lessThan(Version v) {
146: return major < v.getMajor()
147: || (major == v.getMajor() && (minor < v.getMinor()))
148: || (major == v.getMajor() && minor == v.getMinor() && micro < v
149: .getMicro());
150: }
151:
152: /**
153: * Returns true of the version represented by this class is greater than
154: * that represented by the passed in version object. The functional name
155: * is not queried for this evaluation. Only version numbers are compared.
156: *
157: * @param v the version to be compared with this version
158: * @return boolean true if this version is greater than to the passed in version
159: */
160: public boolean greaterThan(Version v) {
161: return major > v.getMajor()
162: || (major == v.getMajor() && (minor > v.getMinor()))
163: || (major == v.getMajor() && minor == v.getMinor() && micro > v
164: .getMicro());
165: }
166:
167: /**
168: * Returns a String of the form "2.5.4".
169: * @return a String representing the dotted triple version
170: */
171: public String dottedTriple() {
172: StringBuffer sb = new StringBuffer();
173: sb.append(this .major);
174: sb.append(".");
175: sb.append(this .minor);
176: sb.append(".");
177: sb.append(this.micro);
178: return sb.toString();
179:
180: }
181: }
|