1 package com.github.mygreen.supercsv.io;
2
3 import java.io.IOException;
4 import java.io.Reader;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import org.supercsv.exception.SuperCsvException;
9
10 import com.github.mygreen.supercsv.exception.SuperCsvBindingException;
11 import com.github.mygreen.supercsv.exception.SuperCsvFixedSizeException;
12 import com.github.mygreen.supercsv.exception.SuperCsvNoMatchColumnSizeException;
13 import com.github.mygreen.supercsv.exception.SuperCsvNoMatchHeaderException;
14
15
16
17
18
19
20
21
22
23 public class FixedSizeCsvAnnotationBeanReader<T> extends AbstractCsvAnnotationBeanReader<T> {
24
25 public FixedSizeCsvAnnotationBeanReader(final Reader reader, final FixedSizeCsvPreference<T> preference) {
26 super(preference.createTokenizer(reader), preference.getCsvPreference());
27
28 this.beanMappingCache = preference.getBeanMappingCache();
29 this.validators.addAll(beanMappingCache.getOriginal().getValidators());
30 }
31
32 @Override
33 protected boolean readRow() throws IOException {
34 try {
35 return super.readRow();
36 } catch(SuperCsvFixedSizeException e) {
37
38
39
40
41 e.getCsvContext().setRowNumber(getRowNumber());
42
43 errorMessages.addAll(exceptionConverter.convertAndFormat(e, beanMappingCache.getOriginal()));
44 throw e;
45 }
46 }
47
48
49
50
51
52
53
54
55
56
57
58
59
60 public List<T> readAll() throws IOException {
61 return readAll(false);
62 }
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 public List<T> readAll(final boolean continueOnError) throws IOException {
80
81 if(beanMappingCache.getOriginal().isHeader()) {
82 try {
83 getHeader(true);
84 } catch(SuperCsvNoMatchColumnSizeException | SuperCsvNoMatchHeaderException e) {
85 if(!continueOnError) {
86 throw e;
87 }
88 }
89 }
90
91 final List<T> list = new ArrayList<>();
92
93 while(true) {
94 try {
95 final T record = read();
96 if(record == null) {
97 break;
98 }
99 list.add(record);
100
101 } catch(SuperCsvNoMatchColumnSizeException | SuperCsvBindingException e) {
102 if(!continueOnError) {
103 throw e;
104 }
105 }
106 }
107
108 return list;
109 }
110
111 }