1 package com.github.mygreen.supercsv.builder;
2
3 import java.util.LinkedHashSet;
4 import java.util.List;
5 import java.util.Set;
6
7 import com.github.mygreen.supercsv.annotation.CsvBean;
8 import com.github.mygreen.supercsv.annotation.conversion.CsvFixedSize;
9 import com.github.mygreen.supercsv.exception.SuperCsvInvalidAnnotationException;
10 import com.github.mygreen.supercsv.localization.MessageBuilder;
11 import com.github.mygreen.supercsv.util.Utils;
12
13
14
15
16
17
18
19
20 public class FixedSizeBeanMappingFactory extends BeanMappingFactory {
21
22
23
24
25 public FixedSizeBeanMappingFactory() {
26
27 }
28
29
30
31
32
33 @Override
34 protected <T> void buildHeaderMapper(final BeanMapping<T> beanMapping, final CsvBean beanAnno) {
35
36 final HeaderMapper headerMapper;
37 if (beanAnno.headerMapper().equals(DefaultHeaderMapper.class)) {
38
39 headerMapper= (HeaderMapper) getConfiguration().getBeanFactory().create(FixedSizeHeaderMapper.class);
40 } else {
41 headerMapper = (HeaderMapper) getConfiguration().getBeanFactory().create(beanAnno.headerMapper());
42 }
43
44 beanMapping.setHeaderMapper(headerMapper);
45 beanMapping.setHeader(beanAnno.header());
46 beanMapping.setValidateHeader(beanAnno.validateHeader());
47
48 }
49
50 @Override
51 protected void validateColumnAndSupplyPartialColumn(final Class<?> beanType, final List<ColumnMapping> list) {
52
53 super.validateColumnAndSupplyPartialColumn(beanType, list);
54
55
56 Set<String> notFixedColumnList = new LinkedHashSet<>();
57 for(ColumnMapping columnMapping : list) {
58 if(columnMapping.getFixedSizeProperty() == null) {
59
60 final String columnName;
61 if(Utils.isNotEmpty(columnMapping.getName())) {
62 columnName = String.format("%s(%d)", columnMapping.getName(), columnMapping.getNumber());
63 } else {
64 columnName = String.format("%s(%d)", columnMapping.getLabel(), columnMapping.getNumber());
65 }
66 notFixedColumnList.add(columnName);
67 }
68 }
69
70 if(!notFixedColumnList.isEmpty()) {
71
72 throw new SuperCsvInvalidAnnotationException(MessageBuilder.create("anno.CsvFixedSize.notFoundFixedAnno")
73 .var("property", beanType.getName())
74 .varWithAnno("anno", CsvFixedSize.class)
75 .var("columnList", notFixedColumnList)
76 .format());
77 }
78
79 }
80
81 }