/*
* [MXComparator.java]
*
* Summary: Sort mail MX Strings.
*
* Copyright: (c) 2002-2017 Roedy Green, Canadian Mind Products, http://mindprod.com
*
* Licence: This software may be copied and used freely for any purpose but military.
* http://mindprod.com/contact/nonmil.html
*
* Requires: JDK 1.8+
*
* Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/
*
* Version History:
* 1.7 2007-08-21
*/
package com.mindprod.bulk;
import java.util.Comparator;
/**
* Sort mail MX Strings.
*
* Defines an alternate sort order for String.
*
* @author Roedy Green, Canadian Mind Products
* @version 1.7 2007-08-21 initial release
* @since 2002
*/
class MXComparator implements Comparator
{
/**
* Sort mailMX Strings, number space String. "5 gmail-smtp-in.l.google.com." "10 alt1.gmail-smtp-in.l.google.com."
* Defines an alternate sort order for String.
* Compare two String Objects.
* Informally, returns (a-b), or +ve if a is more positive than b.
*
* @param a first String to compare
* @param b second String to compare
*
* @return +ve if a>b, 0 if a==b, -ve if a<b
*/
public final int compare( String a, String b )
{
// very inefficient, parses on every compare!!!!
try
{
final int space1 = a.indexOf( ' ' );
final int space2 = b.indexOf( ' ' );
if ( space1 > 0 && space2 > 0 )
{
final int prio1 = Integer.parseInt( a.substring( 0, space1 ) );
final int prio2 = Integer.parseInt( b.substring( 0, space2 ) );
if ( prio1 > prio2 )
{
return -1;
}
if ( prio1 < prio2 )
{
return 1;
}
// numbers were equal, break tie with strings
a = a.substring( space1 + 1 );
b = b.substring( space2 + 1 );
return a.compareTo( b );
}
else
{
// were no lead numbers.
return a.compareTo( b );
}
}
catch ( NumberFormatException e )
{
// screwed up numbers, compare alphabetically.
return a.compareTo( b );
}
}
}