View Javadoc
1   package com.github.mygreen.supercsv.builder;
2   
3   import java.lang.annotation.Annotation;
4   import java.util.Comparator;
5   
6   import com.github.mygreen.supercsv.util.Utils;
7   
8   
9   /**
10   * 入力値検証を行うアノテーションの順番に並び変えます。
11   * <p>並び順は、アノテーションの属性「order」の定義に従います。</p>
12   * <p>属性「order」の値が同じ場合は、クラス名の昇順になります。</p>
13   *
14   * @since 2.0
15   * @author T.TSUCHIE
16   *
17   */
18  public class AnnotationComparator implements Comparator<Annotation> {
19      
20      /**
21       * 属性「order」が定義されていないときの値。
22       */
23      private static final int DEFAULT_ORDER = Integer.MAX_VALUE;
24      
25      @Override
26      public int compare(final Annotation anno1, final Annotation anno2) {
27          
28          final String name1 = anno1.annotationType().getName();
29          final String name2 = anno2.annotationType().getName();
30          
31          final int order1 = Utils.getAnnotationAttribute(anno1, "order", int.class).orElse(DEFAULT_ORDER);
32          final int order2 = Utils.getAnnotationAttribute(anno2, "order", int.class).orElse(DEFAULT_ORDER);
33          
34          if(order1 == order2) {
35              return name1.compareTo(name2);
36          } else {
37              return Integer.compare(order1, order2);
38          }
39      }
40      
41  }