first commit

This commit is contained in:
2025-07-28 13:56:49 +05:30
commit e9eb805edb
3438 changed files with 520990 additions and 0 deletions

View 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;
}
}