AnnotationComparator.java
package com.github.mygreen.supercsv.builder;
import java.lang.annotation.Annotation;
import java.util.Comparator;
import com.github.mygreen.supercsv.util.Utils;
/**
* 入力値検証を行うアノテーションの順番に並び変えます。
* <p>並び順は、アノテーションの属性「order」の定義に従います。</p>
* <p>属性「order」の値が同じ場合は、クラス名の昇順になります。</p>
*
* @since 2.0
* @author T.TSUCHIE
*
*/
public class AnnotationComparator implements Comparator<Annotation> {
/**
* 属性「order」が定義されていないときの値。
*/
private static final int DEFAULT_ORDER = Integer.MAX_VALUE;
@Override
public int compare(final Annotation anno1, final Annotation anno2) {
final String name1 = anno1.annotationType().getName();
final String name2 = anno2.annotationType().getName();
final int order1 = Utils.getAnnotationAttribute(anno1, "order", int.class).orElse(DEFAULT_ORDER);
final int order2 = Utils.getAnnotationAttribute(anno2, "order", int.class).orElse(DEFAULT_ORDER);
if(order1 == order2) {
return name1.compareTo(name2);
} else {
return Integer.compare(order1, order2);
}
}
}