package nl.helixsoft.stats; import java.util.List; import nl.helixsoft.recordstream.Record; import nl.helixsoft.recordstream.RecordMetaData; import nl.helixsoft.recordstream.RecordStream; import nl.helixsoft.stats.impl.AbstractDataFrame; public class ColumnBoundDataFrame extends AbstractDataFrame { private List<Column<?>> views; private List<String> rowNames; private int rowNum; private int subHeaderCount; public ColumnBoundDataFrame(List<Column<?>> views, DataFrame parent) { this.views = views; this.rowNames = parent.getRowNames(); this.subHeaderCount = parent.getColumnHeader().getSubHeaderCount(); this.rowNum = rowNames.size(); for (Column<?> view : views) { if (rowNum != view.getSize()) throw new IllegalArgumentException("All columns must have the same length, expected " + rowNum + " found " + view.getSize()); } } @Override public RecordMetaData getMetaData() { // TODO Auto-generated method stub return null; } @Override public DataFrame cut(int... columnIdx) { // TODO Auto-generated method stub return null; } @Override public DataFrame cut(String... columnIdx) { // TODO Auto-generated method stub return null; } @Override public DataFrame select(int... rowIdx) { // TODO Auto-generated method stub return null; } @Override public DataFrame merge(DataFrame that, int onThisColumn, int onThatColumn) { // TODO Auto-generated method stub return null; } @Override public List<String> getColumnNames() { // TODO Auto-generated method stub return null; } @Override public int getColumnIndex(String columnName) { // TODO Auto-generated method stub return 0; } @Override public <T> DataFrame cbind(List<T> column) { // TODO Auto-generated method stub return null; } @Override public DataFrame rbind(Object... row) { // TODO Auto-generated method stub return null; } @Override public RecordStream asRecordStream() { // TODO Auto-generated method stub return null; } @Override public Iterable<Record> asRecordIterable() { // TODO Auto-generated method stub return null; } @Override public int getRowCount() { return rowNum; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return views.get(columnIndex).get(rowIndex); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { // TODO Auto-generated method stub } @Override public List<String> getRowNames() { return rowNames; } @Override public String getRowName(int rowIx) { return rowNames.get(rowIx); } @Override public int getColumnCount() { return views.size(); } @Override public Header getColumnHeader() { return new HeaderView(); } class HeaderView implements Header { @Override public String getColumnName(int colIdx) { return views.get(colIdx).getHeader().toString(); } @Override public Object get(int colIdx) { return views.get(colIdx).getHeader(); } @Override public int getSubHeaderCount() { return subHeaderCount; } @Override public int size() { return views.size(); } @Override public void set(int colIdx, String value) { views.get(colIdx).setHeader(value); } } @Override public <T> Column<T> getColumn(Class<T> clazz, int columnIndex) { return (Column<T>)views.get(columnIndex); } @Override public DataFrame select(List<Integer> rowIdx) { // TODO Auto-generated method stub return null; } @Override public DataFrame setColumnHeader(int colIx, String value) { assert false : " Not yet implemented"; return this; } }