1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.layout;
18
19 import java.nio.charset.Charset;
20
21 import org.apache.commons.csv.CSVFormat;
22 import org.apache.commons.csv.QuoteMode;
23
24
25
26
27
28
29
30
31 public abstract class AbstractCsvLayout extends AbstractStringLayout {
32
33 private static final String CONTENT_TYPE = "text/csv";
34 protected static final String DEFAULT_CHARSET = "UTF-8";
35 protected static final String DEFAULT_FORMAT = "Default";
36 private static final long serialVersionUID = 1L;
37
38 protected static CSVFormat createFormat(final String format, final Character delimiter, final Character escape, final Character quote, final QuoteMode quoteMode, final String nullString,
39 final String recordSeparator) {
40 CSVFormat csvFormat = CSVFormat.valueOf(format);
41 if (delimiter != null) {
42 csvFormat = csvFormat.withDelimiter(delimiter);
43 }
44 if (escape != null) {
45 csvFormat = csvFormat.withEscape(escape);
46 }
47 if (quote != null) {
48 csvFormat = csvFormat.withQuote(quote);
49 }
50 if (quoteMode != null) {
51 csvFormat = csvFormat.withQuoteMode(quoteMode);
52 }
53 if (nullString != null) {
54 csvFormat = csvFormat.withNullString(nullString);
55 }
56 if (recordSeparator != null) {
57 csvFormat = csvFormat.withRecordSeparator(recordSeparator);
58 }
59 return csvFormat;
60 }
61
62 private final CSVFormat format;
63
64 protected AbstractCsvLayout(final Charset charset, final CSVFormat csvFormat, final String header,
65 final String footer) {
66 super(charset, toBytes(header, charset), toBytes(footer, charset));
67 this.format = csvFormat;
68 }
69
70 @Override
71 public String getContentType() {
72 return CONTENT_TYPE + "; charset=" + this.getCharset();
73 }
74
75 public CSVFormat getFormat() {
76 return format;
77 }
78
79 }