![JAR search and dependency download from the Maven repository](/logo.png)
net.sf.jxls.reader.XLSForEachBlockReaderImpl Maven / Gradle / Ivy
package net.sf.jxls.reader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jexl.JexlHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author Leonid Vysochyn
*/
public class XLSForEachBlockReaderImpl extends BaseBlockReader implements XLSLoopBlockReader {
protected final Log log = LogFactory.getLog(getClass());
String items;
String var;
Class varType;
List innerBlockReaders = new ArrayList();
SectionCheck loopBreakCheck;
public XLSForEachBlockReaderImpl() {
}
public XLSForEachBlockReaderImpl(int startRow, int endRow, String items, String var, Class varType) {
this.startRow = startRow;
this.endRow = endRow;
this.items = items;
this.var = var;
this.varType = varType;
}
public XLSReadStatus read(XLSRowCursor cursor, Map beans) {
readStatus.clear();
JexlContext context = JexlHelper.createContext();
context.setVars(beans);
ExpressionCollectionParser parser = new ExpressionCollectionParser( context, items + ";", true );
Collection itemsCollection = parser.getCollection();
while( !loopBreakCheck.isCheckSuccessful(cursor) ){
createNewCollectionItem(itemsCollection, beans);
readInnerBlocks(cursor, beans);
}
cursor.moveBackward();
return readStatus;
}
private void createNewCollectionItem(Collection itemsCollection, Map beans) {
Object obj = null;
try {
obj = varType.newInstance();
}catch (Exception e) {
String message = "Can't create a new collection item for " + items + ". varType = " + varType.getName();
readStatus.addMessage( new XLSReadMessage(message) );
if( !ReaderConfig.getInstance().isSkipErrors() ){
readStatus.setStatusOK( false );
throw new XLSDataReadException(message, readStatus);
}
if( log.isWarnEnabled() ){
log.warn(message);
}
}
itemsCollection.add(obj);
beans.put( var, obj );
}
private void readInnerBlocks(XLSRowCursor cursor, Map beans) {
for (int i = 0; i < innerBlockReaders.size(); i++) {
XLSBlockReader xlsBlockReader = (XLSBlockReader) innerBlockReaders.get(i);
readStatus.mergeReadStatus( xlsBlockReader.read( cursor, beans ) );
cursor.moveForward();
}
}
public void addBlockReader(XLSBlockReader reader) {
innerBlockReaders.add( reader );
}
public List getBlockReaders() {
return innerBlockReaders;
}
public SectionCheck getLoopBreakCondition() {
return loopBreakCheck;
}
public void setLoopBreakCondition(SectionCheck sectionCheck) {
this.loopBreakCheck = sectionCheck;
}
public void setItems(String items) {
this.items = items;
}
public void setVar(String var) {
this.var = var;
}
public void setVarType(Class varType) {
this.varType = varType;
}
public String getItems() {
return items;
}
public String getVar() {
return var;
}
public Class getVarType() {
return varType;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy