package org.freehep.util;
import java.util.Comparator;
/**
*
* @author Tony Johnson
* @version $Id: VersionComparator.java,v 1.3 2008-05-04 12:22:38 murkle Exp $
*/
public class VersionComparator implements Comparator {
private static String[] special = { "alpha", "beta", "rc" };
private static String pattern = "\\.+";
/**
* Compares two version numbers of the form 1.2.3.4
*
* @return >0 if v1>v2, <0 if v1<v2 or 0 if v1=v2
*/
public int versionNumberCompare(String v1, String v2)
throws NumberFormatException {
String[] t1 = replaceSpecials(v1).split(pattern);
String[] t2 = replaceSpecials(v2).split(pattern);
int maxLength = Math.max(t1.length, t2.length);
int i = 0;
for (; i < maxLength; i++) {
int i1 = i < t1.length ? Integer.parseInt(t1[i]) : 0;
int i2 = i < t2.length ? Integer.parseInt(t2[i]) : 0;
if (i1 == i2) {
continue;
}
return i1 - i2;
}
return 0;
}
private static String replaceSpecials(String in) {
for (int i = 0; i < special.length; i++) {
int j = -special.length + i;
in = in.replaceAll(special[i], "." + j + ".");
}
return in;
}
@Override
public int compare(Object obj, Object obj1) {
return versionNumberCompare(obj.toString(), obj1.toString());
}
}