View Javadoc
1   /*
2    * CSVeed (https://github.com/42BV/CSVeed)
3    *
4    * Copyright 2013-2023 CSVeed.
5    *
6    * All rights reserved. This program and the accompanying materials
7    * are made available under the terms of The Apache Software License,
8    * Version 2.0 which accompanies this distribution, and is available at
9    * https://www.apache.org/licenses/LICENSE-2.0.txt
10   */
11  package org.csveed.annotations;
12  
13  import java.lang.annotation.ElementType;
14  import java.lang.annotation.Retention;
15  import java.lang.annotation.RetentionPolicy;
16  import java.lang.annotation.Target;
17  
18  import org.csveed.bean.AbstractMapper;
19  import org.csveed.bean.ColumnIndexMapper;
20  
21  /**
22   * Various settings applying to the entire CSV file and BeanInstructions.
23   */
24  @Target(ElementType.TYPE)
25  @Retention(RetentionPolicy.RUNTIME)
26  public @interface CsvFile {
27  
28      /**
29       * The symbol which escapes a quote character while inside a quoted string. By default a double quote (")
30       *
31       * @return escape character
32       */
33      char escape() default '"';
34  
35      /**
36       * The quote symbol is the sign on both sides of the field value. By default this will be a double quote
37       *
38       * @return quote symbol for a field
39       */
40      char quote() default '"';
41  
42      /**
43       * Sets whether or not quotes are written around the field values. If enabled, the character set as the escape
44       * symbol will be disabled. If disabled, no quotes are written around the field values and the escape symbol is not
45       * escaped. This setting has <strong>no</strong> effect when reading CSV files, only when writing them.
46       *
47       * @return whether or not to write quotes around field values
48       */
49      boolean quotingEnabled() default true;
50  
51      /**
52       * The separator is the symbol between two fields. By default this will be a semi-colon
53       *
54       * @return separator between two fields
55       */
56      char separator() default ';';
57  
58      /**
59       * The symbols all eligible as end-of-line markers. By default \r and \n are both eol symbols
60       *
61       * @return all the eligible eol symbols
62       */
63      char[] endOfLine() default { '\r', '\n' };
64  
65      /**
66       * All lines starting with this symbol (must be at the first encountered position) will be considered comments,
67       * which are ignored by the parser.
68       *
69       * @return comment symbol
70       */
71      char comment() default '#';
72  
73      /**
74       * States whether the first line will be used as a structure line. If this is not the case, the mapping will be done
75       * based on column indexes.
76       *
77       * @return whether to use the first line as a structure or not
78       */
79      boolean useHeader() default true;
80  
81      /**
82       * The point from where the lines must be read, including the structure (if applicable). By default, this value is 1
83       * and includes the header. Note that row counting starts at 1, not at 0, ie CSVeed is 1-based to be more aligned
84       * with the Excel user who receives the error report, not the developer.
85       *
86       * @return the point from where lines must be converted, 1-based
87       */
88      int startRow() default 1;
89  
90      /**
91       * Ascertains that empty lines are skipped. If this value is false, empty lines will be parsed as single column
92       * rows. Default values is true.
93       *
94       * @return whether empty files must be skipped
95       */
96      boolean skipEmptyLines() default true;
97  
98      /**
99       * Ascertains that comment lines are skipped. If this value is false, the comment marker is ignored. Normally, this
100      * method should not be needed. Use only if you want to have 100% certainty that lines identified as comment lines
101      * are never skipped. Default value is true.
102      *
103      * @return whether comment lines (marked with a comment marker on the first position) must be skipped
104      */
105     boolean skipCommentLines() default true;
106 
107     /**
108      * The column where the dynamic headers start. All columns following this column are automatically assumed to be
109      * dynamic also.
110      *
111      * @return index where dynamic columns start
112      */
113     int startIndexDynamicColumns() default 0;
114 
115     /**
116      * Determines the strategy to employ for mapping between CSV and Bean. The default will be to map on the basis of
117      * the column index
118      *
119      * @return the mapping strategy
120      */
121     Class<? extends AbstractMapper> mappingStrategy() default ColumnIndexMapper.class;
122 
123 }