package edu.washington.escience.myria.storage; import java.nio.BufferOverflowException; import java.util.Objects; import org.joda.time.DateTime; import java.nio.ByteBuffer; import com.google.common.base.Preconditions; import edu.washington.escience.myria.column.builder.WritableColumn; import edu.washington.escience.myria.util.MyriaUtils; /** * A trivial wrapper to expose a single column of a {@link WritableTable}. */ public final class WritableSubColumn implements WritableColumn { /** The wrapped {@link WritableTable}. */ private final AppendableTable inner; /** The column in {@link #inner} exposed. */ private final int column; /** * Constructs a wrapper to present the specified column of the given table as a {@link WritableColumn}. * * @param table the table to be wrapped * @param column which column this object represents */ public WritableSubColumn(final AppendableTable table, final int column) { inner = Objects.requireNonNull(table, "inner"); this.column = Preconditions.checkElementIndex(column, table.numColumns()); } @Override public WritableColumn appendBoolean(final boolean value) throws BufferOverflowException { inner.putBoolean(column, value); return this; } @Override public WritableColumn appendDateTime(final DateTime value) throws BufferOverflowException { inner.putDateTime(column, value); return this; } @Override public WritableColumn appendDouble(final double value) throws BufferOverflowException { inner.putDouble(column, value); return this; } @Override public WritableColumn appendFloat(final float value) throws BufferOverflowException { inner.putFloat(column, value); return this; } @Override public WritableColumn appendInt(final int value) throws BufferOverflowException { inner.putInt(column, value); return this; } @Override public WritableColumn appendLong(final long value) throws BufferOverflowException { inner.putLong(column, value); return this; } @Override @Deprecated public WritableColumn appendObject(final Object value) throws BufferOverflowException { inner.putObject(column, MyriaUtils.ensureObjectIsValidType(value)); return this; } @Override public WritableColumn appendString(final String value) throws BufferOverflowException { inner.putString(column, value); return this; } @Override public WritableColumn appendBlob(final ByteBuffer value) throws BufferOverflowException { inner.putBlob(column, value); return this; } }