ExpandedAnnotation.java

package com.github.mygreen.supercsv.builder;

import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;

import com.github.mygreen.supercsv.annotation.CsvComposition;

/**
 * 展開したアノテーション情報を保持するクラス。
 *
 * @since 2.0
 * @author T.TSUCHIE
 *
 */
public class ExpandedAnnotation{
    
    private final Annotation original;
    
    /**
     * 合成されたアノテーションかどうか。
     */
    private final boolean composed;
    
    /**
     * 繰り返しのアノテーションの場合のインデックス番号。
     */
    private int index;
    
    /**
     * 合成されたアノテーションのクラスに付与されたアノテーション
     */
    private final List<ExpandedAnnotation> childs = new ArrayList<>();
    
    /**
     * 
     * @param original 元となるアノテーション。
     * @param composed 合成されたアノテーションかどうか。
     */
    public ExpandedAnnotation(final Annotation original, final boolean composed) {
        this.original = original;
        this.composed = composed;
    }
    
    /**
     * 元のアノテーションを取得する。
     * @return 元のアノテーションのインスタンスを返します。
     */
    public Annotation getOriginal() {
        return original;
    }
    
    /**
     * 指定したアノテーションのクラスタイプかどうか。
     * @param clazz 比較対象のアノテーションのクラスタイプ。
     * @return trueの場合、比較対象のクラスタイプを一致します。
     */
    public boolean isAnnotationType(final Class<?> clazz) {
        return original.annotationType().equals(clazz);
    }
    
    /**
     * {@link CsvComposition}が付与された合成されたアノテーションかどうか。
     * @return trueの場合、合成されたアノテーションを指します。
     */
    public boolean isComposed() {
        return composed;
    }
    
    /**
     * 合成されたアノテーションのクラスに付与されたアノテーションを取得する。
     * @return 合成されたアノテーションに付与されているアノテーション情報を返します。
     */
    public List<ExpandedAnnotation> getChilds() {
        return childs;
    }
    
    public void addChilds(final List<ExpandedAnnotation> childs) {
        this.childs.addAll(childs);
    }
    
    /**
     * 繰り返しのアノテーションの場合のインデックス番号を取得する。
     * @return 0から始まる。繰り返しでない場合は常に0を返す。
     */
    public int getIndex() {
        return index;
    }
    
    /**
     * 繰り返しのアノテーションの場合のインデックス番号を指定する。
     * @param index
     */
    public void setIndex(int index) {
        this.index = index;
    }
    
}