package nl.bstoi.poiparser.core.strategy.annotation;
import nl.bstoi.poiparser.core.exception.PoiParserException;
import nl.bstoi.poiparser.core.strategy.AbstractPoiParserFactory;
import nl.bstoi.poiparser.core.strategy.CellDescriptor;
import nl.bstoi.poiparser.core.strategy.ReadPoiParserFactory;
import nl.bstoi.poiparser.core.strategy.ReadPoiParser;
import org.apache.commons.lang.StringUtils;
import java.io.InputStream;
import java.util.Set;
/**
* User: Hylke Stapersma
* E-mail:[ hylke.stapersma@gmail.com]
* Date: 23-06-13
* Time: 13:17
*/
public class AnnotatedReadPoiParserFactory<T> extends AbstractPoiParserFactory implements ReadPoiParserFactory<T> {
private Set<CellDescriptor> overrideCellDescriptors;
private final Class<T> clazz;
public AnnotatedReadPoiParserFactory(final Class<T> clazz) {
this.clazz = clazz;
}
public ReadPoiParser<T> createReadPoiParser(final InputStream excelInputStream, final String sheetName) throws PoiParserException {
if (null == excelInputStream) throw new IllegalArgumentException("Excel input stream cannot be null");
if (StringUtils.isEmpty(sheetName)) throw new IllegalArgumentException("Sheet name cannot be empty");
AnnotatedReadPoiParser<T> annotatedReadPoiParser = new AnnotatedReadPoiParser<T>(getCellDescriptors(), getSheetFromInputStream(excelInputStream, sheetName), clazz);
annotatedReadPoiParser.setIgnoreFirstRow(ignoreFirstRow);
return annotatedReadPoiParser;
}
/**
* Get active cell descriptors
*
* @return unique set of cell descriptions
*/
public Set<CellDescriptor> getCellDescriptors() {
if (null == this.overrideCellDescriptors) {
AnnotatedClassDescriber annotatedClassDescriber = AnnotatedClassDescriber.getInstance();
return annotatedClassDescriber.getCellDescriptorsForClass(clazz);
}
return this.overrideCellDescriptors;
}
public void setOverrideCellDescriptors(final Set<CellDescriptor> overrideCellDescriptors) {
this.overrideCellDescriptors = overrideCellDescriptors;
}
}