package edu.harvard.i2b2.crc.loader.ejb;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.crc.loader.dao.IObservationFactDAO;
import edu.harvard.i2b2.crc.loader.dao.IUploaderDAOFactory;
import edu.harvard.i2b2.crc.loader.dao.ObservationFactInsertHandle;
import edu.harvard.i2b2.crc.datavo.pdo.ObservationType;
import edu.harvard.i2b2.crc.loader.xml.StartElementListener;
import edu.harvard.i2b2.crc.loader.xml.TypePullParser;
/**
* This program loads observation fact's data from xml file to staging temp
* table.
*
* @author rk903
*
*/
public class ObservationFactXmlDbLoader implements StartElementListener {
private ObservationFactInsertHandle observationFactInsertHandle = null;
private int uploadId = 0;
private String inputXmlFile = null;
private String stagingObservationFactTableName = null;
private int rowCount = 0;
private IUploaderDAOFactory uploaderDaoFactory = null;
// log
private static Log log = LogFactory
.getLog(ObservationFactXmlDbLoader.class);
/**
* Constuctor
*
* @param inputXmlFile
* @param stagingObservationFactTableName
* @param uploadId
*/
public ObservationFactXmlDbLoader(IUploaderDAOFactory uploaderDaoFactory,
String inputXmlFile, String stagingObservationFactTableName,
int uploadId) throws I2B2Exception {
this.uploaderDaoFactory = uploaderDaoFactory;
this.inputXmlFile = inputXmlFile;
this.stagingObservationFactTableName = stagingObservationFactTableName;
this.uploadId = uploadId;
}
/**
* Start upload process.
*
* @throws I2B2Exception
*/
public void doUpload() throws I2B2Exception {
// call temp table batch inserter
IObservationFactDAO observationFactDAO = uploaderDaoFactory
.getObservationDAO();
observationFactInsertHandle = observationFactDAO
.createObservationFactInserter(stagingObservationFactTableName);
TypePullParser parser = new TypePullParser(this, "observation",
ObservationType.class, inputXmlFile);
parser.doParsing();
observationFactInsertHandle.flush();
}
public void process(Object observation) {
rowCount++;
if (rowCount % 1000 == 0) {
log.debug("Loading Observation [" + rowCount + "]");
observationFactInsertHandle.flush();
}
ObservationType observationType = (ObservationType) observation;
observationType.setUploadId(String.valueOf(uploadId));
observationFactInsertHandle
.insertObservationFact((ObservationType) observationType);
}
public int getRowCount() {
return rowCount;
}
}