package com.brightgenerous.csv;
import java.io.Serializable;
import com.brightgenerous.commons.EqualsUtils;
import com.brightgenerous.commons.HashCodeUtils;
import com.brightgenerous.commons.ToStringUtils;
public class CsvUtilsBuilder implements Serializable {
private static final long serialVersionUID = 8500682388551196858L;
private static final IDataConverter<String[]> emptyConverter = new EmptyDataConverter();
private static final Character DEFAULT_SEPARATOR = Character.valueOf(',');
private static final Character DEFAULT_QUOTE = Character.valueOf('"');
private static final Character DEFAULT_ESCAPE = Character.valueOf('\\');
private static final Boolean DEFAULT_STRICT_QUOTES = Boolean.FALSE;
private static final Boolean DEFAULT_IGNORE_LEADING_WHITESPACE = Boolean.TRUE;
private static final Integer DEFAULT_SKIP_LINES = Integer.valueOf(0);
private static final String DEFAULT_LINE_END = "\n";
private Character separator;
private Character quote;
private Character escape;
private Boolean strictQuotes;
private Boolean ignoreLeadingWhiteSpace;
private String lineEnd;
private Integer skipLines;
protected CsvUtilsBuilder() {
}
public static CsvUtilsBuilder create() {
return new CsvUtilsBuilder();
}
public CsvUtilsBuilder clear() {
separator = null;
quote = null;
escape = null;
strictQuotes = null;
ignoreLeadingWhiteSpace = null;
skipLines = null;
lineEnd = null;
return this;
}
public Character separator() {
return separator;
}
public CsvUtilsBuilder separator(Character separator) {
this.separator = separator;
return this;
}
public CsvUtilsBuilder separator(char separator) {
return separator(Character.valueOf(separator));
}
public Character quote() {
return quote;
}
public CsvUtilsBuilder quote(Character quote) {
this.quote = quote;
return this;
}
public CsvUtilsBuilder quote(char quote) {
return quote(Character.valueOf(quote));
}
public Character escape() {
return escape;
}
public CsvUtilsBuilder escape(Character escape) {
this.escape = escape;
return this;
}
public CsvUtilsBuilder escape(char escape) {
return escape(Character.valueOf(escape));
}
public Boolean strictQuotes() {
return strictQuotes;
}
public CsvUtilsBuilder strictQuotes(Boolean strictQuotes) {
this.strictQuotes = strictQuotes;
return this;
}
public CsvUtilsBuilder strictQuotes(boolean strictQuotes) {
return strictQuotes(strictQuotes ? Boolean.TRUE : Boolean.FALSE);
}
public Boolean ignoreLeadingWhiteSpace() {
return ignoreLeadingWhiteSpace;
}
public CsvUtilsBuilder ignoreLeadingWhiteSpace(Boolean ignoreLeadingWhiteSpace) {
this.ignoreLeadingWhiteSpace = ignoreLeadingWhiteSpace;
return this;
}
public CsvUtilsBuilder ignoreLeadingWhiteSpace(boolean ignoreLeadingWhiteSpace) {
return ignoreLeadingWhiteSpace(ignoreLeadingWhiteSpace ? Boolean.TRUE : Boolean.FALSE);
}
public String lineEnd() {
return lineEnd;
}
public CsvUtilsBuilder lineEnd(String lineEnd) {
this.lineEnd = lineEnd;
return this;
}
public Integer skipLines() {
return skipLines;
}
public CsvUtilsBuilder skipLines(Integer skipLines) {
this.skipLines = skipLines;
return this;
}
public CsvUtilsBuilder skipLines(int skipLines) {
return skipLines(Integer.valueOf(skipLines));
}
public CsvUtils<String[]> build() {
return CsvUtils.get(getParseStrategy(emptyConverter), getFormatStrategy(emptyConverter));
}
public <T> CsvUtils<T> build(IDataConverter<T> converter) {
return CsvUtils.get(getParseStrategy(converter), getFormatStrategy(converter));
}
protected <T> IParseStrategy<T> getParseStrategy(IDataConverter<T> converter) {
return new ParseStrategy<>(converter, getSeparator(), getQuote(), getEscape(),
getStrictQuotes(), getIgnoreLeadingWhiteSpace(), getSkipLines());
}
protected <T> IFormatStrategy<T> getFormatStrategy(IDataConverter<T> converter) {
return new FormatStrategy<>(converter, getSeparator(), getQuote(), getEscape(),
getLineEnd());
}
protected char getSeparator() {
Character ret = separator;
if (ret == null) {
ret = DEFAULT_SEPARATOR;
}
return ret.charValue();
}
protected char getQuote() {
Character ret = quote;
if (ret == null) {
ret = DEFAULT_QUOTE;
}
return ret.charValue();
}
protected char getEscape() {
Character ret = escape;
if (ret == null) {
ret = DEFAULT_ESCAPE;
}
return ret.charValue();
}
protected boolean getStrictQuotes() {
Boolean ret = strictQuotes;
if (ret == null) {
ret = DEFAULT_STRICT_QUOTES;
}
return ret.booleanValue();
}
protected boolean getIgnoreLeadingWhiteSpace() {
Boolean ret = ignoreLeadingWhiteSpace;
if (ret == null) {
ret = DEFAULT_IGNORE_LEADING_WHITESPACE;
}
return ret.booleanValue();
}
protected int getSkipLines() {
Integer ret = skipLines;
if (ret == null) {
ret = DEFAULT_SKIP_LINES;
}
return ret.intValue();
}
protected String getLineEnd() {
String ret = lineEnd;
if (ret == null) {
ret = DEFAULT_LINE_END;
}
return ret;
}
@Override
public int hashCode() {
if (HashCodeUtils.resolved()) {
return HashCodeUtils.hashCodeAlt(null, this);
}
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
if (EqualsUtils.resolved()) {
return EqualsUtils.equalsAlt(null, this, obj);
}
return super.equals(obj);
}
@Override
public String toString() {
if (ToStringUtils.resolved()) {
return ToStringUtils.toStringAlt(this);
}
return super.toString();
}
}