/* * RapidMiner * * Copyright (C) 2001-2008 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.gui.tools; /** * Contains information about the different parts of a version number. * * @author Ingo Mierswa * @version $Id: VersionNumber.java,v 1.6 2008/05/09 19:22:59 ingomierswa Exp $ */ public class VersionNumber implements Comparable<VersionNumber> { private int majorNumber; private int minorNumber; private int patchLevel; private boolean beta; private int betaNumber; public VersionNumber(String versionString) { String version = versionString.toLowerCase().trim(); int betaIndex = version.indexOf("beta"); if (betaIndex >= 0) { // beta String[] numbers = version.substring(0, betaIndex).split("\\."); if (numbers.length > 0) majorNumber = Integer.parseInt(numbers[0]); if (numbers.length > 1) minorNumber = Integer.parseInt(numbers[1]); if (numbers.length > 2) patchLevel = Integer.parseInt(numbers[2]); beta = true; String betaNumberString = version.substring(betaIndex + "beta".length()); if (betaNumberString.length() > 0) { betaNumber = Integer.parseInt(betaNumberString); } } else { // no beta String[] numbers = version.split("\\."); if (numbers.length > 0) majorNumber = Integer.parseInt(numbers[0]); if (numbers.length > 1) minorNumber = Integer.parseInt(numbers[1]); if (numbers.length > 2) patchLevel = Integer.parseInt(numbers[2]); } } public VersionNumber(int majorNumber, int minorNumber, int patchLevel, boolean beta, int betaNumber) { this.majorNumber = majorNumber; this.minorNumber = minorNumber; this.patchLevel = patchLevel; this.beta = beta; this.betaNumber = betaNumber; } public boolean equals(Object o) { if (!(o instanceof VersionNumber)) return false; VersionNumber other = (VersionNumber)o; return this.majorNumber == other.majorNumber && this.minorNumber == other.minorNumber && this.patchLevel == other.patchLevel && this.beta == other.beta && this.betaNumber == other.betaNumber; } public int hashCode() { return Double.valueOf(this.majorNumber).hashCode() ^ Double.valueOf(this.minorNumber).hashCode() ^ Double.valueOf(this.patchLevel).hashCode() ^ Boolean.valueOf(beta).hashCode() ^ Double.valueOf(this.betaNumber).hashCode(); } public int compareTo(VersionNumber o) { int index = Double.compare(this.majorNumber, o.majorNumber); if (index != 0) { return index; } else { index = Double.compare(this.minorNumber, o.minorNumber); if (index != 0) { return index; } else { index = Double.compare(this.patchLevel, o.patchLevel); if (index != 0) { return index; } else { if (this.beta && !o.beta) { return -1; } else if (!this.beta && o.beta) { return 1; } else if (!this.beta && !o.beta) { return 0; } else { return Double.compare(this.betaNumber, o.betaNumber); } } } } } public String toString() { return majorNumber + "." + minorNumber + "." + patchLevel + (beta ? ("beta" + (betaNumber >= 2 ? betaNumber + "" : "")) : ""); } }