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

com.github.mygreen.supercsv.builder.BeanMapping 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.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.supercsv.cellprocessor.ift.CellProcessor;

import com.github.mygreen.supercsv.validation.CsvValidator;

/**
 * 解析したBeanのマッピング情報です。
 *
 * @param  Beanのクラスタイプ
 * @version 2.1
 * @author T.TSUCHIE
 * 
 */
public class BeanMapping {
    
    private final Class type;
    
    private boolean header;
    
    private boolean validateHeader;
    
    private List> validators = new ArrayList<>();
    
    private List listeners = new ArrayList<>();
    
    private List columns = new ArrayList<>();
    
    private List preReadMethods = new ArrayList<>();
    
    private List postReadMethods = new ArrayList<>();
    
    private List preWriteMethods = new ArrayList<>();
    
    private List postWriteMethods = new ArrayList<>();
    
    private boolean skipValidationOnWrite;
    
    private Class[] groups;
    
    private HeaderMapper headerMapper;
    
    private Configuration configuration;
    
    public BeanMapping(final Class type) {
        this.type = type;
    }
    
    /**
     * 指定した列番号を持つカラムのマッピング情報を取得する。
     * @param columnNumber 列番号。1から始まる。
     * @return 引数で指定した位置情報の値と一致するカラム情報。
     */
    public Optional getColumnMapping(final int columnNumber) {
        return columns.stream()
                .filter(c -> c.getNumber() == columnNumber)
                .findFirst();
    }
    
    /**
     * 指定したカラム名を持つカラムのマッピング情報を取得する。
     * @param columnName カラム名(フィールド名)を指定します。
     * @return 引数で指定したカラム名の値と一致するカラム情報。
     */
    public Optional getColumnMapping(final String columnName) {
        return columns.stream()
                .filter(c -> c.getName() != null && c.getName().equals(columnName))
                .findFirst();
    }
    
    /**
     * カラムのヘッダー一覧を取得する。
     * @return カラムの位置順のヘッダー一覧。
     */
    public String[] getHeader() {
        
        return columns.stream()
            .map(c -> headerMapper.toMap(c, configuration, groups))
            .toArray(n -> new String[n]);
        
    }
    
    /**
     * フィールド名の一覧を取得する。
     * 

CSVのレコードを出力する際に利用する。

* @return カラムの位置順のフィールドの一覧。 */ public String[] getNameMapping() { return columns.stream() .map(c -> c.getName()) .toArray(n -> new String[n]); } /** * 読み込み用の{@link CellProcessor}を取得する。 * @return カラムの位置順に整列されている{@link CellProcessor}の一覧。 */ public CellProcessor[] getCellProcessorsForReading() { return columns.stream() .map(c -> c.getCellProcessorForReading()) .toArray(n -> new CellProcessor[n]); } /** * 書き込み用の{@link CellProcessor}を取得する。 * @return カラムの位置順に整列されている{@link CellProcessor}の一覧。 */ public CellProcessor[] getCellProcessorsForWriting() { return columns.stream() .map(c -> c.getCellProcessorForWriting()) .toArray(n -> new CellProcessor[n]); } /** * * @return Beanのクラスタイプを取得する。 */ public Class getType() { return type; } /** * ヘッダーが存在するとして処理するかどうか。 * @return trueの場合、ヘッダーが存在するとして処理を行う。 */ public boolean isHeader() { return header; } /** * ヘッダーが存在するとして処理するかどうか設定する。 * @param header trueの場合、ヘッダーが存在するとして処理を行う。 */ public void setHeader(boolean header) { this.header = header; } public boolean isValidateHeader() { return validateHeader; } public void setValidateHeader(boolean validateHeader) { this.validateHeader = validateHeader; } public List> getValidators() { return validators; } public void addAllValidators(List> validators) { this.validators.addAll(validators); } public List getListeners() { return listeners; } public void addAllListeners(List listeners) { this.listeners.addAll(listeners); } public List getColumns() { return columns; } public void setColumns(List columns) { this.columns = columns;; } public void addAllColumns(List columns) { this.columns.addAll(columns); } public List getPreReadMethods() { return preReadMethods; } public void addPreReadMethod(final CallbackMethod method) { this.preReadMethods.add(method); } public List getPostReadMethods() { return postReadMethods; } public void addPostReadMethod(final CallbackMethod method) { this.postReadMethods.add(method); } public List getPreWriteMethods() { return preWriteMethods; } public void addPreWriteMethod(final CallbackMethod method) { this.preWriteMethods.add(method); } public List getPostWriteMethods() { return postWriteMethods; } public void addPostWriteMethod(final CallbackMethod method) { this.postWriteMethods.add(method); } public boolean isSkipValidationOnWrite() { return skipValidationOnWrite; } public void setSkipValidationOnWrite(boolean skipValidationOnWrite) { this.skipValidationOnWrite = skipValidationOnWrite; } public Class[] getGroups() { return groups; } public void setGroups(Class[] groups) { this.groups = groups; } /** * カラムに対するヘッダー情報を取得するためのマッパーを取得する。 * @since 2.1 * @return {@link HeaderMapper}の実装クラス。 */ public HeaderMapper getHeaderMapper() { return headerMapper; } /** * カラムに対するヘッダー情報を取得するためのマッパーを設定します。 * @since 2.1 * @param headerMapper {@link HeaderMapper}の実装クラス。 */ public void setHeaderMapper(HeaderMapper headerMapper) { this.headerMapper = headerMapper; } /** * システム情報を取得します。 * @return 既存のシステム情報を変更する際に取得します。 */ public Configuration getConfiguration() { return configuration; } /** * システム情報を取得します。 * @param configuraton 新しくシステム情報を変更する際に設定します。 */ public void setConfiguration(Configuration configuraton) { this.configuration = configuraton; } }