package com.zendesk.maxwell.schema; import com.google.code.or.common.glossary.Column; import com.google.code.or.common.glossary.Row; import com.google.code.or.common.glossary.column.BitColumn; import com.zendesk.maxwell.schema.columndef.ColumnDef; import java.util.Iterator; import java.util.List; public class ColumnWithDefinitionList implements Iterable<ColumnWithDefinition> { private final Table table; private final Row row; private final BitColumn usedColumns; public ColumnWithDefinitionList(Table table, Row row, BitColumn usedColumns) { this.table = table; this.row = row; this.usedColumns = usedColumns; } @Override public Iterator<ColumnWithDefinition> iterator() { return new ColumnWithDefinitionIterator(table, row, usedColumns); } class ColumnWithDefinitionIterator implements Iterator<ColumnWithDefinition> { private final BitColumn usedColumns; private final Iterator<Column> columnIterator; private final List<ColumnDef> columnDefList; private int index; public ColumnWithDefinitionIterator(Table table, Row row, BitColumn usedColumns) { this.columnDefList = table.getColumnList(); this.columnIterator = row.getColumns().iterator(); this.usedColumns = usedColumns; this.index = 0; } @Override public boolean hasNext() { return columnIterator.hasNext(); } @Override public void remove() { throw new UnsupportedOperationException(); } @Override public ColumnWithDefinition next() { while ( index < usedColumns.getLength() ) { if ( usedColumns.get(index) ) { ColumnWithDefinition cd = new ColumnWithDefinition(columnIterator.next(), columnDefList.get(index)); index++; return cd; } else index++; } return null; } } }