View Javadoc
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   * @author T.TSUCHIE
17   *
18   */
19  public class SuperCsvRowException extends SuperCsvException {
20      
21      /** serialVersionUID */
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          // shallow copy
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 }