package org.freehep.util;
import java.util.Comparator;
/**
*
* @author Tony Johnson
* @version $Id: VersionComparator.java 8584 2006-08-10 23:06:37Z duns $
*/
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 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;
}
public int compare(Object obj, Object obj1)
{
return versionNumberCompare(obj.toString(),obj1.toString());
}
}