/*
* #%L
* org.gitools.resource
* %%
* Copyright (C) 2013 - 2014 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* 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 3 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, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.api.resource;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlTransient;
@XmlAccessorType(XmlAccessType.FIELD)
public class SemanticVersion {
@XmlTransient
public static final String OLD_VERSION = "oldVersion";
@XmlTransient
boolean initialized = false;
@XmlAttribute
private String semantic;
@XmlTransient
private int major;
@XmlTransient
private int minor;
@XmlTransient
private int bug;
@XmlTransient
private String special = "";
public SemanticVersion() {
}
public SemanticVersion(String version) {
semantic = version;
init();
}
private void init() {
String version = semantic;
initialized = true;
if (version.equals(OLD_VERSION)) {
return;
}
//SNAPSHOT or RC
if (version.contains("-")) {
int index = version.indexOf("-");
special = version.substring(index + 1);
version = version.substring(0, index);
}
String[] parts = version.split("\\.");
major = Integer.valueOf(parts[0]);
minor = Integer.valueOf(parts[1]);
bug = Integer.valueOf(parts[2]);
}
public int getMajor() {
return major;
}
public int getMinor() {
return minor;
}
public int getBug() {
return bug;
}
public boolean isNewerThan(SemanticVersion other) {
if (this.semantic.equals(OLD_VERSION)) {
return false;
}
if (!initialized) {
init();
}
if (this.major > other.getMajor()) {
// this is a newer major release
return true;
} else if (this.major < other.getMajor()) {
//other is newer
return false;
} else if (this.minor > other.getMinor()) {
//this is newer minor release
return true;
} else if (this.minor < other.getMinor()) {
//other is newer minor release
return false;
} else if (this.bug > other.getBug()) {
//newer bug release
return true;
} else if (this.bug < other.getBug()) {
//other is newer bug release
return false;
} else if (this.special.equals("") && !other.getSpecial().equals("")) {
//user using development version - official release available
return true;
}
return false;
}
@Override
public String toString() {
return semantic;
}
public String getSpecial() {
return special;
}
}