All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mygreen.supercsv.builder.LazyBeanMappingFactory Maven / Gradle / Ivy

Go to download

CSVのJavaライブラリであるSuperCSVに、アノテーション機能を追加したライブラリです。

There is a newer version: 2.3
Show newest version
package com.github.mygreen.supercsv.builder;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.github.mygreen.supercsv.annotation.CsvBean;
import com.github.mygreen.supercsv.annotation.CsvColumn;
import com.github.mygreen.supercsv.annotation.DefaultGroup;
import com.github.mygreen.supercsv.exception.SuperCsvInvalidAnnotationException;
import com.github.mygreen.supercsv.localization.MessageBuilder;

/**
 * カラム番号の設定、チェックを行わないで、BeanからCSVのマッピング情報を作成するクラス。
 *
 * @since 2.1
 * @author T.TSUCHIE
 *
 */
public class LazyBeanMappingFactory extends BeanMappingFactory {
    
    /**
     * デフォルトコンストラクタ
     */
    public LazyBeanMappingFactory() {
        
    }
    
    /**
     * Beanクラスから、CSVのマッピング情報を作成します。
     * 
     * @param  Beanのタイプ
     * @param beanType 作成元のBeanクラス。
     * @param groups グループ情報。
     *              アノテーションを指定したグループで切り替える際に指定します。
     *              何も指定しない場合は、デフォルトグループの{@link DefaultGroup}のクラスが指定されたとして処理します。
     * @return CSVのマッピング情報。
     * @throws NullPointerException {@literal beanType == null.}
     * @throws SuperCsvInvalidAnnotationException アノテーションの定義が不正な場合。
     */
    @Override
    public  BeanMapping create(final Class beanType, final Class... groups) {
        
        Objects.requireNonNull(beanType);
        
        final Configuration configuration = getConfiguration();
        final BeanMapping beanMapping = new BeanMapping<>(beanType);
        beanMapping.setConfiguration(configuration);
        
        // アノテーション @CsvBeanの取得
        final CsvBean beanAnno = beanType.getAnnotation(CsvBean.class);
        if(beanAnno == null) {
            throw new SuperCsvInvalidAnnotationException(beanAnno, MessageBuilder.create("anno.notFound")
                        .varWithClass("property", beanType)
                        .varWithAnno("anno", CsvBean.class)
                        .format());
        }
        
        // ヘッダーの設定情報の組み立て
        buildHeaderMapper(beanMapping, beanAnno);
        
        // 入力値検証の設定を組み立てます。
        buildValidators(beanMapping, beanAnno, groups);
        
        // アノテーション @CsvColumn を元にしたカラム情報の組み立て
        buildColumnMappingList(beanMapping, beanType, groups);
        
        // コールバックメソッドの設定
        buildCallbackMethods(beanMapping, beanType, beanAnno);
        
        return beanMapping;
    }
    
    /**
     * アノテーション{@link CsvColumn}を元に、カラムのマッピング情報を組み立てる。
     * 

カラム番号の検証や、部分的なカラムのカラムの組み立てはスキップ。

* @param beanMapping Beanのマッピング情報 * @param beanType Beanのクラスタイプ * @param groups グループ情報 */ @Override protected void buildColumnMappingList(final BeanMapping beanMapping, final Class beanType, final Class[] groups) { final List columnMappingList = new ArrayList<>(); for(Field field : beanType.getDeclaredFields()) { final CsvColumn columnAnno = field.getAnnotation(CsvColumn.class); if(columnAnno != null) { columnMappingList.add(createColumnMapping(field, columnAnno, groups)); } } beanMapping.addAllColumns(columnMappingList); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy