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

com.github.mygreen.supercsv.cellprocessor.constraint.EqualedValueProvider Maven / Gradle / Ivy

Go to download

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

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

import java.util.Collection;

import com.github.mygreen.supercsv.annotation.constraint.CsvEquals;
import com.github.mygreen.supercsv.builder.FieldAccessor;

/**
 * {@link CsvEquals}による等値かどうか比較する際の値を提供するインタフェースです。
 * 

値を別ファイルやDBから取得する時などサービスクラスとして実装します。

*

基本的な使い方は、 {@link CsvEquals}のJavaDocを参照してください。

* *

フィールドごとにリソースを切り替えたい場合

*

フィールドごとにリソースを切り替えたい場合は、メソッドの引数{@link FieldAccessor}で判定を行います。

*

また、独自のパラメータを渡したい時は、独自のアノテーションを作成し、それをフィールドに付与して、 * 引数{@link FieldAccessor}から取得して判定します。 *

* *

 * // 読み込むリソースを定義されているフィールドやクラスで分ける場合
 * public class FileEqualedValueProvider implements {@literal EqualedValueProvider} {
 *     
 *     {@literal @Override}
 *     public {@literal Collection} getEqualedValues(final FieldAccessor field) {
 *         
 *         final String path;
 *         if(field.getDeclaredClass().equals(AdminCsv.class)) {
 *             path = "equaled_value_admin.txt";
 *         } else {
 *             path = "equaled_value.txt";
 *         }
 *         
 *         String lines;
 *         try {
 *              lines = Files.readAllLines(new File(path).toPath(), Charset.forName("UTF-8"));
 *              
 *         } catch (IOException e) {
 *             throw new RuntimeException("fail reading the equaled value file.", e);
 *         }
 *         
 *         // 読み取った値をInteger型に変換します。
 *         return lines.stream()
 *             .map(l {@literal ->} Integer.valueOf(l))
 *             .collect(Collectors.toList());
 *         
 *     }
 * }
 * 
* *

Spring Frameworkと連携する場合

*

Spring Frameworkと連携している場合は、プロバイダクラスをSpringBeanとして登録しておくことでインジェクションされます。

*

また、メソッド{@link EqualedValueProvider#getEqualedValues(FieldAccessor)}は、定義したフィールド単位に呼ばれるため、 * 多数のフィールドで定義していると何度も呼ばれ、効率が悪くなる場合があります。 *
このようなときは、Spring Framework 3.1から追加された Cache Abstraction(キャッシュの抽象化)機能を使うと改善できます。 *

* *

 * // SpringBeanとして登録する場合。
 * {@literal @Service}
 * {@literal @Transactional}
 * public class EqualedValueProviderImpl implements {@literal EqualedValueProvider} {
 *     
 *     // リポジトリのインジェクション
 *     {@literal @Autowired}
 *     private EqualedValueRepository equaledValueRepository;
 *     
 *     {@literal @Override}
 *     public {@literal Collection} getEqualedValues(final FieldAccessor field) {
 *         
 *         final Role role;
 *         if(field.getDeclaredClass().equals(AdminCsv.class)) {
 *             role = Role.admin;
 *         } else {
 *             role = Role.normal;
 *         }
 *         
 *         return loadWords(role).stream()
 *             .map(dto {@literal ->} dto.getValue())
 *             .collect(Collectors.toList());
 *         
 *     }
 *     
 *     // リポジトリから取得した内容をキャッシュする。
 *     // 引数 role をキーにして、区別する。
 *     {@literal @Transactional(readOnly = true)}
 *     {@literal @Cacheable(cacheNames="equaledValues", key="#role")}
 *     public {@literal List} loadWords(Role role) {
 *          
 *          if(role.euals(Role.admin)) {
 *              return equaledValueRepository.findByRole(role);
 *          } else {
 *              return equaledValueRepository.findAll();
 *          }
 *          
 *     }
 * }
 * 
* * @since 2.0 * @author T.TSUCHIE * */ @FunctionalInterface public interface EqualedValueProvider { /** * 比較対象の値を取得します。 * @param field フィールド情報 * @return 比較対処の値のリストを返します。 */ Collection getEqualedValues(FieldAccessor field); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy