package com.brightgenerous.csv;
import java.io.Reader;
import java.io.Serializable;
import java.io.Writer;
import java.util.List;
import com.brightgenerous.commons.EqualsUtils;
import com.brightgenerous.commons.HashCodeUtils;
import com.brightgenerous.commons.ToStringUtils;
import com.brightgenerous.csv.delegate.CsvUtility;
import com.brightgenerous.lang.Args;
@SuppressWarnings("deprecation")
public class CsvUtils<T> implements Serializable {
private static final long serialVersionUID = -2226338883387789321L;
public static boolean resolved() {
return CsvUtility.RESOLVED;
}
private final IParseStrategy<T> parseStrategy;
private final IFormatStrategy<T> formatStrategy;
protected CsvUtils(IParseStrategy<T> parseStrategy, IFormatStrategy<T> formatStrategy) {
Args.notNull(parseStrategy, "parseStrategy");
Args.notNull(formatStrategy, "formatStrategy");
this.parseStrategy = parseStrategy;
this.formatStrategy = formatStrategy;
}
public static <T> CsvUtils<T> get(IParseStrategy<T> parseStrategy,
IFormatStrategy<T> formatStrategy) {
return getInstance(parseStrategy, formatStrategy);
}
protected static <T> CsvUtils<T> getInstance(IParseStrategy<T> parseStrategy,
IFormatStrategy<T> formatStrategy) {
return new CsvUtils<>(parseStrategy, formatStrategy);
}
public List<T> parse(String csv) throws CsvException {
return CsvUtility.parse(csv, parseStrategy);
}
public List<T> parse(Reader csv) throws CsvException {
return CsvUtility.parse(csv, parseStrategy);
}
public String format(List<T> datas) throws CsvException {
return CsvUtility.format(datas, formatStrategy);
}
public void format(List<T> datas, Writer out) throws CsvException {
CsvUtility.format(datas, formatStrategy, out);
}
@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();
}
}