CsvFactoryBuilder.java
package tools.jackson.dataformat.csv;
import tools.jackson.core.ErrorReportConfiguration;
import tools.jackson.core.JsonGenerator;
import tools.jackson.core.StreamReadConstraints;
import tools.jackson.core.StreamWriteConstraints;
import tools.jackson.core.base.DecorableTSFactory.DecorableTSFBuilder;
import tools.jackson.dataformat.csv.impl.CsvEncoder;
/**
* {@link tools.jackson.core.TSFBuilder}
* implementation for constructing {@link CsvFactory}
* instances.
*
* @since 3.0
*/
public class CsvFactoryBuilder extends DecorableTSFBuilder<CsvFactory, CsvFactoryBuilder>
{
/*
/**********************************************************************
/* Configuration
/**********************************************************************
*/
protected CsvCharacterEscapes _characterEscapes;
/**
* Maximum length of a column value for which quoting-need check is performed
* when not using strict ({@link CsvWriteFeature#STRICT_CHECK_FOR_QUOTING}) checking:
* values longer than this threshold will always be quoted.
* Default value is {@value tools.jackson.dataformat.csv.impl.CsvEncoder#DEFAULT_MAX_QUOTE_CHECK}.
*
* @since 3.2
*/
protected int _maxQuoteCheckChars = CsvEncoder.DEFAULT_MAX_QUOTE_CHECK;
/*
/**********************************************************************
/* Life cycle
/**********************************************************************
*/
protected CsvFactoryBuilder() {
super(StreamReadConstraints.defaults(), StreamWriteConstraints.defaults(),
ErrorReportConfiguration.defaults(),
CsvFactory.DEFAULT_CSV_PARSER_FEATURE_FLAGS,
CsvFactory.DEFAULT_CSV_GENERATOR_FEATURE_FLAGS);
}
public CsvFactoryBuilder(CsvFactory base) {
super(base);
_characterEscapes = base._characterEscapes;
_maxQuoteCheckChars = base._maxQuoteCheckChars;
}
@Override
public CsvFactory build() {
// 28-Dec-2017, tatu: No special settings beyond base class ones, so:
return new CsvFactory(this);
}
// // // Parser features
public CsvFactoryBuilder enable(CsvReadFeature f) {
_formatReadFeatures |= f.getMask();
return _this();
}
public CsvFactoryBuilder enable(CsvReadFeature first, CsvReadFeature... other) {
_formatReadFeatures |= first.getMask();
for (CsvReadFeature f : other) {
_formatReadFeatures |= f.getMask();
}
return _this();
}
public CsvFactoryBuilder disable(CsvReadFeature f) {
_formatReadFeatures &= ~f.getMask();
return _this();
}
public CsvFactoryBuilder disable(CsvReadFeature first, CsvReadFeature... other) {
_formatReadFeatures &= ~first.getMask();
for (CsvReadFeature f : other) {
_formatReadFeatures &= ~f.getMask();
}
return _this();
}
public CsvFactoryBuilder configure(CsvReadFeature f, boolean state) {
return state ? enable(f) : disable(f);
}
// // // Generator features
public CsvFactoryBuilder enable(CsvWriteFeature f) {
_formatWriteFeatures |= f.getMask();
return _this();
}
public CsvFactoryBuilder enable(CsvWriteFeature first, CsvWriteFeature... other) {
_formatWriteFeatures |= first.getMask();
for (CsvWriteFeature f : other) {
_formatWriteFeatures |= f.getMask();
}
return _this();
}
public CsvFactoryBuilder disable(CsvWriteFeature f) {
_formatWriteFeatures &= ~f.getMask();
return _this();
}
public CsvFactoryBuilder disable(CsvWriteFeature first, CsvWriteFeature... other) {
_formatWriteFeatures &= ~first.getMask();
for (CsvWriteFeature f : other) {
_formatWriteFeatures &= ~f.getMask();
}
return _this();
}
public CsvFactoryBuilder configure(CsvWriteFeature f, boolean state) {
return state ? enable(f) : disable(f);
}
// // // Other CSV-specific configuration
/**
* Method for defining custom escapes factory uses for {@link JsonGenerator}s
* it creates.
*/
public CsvFactoryBuilder characterEscapes(CsvCharacterEscapes esc) {
_characterEscapes = esc;
return this;
}
public CsvCharacterEscapes characterEscapes() {
if (_characterEscapes == null) {
}
return _characterEscapes;
}
/**
* Method for configuring the maximum length of column values that are
* checked for quoting necessity when not using strict quoting
* ({@link CsvWriteFeature#STRICT_CHECK_FOR_QUOTING}).
* Values longer than this threshold are always quoted without checking content.
*<p>
* Default value is {@value tools.jackson.dataformat.csv.impl.CsvEncoder#DEFAULT_MAX_QUOTE_CHECK}.
*
* @param maxChars Maximum number of characters to check; values longer
* than this will always be quoted. Negative values are normalized to
* the default ({@value tools.jackson.dataformat.csv.impl.CsvEncoder#DEFAULT_MAX_QUOTE_CHECK}).
* @return this builder (for call chaining)
*
* @since 3.2
*/
public CsvFactoryBuilder maxQuoteCheckChars(int maxChars) {
_maxQuoteCheckChars = (maxChars >= 0) ? maxChars : CsvEncoder.DEFAULT_MAX_QUOTE_CHECK;
return this;
}
/**
* @return Currently configured maximum quote check length; default
* is {@value tools.jackson.dataformat.csv.impl.CsvEncoder#DEFAULT_MAX_QUOTE_CHECK}.
*
* @since 3.2
*/
public int maxQuoteCheckChars() {
return _maxQuoteCheckChars;
}
}