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 import org.apache.logging.log4j.core.config.Configuration;
24
25
26
27
28
29
30
31
32 public abstract class AbstractCsvLayout extends AbstractStringLayout {
33
34 protected static final String DEFAULT_CHARSET = "UTF-8";
35 protected static final String DEFAULT_FORMAT = "Default";
36 private static final String CONTENT_TYPE = "text/csv";
37
38 protected static CSVFormat createFormat(final String format, final Character delimiter, final Character escape,
39 final Character quote, final QuoteMode quoteMode, final String nullString, 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 Configuration config, final Charset charset, final CSVFormat csvFormat,
65 final String header, final String footer) {
66 super(config, charset, PatternLayout.createSerializer(config, null, header, null, null, false, false),
67 PatternLayout.createSerializer(config, null, footer, null, null, false, false));
68 this.format = csvFormat;
69 }
70
71 @Override
72 public String getContentType() {
73 return CONTENT_TYPE + "; charset=" + this.getCharset();
74 }
75
76 public CSVFormat getFormat() {
77 return format;
78 }
79 }