/**
* Xtreme Media Player a cross-platform media player.
* Copyright (C) 2005-2010 Besmir Beqiri
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package xtrememp.update;
import static xtrememp.util.Utilities.tr;
/**
*
* @author Besmir Beqiri
*/
public class Version implements Comparable<Version> {
public enum VersionType {
DEV("Dev"),
BETA("Beta"),
BETA1("Beta 1"),
BETA2("Beta 2"),
RC("RC"),
RC1("RC 1"),
RC2("RC 2"),
FINAL("Final");
private String vtString;
VersionType(String vtString) {
this.vtString = vtString;
}
@Override
public String toString() {
return vtString;
}
}
/**
* Major version number.
*/
private int majorNumber;
/**
* Minor version number.
*/
private int minorNumber;
/**
* Micro version number.
*/
private int microNumber;
/**
* Version type.
*/
private VersionType versionType = VersionType.FINAL;
/**
* Codename.
*/
private String codename;
/**
* Release date.
*/
private String releaseDate;
/**
* Download URL string.
*/
private String downloadURL;
/**
* Empty constructor
*/
public Version() {
super();
}
/**
* Default constructor
*
* @param majorNumber
* @param minorNumber
* @param microNumber
* @param versionType
* @param date
* @param downloadURL
*/
public Version(int majorNumber, int minorNumber, int microNumber,
VersionType versionType, String codename, String date,
String downloadURL) {
super();
this.majorNumber = majorNumber;
this.minorNumber = minorNumber;
this.microNumber = microNumber;
this.versionType = versionType;
this.codename = codename;
this.releaseDate = date;
this.downloadURL = downloadURL;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Version) {
return compareTo((Version) obj) == 0;
}
return false;
}
@Override
public int hashCode() {
return toString().hashCode();
}
@Override
public int compareTo(Version version) {
if (version == null) {
throw new IllegalArgumentException();
}
if (majorNumber > version.getMajorNumber()) {
return 1;
} else if (majorNumber < version.getMajorNumber()) {
return -1;
} else if (minorNumber > version.getMinorNumber()) {
return 1;
} else if (minorNumber < version.getMinorNumber()) {
return -1;
} else if (microNumber > version.getMicroNumber()) {
return 1;
} else if (microNumber < version.getMicroNumber()) {
return -1;
} else {
return this.versionType.compareTo(version.getVersionType());
}
}
/**
* Gets major number.
*
* @return the major number
*/
public int getMajorNumber() {
return majorNumber;
}
/**
* Gets minor number.
*
* @return the minor number
*/
public int getMinorNumber() {
return minorNumber;
}
/**
* Gets micro number.
*
* @return the micro number
*/
public int getMicroNumber() {
return microNumber;
}
/**
* Returns version type
*
* @return VersionType
*/
public VersionType getVersionType() {
return versionType;
}
/**
* Gets codename.
*
* @return the codename
*/
public String getCodename() {
return codename;
}
/**
* Gets release date.
*
* @return the release date
*/
public String getReleaseDate() {
return releaseDate;
}
/**
* Gets download URL.
*
* @return the download URL
*/
public String getDownloadURL() {
return downloadURL;
}
/**
* Returns version in string format.
*
* @return the version in string format
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(majorNumber);
sb.append(".");
sb.append(minorNumber);
sb.append(".");
sb.append(microNumber);
if (versionType != VersionType.FINAL) {
sb.append(" ");
sb.append(versionType);
}
return sb.toString();
}
/**
* Sets major number.
*
* @param majorNumber the major number
*/
protected void setMajorNumber(int majorNumber) {
this.majorNumber = majorNumber;
}
/**
* Sets minor number.
*
* @param minorNumber the minor number
*/
protected void setMinorNumber(int minorNumber) {
this.minorNumber = minorNumber;
}
/**
* Sets micro number.
*
* @param microNumber the micro number
*/
protected void setMicroNumber(int microNumber) {
this.microNumber = microNumber;
}
/**
* Sets the version type value.
*
* @param versionType the version type
*/
protected void setVersionType(VersionType versionType) {
this.versionType = versionType;
}
/**
* Sets release date.
*
* @param codename the codename
*/
protected void setCodename(String codename) {
this.codename = codename;
}
/**
* Sets release date.
*
* @param date the release date
*/
protected void setReleaseDate(String date) {
this.releaseDate = date;
}
/**
* Sets download URL.
*
* @param downloadURL the download URL
*/
protected void setDownloadURL(String downloadURL) {
this.downloadURL = downloadURL;
}
public static Version getCurrentVersion() {
int majorNumber = Integer.parseInt(tr("Application.version.majorNumber"));
int minorNumber = Integer.parseInt(tr("Application.version.minorNumber"));
int microNumber = Integer.parseInt(tr("Application.version.microNumber"));
VersionType versionType = VersionType.DEV;
String codename = tr("Application.version.codename");
String releaseDate = tr("Application.version.releaseDate");
String downloadURL = tr("Application.homepage");
return new Version(majorNumber, minorNumber, microNumber, versionType,
codename, releaseDate, downloadURL);
}
}