package com.feisystems.tools.maven;
import java.util.Comparator;
import org.apache.commons.lang.StringUtils;
public class VersionComparatorFactory {
/**
* @see "Default Version comparison definition" at
* http://docs.codehaus.org/display
* /MAVEN/Dependency+Mediation+and+Conflict+Resolution
*/
public static Comparator<Version> createDefaultComparator() {
return new Comparator<Version>() {
@Override
public int compare(Version o1, Version o2) {
int majorDiff = o1.getMajor() - o2.getMajor();
int minorDiff = o1.getMinor() - o2.getMinor();
int revisionDiff = o1.getRevision() - o2.getRevision();
int qualifierDiff;
if (o1.getQualifier() == null && o2.getQualifier() != null)
qualifierDiff = Integer.MAX_VALUE;
else if (o1.getQualifier() != null && o2.getQualifier() == null)
qualifierDiff = Integer.MIN_VALUE;
else if (o1.getQualifier() == null && o2.getQualifier() == null)
qualifierDiff = 0;
else if (!StringUtils.isNumeric(o1.getQualifier())
|| !StringUtils.isNumeric(o2.getQualifier()))
qualifierDiff = o1.getQualifier().compareToIgnoreCase(
o2.getQualifier());
else
qualifierDiff = Integer.parseInt(o1.getQualifier())
- Integer.parseInt(o2.getQualifier());
if (majorDiff > 0)
return Integer.MAX_VALUE;
else if (minorDiff > 0)
return Integer.MAX_VALUE;
else if (revisionDiff > 0)
return Integer.MAX_VALUE;
else if (qualifierDiff > 0)
return Integer.MAX_VALUE;
else if (majorDiff == 0 && minorDiff == 0 && revisionDiff == 0
&& qualifierDiff == 0)
return 0;
else
return Integer.MIN_VALUE;
}
};
}
/**
* This Comparator is designed to compare the custom versioning pattern used
* by C2S Team.
*/
public static Comparator<Version> createHandleQualifiersSeparatelyComparator() {
return new Comparator<Version>() {
@Override
public int compare(Version o1, Version o2) {
int majorDiff = o1.getMajor() - o2.getMajor();
int minorDiff = o1.getMinor() - o2.getMinor();
int revisionDiff = o1.getRevision() - o2.getRevision();
if (majorDiff > 0)
return Integer.MAX_VALUE;
else if (minorDiff > 0)
return Integer.MAX_VALUE;
else if (revisionDiff > 0)
return Integer.MAX_VALUE;
else if (majorDiff == 0 && minorDiff == 0 && revisionDiff == 0)
return 0;
else
return Integer.MIN_VALUE;
}
};
}
}