1 package com.github.mygreen.supercsv.builder;
2
3 import java.lang.annotation.Annotation;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import com.github.mygreen.supercsv.annotation.CsvComposition;
8
9 /**
10 * 展開したアノテーション情報を保持するクラス。
11 *
12 * @since 2.0
13 * @author T.TSUCHIE
14 *
15 */
16 public class ExpandedAnnotation{
17
18 private final Annotation original;
19
20 /**
21 * 合成されたアノテーションかどうか。
22 */
23 private final boolean composed;
24
25 /**
26 * 繰り返しのアノテーションの場合のインデックス番号。
27 */
28 private int index;
29
30 /**
31 * 合成されたアノテーションのクラスに付与されたアノテーション
32 */
33 private final List<ExpandedAnnotation> childs = new ArrayList<>();
34
35 /**
36 *
37 * @param original 元となるアノテーション。
38 * @param composed 合成されたアノテーションかどうか。
39 */
40 public ExpandedAnnotation(final Annotation original, final boolean composed) {
41 this.original = original;
42 this.composed = composed;
43 }
44
45 /**
46 * 元のアノテーションを取得する。
47 * @return 元のアノテーションのインスタンスを返します。
48 */
49 public Annotation getOriginal() {
50 return original;
51 }
52
53 /**
54 * 指定したアノテーションのクラスタイプかどうか。
55 * @param clazz 比較対象のアノテーションのクラスタイプ。
56 * @return trueの場合、比較対象のクラスタイプを一致します。
57 */
58 public boolean isAnnotationType(final Class<?> clazz) {
59 return original.annotationType().equals(clazz);
60 }
61
62 /**
63 * {@link CsvComposition}が付与された合成されたアノテーションかどうか。
64 * @return trueの場合、合成されたアノテーションを指します。
65 */
66 public boolean isComposed() {
67 return composed;
68 }
69
70 /**
71 * 合成されたアノテーションのクラスに付与されたアノテーションを取得する。
72 * @return 合成されたアノテーションに付与されているアノテーション情報を返します。
73 */
74 public List<ExpandedAnnotation> getChilds() {
75 return childs;
76 }
77
78 public void addChilds(final List<ExpandedAnnotation> childs) {
79 this.childs.addAll(childs);
80 }
81
82 /**
83 * 繰り返しのアノテーションの場合のインデックス番号を取得する。
84 * @return 0から始まる。繰り返しでない場合は常に0を返す。
85 */
86 public int getIndex() {
87 return index;
88 }
89
90 /**
91 * 繰り返しのアノテーションの場合のインデックス番号を指定する。
92 * @param index
93 */
94 public void setIndex(int index) {
95 this.index = index;
96 }
97
98 }