TruncateFactory.java

  1. package com.github.mygreen.supercsv.cellprocessor.conversion;

  2. import java.util.Optional;

  3. import org.supercsv.cellprocessor.ift.CellProcessor;
  4. import org.supercsv.cellprocessor.ift.StringCellProcessor;

  5. import com.github.mygreen.supercsv.annotation.conversion.CsvTruncate;
  6. import com.github.mygreen.supercsv.builder.Configuration;
  7. import com.github.mygreen.supercsv.builder.FieldAccessor;
  8. import com.github.mygreen.supercsv.cellprocessor.ConversionProcessorFactory;
  9. import com.github.mygreen.supercsv.cellprocessor.format.TextFormatter;
  10. import com.github.mygreen.supercsv.exception.SuperCsvInvalidAnnotationException;
  11. import com.github.mygreen.supercsv.localization.MessageBuilder;

  12. /**
  13.  * {@link CsvTruncate}をハンドリングして、{@link Truncate}を作成する。
  14.  *
  15.  * @since 2.0
  16.  * @author T.TSUCHIE
  17.  *
  18.  */
  19. public class TruncateFactory implements ConversionProcessorFactory<CsvTruncate> {
  20.    
  21.     @Override
  22.     public Optional<CellProcessor> create(final CsvTruncate anno, final Optional<CellProcessor> next,
  23.             final FieldAccessor field, final TextFormatter<?> formatter, final Configuration config) {
  24.        
  25.         if(anno.maxSize() <= 0) {
  26.             throw new SuperCsvInvalidAnnotationException(anno, MessageBuilder.create("anno.attr.min")
  27.                     .var("property", field.getNameWithClass())
  28.                     .varWithAnno("anno", anno.annotationType())
  29.                     .var("attrName", "maxSize")
  30.                     .var("attrValue", anno.maxSize())
  31.                     .var("min", 1)
  32.                     .format());
  33.         }
  34.        
  35.         final Truncate processor = next.map(n -> new Truncate(anno.maxSize(), anno.suffix(), (StringCellProcessor)n))
  36.                 .orElseGet(() -> new Truncate(anno.maxSize(), anno.suffix()));
  37.        
  38.         return Optional.of(processor);
  39.     }
  40.    
  41. }