first commit
This commit is contained in:
142
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillDatasetRun.java
Normal file
142
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillDatasetRun.java
Normal file
@@ -0,0 +1,142 @@
|
||||
package net.sf.jasperreports.engine.fill;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.Map;
|
||||
import net.sf.jasperreports.engine.JRDataSource;
|
||||
import net.sf.jasperreports.engine.JRDatasetParameter;
|
||||
import net.sf.jasperreports.engine.JRDatasetRun;
|
||||
import net.sf.jasperreports.engine.JRException;
|
||||
import net.sf.jasperreports.engine.JRExpression;
|
||||
import net.sf.jasperreports.engine.JRQuery;
|
||||
import net.sf.jasperreports.engine.JRScriptletException;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class JRFillDatasetRun implements JRDatasetRun {
|
||||
private static final Log log = LogFactory.getLog(JRFillDatasetRun.class);
|
||||
|
||||
private final JRBaseFiller filler;
|
||||
|
||||
private final JRFillDataset dataset;
|
||||
|
||||
private JRExpression parametersMapExpression;
|
||||
|
||||
private JRDatasetParameter[] parameters;
|
||||
|
||||
private JRExpression connectionExpression;
|
||||
|
||||
private JRExpression dataSourceExpression;
|
||||
|
||||
public JRFillDatasetRun(JRBaseFiller filler, JRDatasetRun datasetRun, JRFillObjectFactory factory) {
|
||||
factory.put(datasetRun, this);
|
||||
this.filler = filler;
|
||||
this.dataset = (JRFillDataset)filler.datasetMap.get(datasetRun.getDatasetName());
|
||||
this.parametersMapExpression = datasetRun.getParametersMapExpression();
|
||||
this.parameters = datasetRun.getParameters();
|
||||
this.connectionExpression = datasetRun.getConnectionExpression();
|
||||
this.dataSourceExpression = datasetRun.getDataSourceExpression();
|
||||
}
|
||||
|
||||
public void evaluate(JRFillElementDataset elementDataset, byte evaluation) throws JRException {
|
||||
Map parameterValues = JRFillSubreport.getParameterValues(this.filler, this.parametersMapExpression, this.parameters, evaluation, false, (this.dataset.getResourceBundle() != null), false);
|
||||
try {
|
||||
if (this.dataSourceExpression != null) {
|
||||
JRDataSource dataSource = (JRDataSource)this.filler.evaluateExpression(this.dataSourceExpression, evaluation);
|
||||
this.dataset.setDatasourceParameterValue(parameterValues, dataSource);
|
||||
} else if (this.connectionExpression != null) {
|
||||
Connection connection = (Connection)this.filler.evaluateExpression(this.connectionExpression, evaluation);
|
||||
this.dataset.setConnectionParameterValue(parameterValues, connection);
|
||||
}
|
||||
copyConnectionParameter(parameterValues);
|
||||
this.dataset.setParameterValues(parameterValues);
|
||||
this.dataset.initDatasource();
|
||||
this.dataset.filterElementDatasets(elementDataset);
|
||||
this.dataset.initCalculator();
|
||||
iterate();
|
||||
} finally {
|
||||
this.dataset.closeDatasource();
|
||||
this.dataset.restoreElementDatasets();
|
||||
}
|
||||
}
|
||||
|
||||
protected void copyConnectionParameter(Map parameterValues) {
|
||||
JRQuery query = this.dataset.getQuery();
|
||||
if (query != null) {
|
||||
String language = query.getLanguage();
|
||||
if (this.connectionExpression == null && (language.equals("sql") || language.equals("SQL")) && !parameterValues.containsKey("REPORT_CONNECTION")) {
|
||||
JRFillParameter connParam = (JRFillParameter)this.filler.getParametersMap().get("REPORT_CONNECTION");
|
||||
Connection connection = (Connection)connParam.getValue();
|
||||
parameterValues.put("REPORT_CONNECTION", connection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void iterate() throws JRException {
|
||||
this.dataset.start();
|
||||
init();
|
||||
if (this.dataset.next()) {
|
||||
detail();
|
||||
while (this.dataset.next()) {
|
||||
checkInterrupted();
|
||||
group();
|
||||
detail();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkInterrupted() {
|
||||
if (Thread.currentThread().isInterrupted() || this.filler.isInterrupted()) {
|
||||
if (log.isDebugEnabled())
|
||||
log.debug("Fill " + this.filler.fillerId + ": interrupting");
|
||||
this.filler.setInterrupted(true);
|
||||
throw new JRFillInterruptedException();
|
||||
}
|
||||
}
|
||||
|
||||
protected void group() throws JRException, JRScriptletException {
|
||||
this.dataset.calculator.estimateGroupRuptures();
|
||||
this.dataset.scriptlet.callBeforeGroupInit();
|
||||
this.dataset.calculator.initializeVariables((byte)4);
|
||||
this.dataset.scriptlet.callAfterGroupInit();
|
||||
}
|
||||
|
||||
protected void init() throws JRScriptletException, JRException {
|
||||
this.dataset.scriptlet.callBeforeReportInit();
|
||||
this.dataset.calculator.initializeVariables((byte)1);
|
||||
this.dataset.scriptlet.callAfterReportInit();
|
||||
}
|
||||
|
||||
protected void detail() throws JRScriptletException, JRException {
|
||||
this.dataset.scriptlet.callBeforeDetailEval();
|
||||
this.dataset.calculator.calculateVariables();
|
||||
this.dataset.scriptlet.callAfterDetailEval();
|
||||
}
|
||||
|
||||
public String getDatasetName() {
|
||||
return this.dataset.getName();
|
||||
}
|
||||
|
||||
public JRExpression getParametersMapExpression() {
|
||||
return this.parametersMapExpression;
|
||||
}
|
||||
|
||||
public JRDatasetParameter[] getParameters() {
|
||||
return this.parameters;
|
||||
}
|
||||
|
||||
public JRExpression getConnectionExpression() {
|
||||
return this.connectionExpression;
|
||||
}
|
||||
|
||||
public JRExpression getDataSourceExpression() {
|
||||
return this.dataSourceExpression;
|
||||
}
|
||||
|
||||
protected JRFillDataset getDataset() {
|
||||
return this.dataset;
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
return null;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user