public class POISheet implements ISheet {
private Sheet sheet;
private IWorkbook wb;
POISheet(Sheet sheet) {
this.sheet = sheet;
}
@Override
public IRow getRow(int index) {
return newPOIRow(sheet.getRow(index));
}
@Override
public Iterator<IRow> iterator() {
final Iterator<Row> rowIterator = sheet.iterator();
return new Iterator<IRow>() {
@Override
public boolean hasNext() {
return rowIterator.hasNext();
}
@Override
public IRow next() {
Row row = rowIterator.next();
if (null != row) {
return newPOIRow(row);
}
return null;
}
@Override
public void remove() {
}
};
}
@Override
public Iterator<IRow> iterator(final IRowFilter filter) {
final Iterator<Row> rowIterator = sheet.iterator();
return new Iterator<IRow>() {
@Override
public boolean hasNext() {
return rowIterator.hasNext();
}
@Override
public IRow next() {
IRow row = null;
while (rowIterator.hasNext()) {
IRow temp = newPOIRow(rowIterator.next());
if (filter.filter(temp)) {
row = temp;
break;
}
}
return row;
}
@Override
public void remove() {
}
};
}
@Override
public IRow createRow(int index) {
return newPOIRow(sheet.createRow(index));
}
private POIRow newPOIRow(Row row) {
POIRow r = new POIRow(row);
r.setSheet(this);
return r;
}
@Override
public String getName() {
return sheet.getSheetName();
}
@Override
public IWorkbook getWorkbook() {
return wb;
}
void setWorkbook(IWorkbook wb) {
this.wb = wb;
}
@Override
public ISheet setName(String name) {
Workbook workbook = sheet.getWorkbook();
workbook.setSheetName(workbook.getSheetIndex(sheet), name);
return this;
}
}
public class POIRow implements IRow {
private Row row;
private ISheet sheet;
POIRow(Row row) {
this.row = row;
}
@Override
public ICell getCell(String x) {
return getPOICell(x);
}
@Override
public <T> T bind(IRowBinder<T> irb) {
return irb.bind(this);
}
public ICell createCell(String x) {
return createCell(x, ICell.CELL_TYPE_STRING);
}
@Override
public ICell createCell(String x, int cellType) {
return newPOICell(x, cellType);
}
private POICell newPOICell(String x, int cellType) {
POICell cell = new POICell(row.createCell(Initor.LN.get(x), cellType),
x);
cell.setRow(this);
return cell;
}
private POICell getPOICell(String x) {
Cell cell_ = row.getCell(Initor.LN.get(x));
if (cell_ == null) {
cell_ = row.createCell(Initor.LN.get(x),ICell.CELL_TYPE_STRING);
}
POICell cell = new POICell(cell_, x);
cell.setRow(this);
return cell;
}
@Override
public <T> void marshall(IRowMarshaller<T> marshaller, T t) {
marshaller.marshall(this, t);
}
@Override
public int getRowNum() {
return row.getRowNum();
}
@Override
public ISheet getSheet() {
return this.sheet;
}
void setSheet(ISheet sheet) {
this.sheet = sheet;
}
}