package org.embulk.spi;
import java.util.List;
import java.util.Objects;
import com.google.common.collect.ImmutableList;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import org.embulk.spi.type.Type;
public class SchemaConfig
{
private final List<ColumnConfig> columns;
@JsonCreator
public SchemaConfig(List<ColumnConfig> columns)
{
this.columns = columns;
}
@JsonValue
public List<ColumnConfig> getColumns()
{
return columns;
}
public int size()
{
return columns.size();
}
public int getColumnCount()
{
return columns.size();
}
public ColumnConfig getColumn(int index)
{
return columns.get(index);
}
public String getColumnName(int index)
{
return getColumn(index).getName();
}
public Type getColumnType(int index)
{
return getColumn(index).getType();
}
public boolean isEmpty()
{
return columns.isEmpty();
}
public ColumnConfig lookupColumn(String name)
{
for (ColumnConfig c : columns) {
if (c.getName().equals(name)) {
return c;
}
}
throw new SchemaConfigException(String.format("Column '%s' is not found", name));
}
public Schema toSchema()
{
ImmutableList.Builder<Column> builder = ImmutableList.builder();
for (int i=0; i < columns.size(); i++) {
builder.add(columns.get(i).toColumn(i));
}
return new Schema(builder.build());
}
@Override
public boolean equals(Object obj)
{
if (this == obj) {
return true;
}
if (!(obj instanceof SchemaConfig)) {
return false;
}
SchemaConfig other = (SchemaConfig) obj;
return Objects.equals(columns, other.columns);
}
@Override
public int hashCode()
{
return Objects.hashCode(columns);
}
}