package io.github.vmzakharov.ecdataframe.dataset;
import io.github.vmzakharov.ecdataframe.dsl.value.ValueType;
import org.eclipse.collections.api.factory.Lists;
import org.eclipse.collections.api.list.MutableList;
public class CsvSchema
{
private String nullMarker;
private char separator = ',';
private char quoteCharacter = '"';
private final MutableList<CsvSchemaColumn> columns = Lists.mutable.of();
public String getNullMarker()
{
return this.nullMarker;
}
public CsvSchema nullMarker(String nullMarker)
{
this.nullMarker = nullMarker;
return this;
}
public boolean hasNullMarker()
{
return this.nullMarker != null;
}
public char getSeparator()
{
return this.separator;
}
public CsvSchema separator(char separator)
{
this.separator = separator;
return this;
}
public char getQuoteCharacter()
{
return this.quoteCharacter;
}
public CsvSchema quoteCharacter(char quoteCharacter)
{
this.quoteCharacter = quoteCharacter;
return this;
}
public void addColumn(String name, ValueType type)
{
this.addColumn(name, type, null);
}
public void addColumn(String name, ValueType type, String format)
{
CsvSchemaColumn newColumn = new CsvSchemaColumn(this, name, type, format);
this.columns.add(newColumn);
}
public MutableList<CsvSchemaColumn> getColumns()
{
return this.columns;
}
public int columnCount()
{
return this.columns.size();
}
public String stripQuotesIfAny(String aString)
{
if (aString == null || !this.surroundedByQuotes(aString))
{
return aString;
}
return aString.substring(1, aString.length() - 1);
}
public boolean surroundedByQuotes(String aString)
{
if (aString.length() < 2)
{
return false;
}
return (aString.charAt(0) == this.getQuoteCharacter()) && (aString.charAt(aString.length() - 1) == this.getQuoteCharacter());
}
public CsvSchemaColumn columnAt(int columnIndex)
{
return this.columns.get(columnIndex);
}
}