/**
*
*/
package vnet.sms.gateway.server.framework.spi;
import java.io.Serializable;
/**
* @author obergner
*
*/
public final class Version implements Serializable, Comparable<Version> {
/**
*
*/
private static final long serialVersionUID = 5022321534158546222L;
private final int majorVersion;
private final int minorVersion;
private final int incrementalVersion;
private final String qualifier;
private final String buildNumber;
/**
* @param majorVersion
* @param minorVersion
* @param incrementalVersion
* @param qualifier
* @param buildNumber
*/
public Version(final int majorVersion, final int minorVersion,
final int incrementalVersion, final String qualifier,
final String buildNumber) {
this.majorVersion = majorVersion;
this.minorVersion = minorVersion;
this.incrementalVersion = incrementalVersion;
this.qualifier = qualifier;
this.buildNumber = buildNumber;
}
/**
* @return the majorVersion
*/
public final int getMajorVersion() {
return this.majorVersion;
}
/**
* @return the minorVersion
*/
public final int getMinorVersion() {
return this.minorVersion;
}
/**
* @return the incrementalVersion
*/
public final int getIncrementalVersion() {
return this.incrementalVersion;
}
/**
* @return the qualifier
*/
public final String getQualifier() {
return this.qualifier;
}
/**
* @return the buildNumber
*/
public final String getBuildNumber() {
return this.buildNumber;
}
/**
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(final Version other) {
if (this.majorVersion < other.majorVersion) {
return -1;
}
if (this.majorVersion > other.majorVersion) {
return 1;
}
if (this.minorVersion < other.minorVersion) {
return -1;
}
if (this.minorVersion > other.minorVersion) {
return 1;
}
if (this.incrementalVersion < other.incrementalVersion) {
return -1;
}
if (this.incrementalVersion > other.incrementalVersion) {
return 1;
}
return 0;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime
* result
+ ((this.buildNumber == null) ? 0 : this.buildNumber.hashCode());
result = prime * result + this.incrementalVersion;
result = prime * result + this.majorVersion;
result = prime * result + this.minorVersion;
result = prime * result
+ ((this.qualifier == null) ? 0 : this.qualifier.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Version other = (Version) obj;
if (this.buildNumber != other.buildNumber) {
return false;
}
if (this.incrementalVersion != other.incrementalVersion) {
return false;
}
if (this.majorVersion != other.majorVersion) {
return false;
}
if (this.minorVersion != other.minorVersion) {
return false;
}
if (this.qualifier == null) {
if (other.qualifier != null) {
return false;
}
} else if (!this.qualifier.equals(other.qualifier)) {
return false;
}
return true;
}
@Override
public String toString() {
return this.majorVersion + "." + this.minorVersion + "."
+ this.incrementalVersion
+ (this.qualifier != null ? "-" + this.qualifier : "")
+ " (build " + this.buildNumber + ")";
}
}