package japicmp.versioning;
import com.google.common.base.Optional;
public class SemanticVersion {
private final int major;
private final int minor;
private final int patch;
public enum ChangeType {
MAJOR(3),
MINOR(2),
PATCH(1),
UNCHANGED(0);
private final int rank;
ChangeType(int rank) {
this.rank = rank;
}
public int getRank() {
return rank;
}
}
public SemanticVersion(int major, int minor, int patch) {
this.major = major;
this.minor = minor;
this.patch = patch;
}
public int getMajor() {
return major;
}
public int getMinor() {
return minor;
}
public int getPatch() {
return patch;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SemanticVersion that = (SemanticVersion) o;
return major == that.major && minor == that.minor && patch == that.patch;
}
public Optional<ChangeType> computeChangeType(SemanticVersion version) {
if (this.major != version.major) {
return Optional.of(ChangeType.MAJOR);
}
if (this.minor != version.minor) {
return Optional.of(ChangeType.MINOR);
}
if (this.patch != version.patch) {
return Optional.of(ChangeType.PATCH);
}
return Optional.of(ChangeType.UNCHANGED);
}
@Override
public int hashCode() {
int result = major;
result = 31 * result + minor;
result = 31 * result + patch;
return result;
}
@Override
public String toString() {
return major + "." + minor + "." + patch;
}
}