package nl.bstoi.poiparser.core.strategy.annotation;
import nl.bstoi.poiparser.core.exception.PoiParserException;
import nl.bstoi.poiparser.core.strategy.AbstractWritePoiParser;
import nl.bstoi.poiparser.core.strategy.CellDescriptor;
import nl.bstoi.poiparser.core.strategy.WritePoiParser;
import nl.bstoi.poiparser.core.strategy.util.TypedList;
import org.apache.commons.io.IOUtils;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
import java.util.Set;
/**
* Hylke Stapersma (codecentric nl)
* hylke.stapersma@codecentric.nl
*/
public class AnnotatedWritePoiParser extends AbstractWritePoiParser implements WritePoiParser {
private final OutputStream outputStream;
public AnnotatedWritePoiParser(final OutputStream outputStream, final Workbook workbook) {
super(workbook);
this.outputStream = outputStream;
}
public void write(final Map<String, TypedList<?>> sheetDataset) throws PoiParserException {
if (null == sheetDataset) throw new IllegalArgumentException("Sheet dataset name cannot be null");
try {
for (final String sheetName : sheetDataset.keySet()) {
final TypedList<?> sheetData = sheetDataset.get(sheetName);
writeSheet(sheetName, sheetData, getCellDescriptorsForGenericList(sheetData));
}
getWorkbook().write(outputStream);
} catch (final IOException e) {
throw new PoiParserException("Error while writing output stream", e);
} finally {
IOUtils.closeQuietly(outputStream);
}
}
private Set<CellDescriptor> getCellDescriptorsForGenericList(final TypedList<?> list) {
final AnnotatedClassDescriber annotatedClassDescriber = AnnotatedClassDescriber.getInstance();
final Set<CellDescriptor> cellDescriptors = annotatedClassDescriber.getCellDescriptorsForClass(list.getType());
return cellDescriptors;
}
}