package com.brightgenerous.poi.reader;
import static com.brightgenerous.commons.ObjectUtils.*;
import java.util.ArrayList;
import java.util.List;
public class WorkbookReaderBuilder {
private static final ISheetSelector FIRST_SHEET_SELECTOR = new IndexSheetSelector(0);
private final List<SheetStrategyHolder> sheetStrategyHolders = new ArrayList<>();
protected WorkbookReaderBuilder() {
}
public static WorkbookReaderBuilder create() {
return new WorkbookReaderBuilder();
}
public WorkbookReaderBuilder clear() {
sheetStrategyHolders.clear();
return this;
}
public int sheets() {
return sheetStrategyHolders.size();
}
public WorkbookReaderBuilder addSheet(ISheetCollector<?>... collectors) {
return addSheet(null, collectors);
}
public WorkbookReaderBuilder addSheet(ISheetReader sheetReader) {
return addSheet(null, sheetReader);
}
public WorkbookReaderBuilder addSheet(ISheetSelector sheetSelector,
ISheetCollector<?>... collectors) {
return addSheet(sheetSelector, new CollectSheetReader(collectors));
}
public WorkbookReaderBuilder addSheet(ISheetSelector sheetSelector, ISheetReader sheetReader) {
SheetStrategyHolder sheetStrategyHolder = new SheetStrategyHolder();
sheetStrategyHolder.sheetSelector = sheetSelector;
sheetStrategyHolder.sheetReader = sheetReader;
sheetStrategyHolders.add(sheetStrategyHolder);
return this;
}
protected List<ISheetReaderStrategy> getSheetStrategys() {
List<ISheetReaderStrategy> sheets = new ArrayList<>();
for (SheetStrategyHolder holder : sheetStrategyHolders) {
sheets.add(new SheetReaderStrategy(defaultIfNull(holder.sheetSelector,
FIRST_SHEET_SELECTOR), holder.sheetReader));
}
return sheets;
}
public IWorkbookReader build() {
return newWorkbookReader(new WorkbookReaderStrategy(getSheetStrategys()));
}
protected IWorkbookReader newWorkbookReader(IWorkbookReaderStrategy strategy) {
return new WorkbookReader(strategy);
}
protected static class SheetStrategyHolder {
ISheetSelector sheetSelector;
ISheetReader sheetReader;
}
}