1 package com.github.mygreen.supercsv.exception;
2
3 import java.io.PrintStream;
4 import java.io.PrintWriter;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import org.supercsv.exception.SuperCsvCellProcessorException;
9 import org.supercsv.exception.SuperCsvException;
10 import org.supercsv.util.CsvContext;
11
12
13
14
15
16
17
18
19 public class SuperCsvRowException extends SuperCsvException {
20
21
22 private static final long serialVersionUID = 1L;
23
24 private final List<SuperCsvException> columnErrors = new ArrayList<>();
25
26 public SuperCsvRowException(final String msg, final CsvContext context) {
27 super(msg, context);
28 }
29
30 public void addError(final SuperCsvException error) {
31 this.columnErrors.add(error);
32 }
33
34 public void addError(final SuperCsvCellProcessorException error) {
35
36 final SuperCsvCellProcessorException cloned;
37 if(error instanceof SuperCsvValidationException) {
38 cloned = ((SuperCsvValidationException)error).clone();
39 } else {
40 cloned = new SuperCsvCellProcessorException(error.getMessage(),
41 cloneCsvContext(error.getCsvContext()),
42 error.getProcessor());
43 }
44
45 this.columnErrors.add(cloned);
46 }
47
48 private CsvContext cloneCsvContext(final CsvContext context) {
49
50 CsvContext cloned = new CsvContext(
51 context.getLineNumber(),
52 context.getRowNumber(),
53 context.getColumnNumber());
54
55
56 List<Object> destRowSource = new ArrayList<Object>(context.getRowSource().size());
57 for(Object obj : context.getRowSource()) {
58 destRowSource.add(obj);
59 }
60 cloned.setRowSource(destRowSource);
61
62 return cloned;
63 }
64
65 public void addAllErrors(final List<SuperCsvException> errors) {
66 for(SuperCsvException error : errors) {
67 addError(error);
68 }
69 }
70
71 public List<SuperCsvException> getColumnErrors() {
72 return columnErrors;
73 }
74
75 public boolean isEmptyColumnErrors() {
76 return getColumnErrors().isEmpty();
77 }
78
79 public boolean isNotEmptyColumnErrors() {
80 return !isEmptyColumnErrors();
81 }
82
83 @Override
84 public void printStackTrace(final PrintStream s) {
85
86 super.printStackTrace(s);
87
88 int count = 1;
89 for(SuperCsvException e : columnErrors) {
90 s.printf("[ColumnError-%d] : ", count);
91 e.printStackTrace(s);
92 count++;
93 }
94
95 }
96
97 @Override
98 public void printStackTrace(final PrintWriter s) {
99
100 super.printStackTrace(s);
101
102 int count = 1;
103 for(SuperCsvException e : columnErrors) {
104 s.printf("[ColumnError-%d] : ", count);
105 e.printStackTrace(s);
106 count++;
107 }
108
109 }
110
111
112 }