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,304 @@
package net.sf.jasperreports.engine.xml;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
import net.sf.jasperreports.engine.JRDatasetRun;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRGroup;
import net.sf.jasperreports.engine.JRVariable;
import net.sf.jasperreports.engine.design.JRDesignChart;
import net.sf.jasperreports.engine.design.JRDesignDataset;
import net.sf.jasperreports.engine.design.JRDesignElement;
import net.sf.jasperreports.engine.design.JRDesignElementDataset;
import net.sf.jasperreports.engine.design.JRDesignImage;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JRDesignVariable;
import net.sf.jasperreports.engine.design.JRValidationException;
import net.sf.jasperreports.engine.design.JasperDesign;
import org.apache.commons.digester.Digester;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class JRXmlLoader {
private JasperDesign jasperDesign = null;
private Collection groupReprintedElements = new ArrayList();
private Collection groupEvaluatedImages = new ArrayList();
private Collection groupEvaluatedTextFields = new ArrayList();
private Collection groupEvaluatedCharts = new ArrayList();
private Set groupBoundDatasets = new HashSet();
private List errors = new ArrayList();
private Digester digester = null;
private boolean ignoreConsistencyProblems;
public JRXmlLoader(Digester digester) {
this.digester = digester;
}
public void setJasperDesign(JasperDesign jasperDesign) {
this.jasperDesign = jasperDesign;
}
public Collection getGroupReprintedElements() {
return this.groupReprintedElements;
}
public Collection getGroupEvaluatedImages() {
return this.groupEvaluatedImages;
}
public Collection getGroupEvaluatedTextFields() {
return this.groupEvaluatedTextFields;
}
public Collection getGroupEvaluatedCharts() {
return this.groupEvaluatedCharts;
}
public Set getGroupBoundDatasets() {
return this.groupBoundDatasets;
}
public static JasperDesign load(String sourceFileName) throws JRException {
return load(new File(sourceFileName));
}
public static JasperDesign load(File file) throws JRException {
JasperDesign jasperDesign = null;
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
jasperDesign = load(fis);
} catch (IOException e) {
throw new JRException(e);
} finally {
if (fis != null)
try {
fis.close();
} catch (IOException e) {}
}
return jasperDesign;
}
public static JasperDesign load(InputStream is) throws JRException {
JasperDesign jasperDesign = null;
JRXmlLoader xmlLoader = null;
try {
xmlLoader = new JRXmlLoader(JRXmlDigesterFactory.createDigester());
} catch (ParserConfigurationException e) {
throw new JRException(e);
} catch (SAXException e) {
throw new JRException(e);
}
jasperDesign = xmlLoader.loadXML(is);
return jasperDesign;
}
public JasperDesign loadXML(InputStream is) throws JRException {
return loadXML(new InputSource(is));
}
public JasperDesign loadXML(InputSource is) throws JRException {
try {
this.digester.push(this);
this.digester.parse(is);
} catch (SAXException e) {
throw new JRException(e);
} catch (IOException e) {
throw new JRException(e);
} finally {
this.digester.clear();
}
if (this.errors.size() > 0) {
Exception e = this.errors.get(0);
if (e instanceof JRException)
throw (JRException)e;
throw new JRException(e);
}
assignGroupsToVariables(this.jasperDesign.getMainDesignDataset());
for (Iterator it = this.jasperDesign.getDatasetsList().iterator(); it.hasNext(); ) {
JRDesignDataset dataset = it.next();
assignGroupsToVariables(dataset);
}
assignGroupsToElements();
assignGroupsToImages();
assignGroupsToTextFields();
assignGroupsToCharts();
assignGroupsToDatasets();
return this.jasperDesign;
}
private void assignGroupsToVariables(JRDesignDataset dataset) throws JRException {
JRVariable[] variables = dataset.getVariables();
if (variables != null && variables.length > 0) {
Map groupsMap = dataset.getGroupsMap();
for (int i = 0; i < variables.length; i++) {
JRDesignVariable variable = (JRDesignVariable)variables[i];
if (variable.getResetType() == 4) {
String groupName = null;
JRGroup group = variable.getResetGroup();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(groupName);
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown reset group '" + groupName + "' for variable : " + variable.getName(), variable);
variable.setResetGroup(group);
} else {
variable.setResetGroup(null);
}
if (variable.getIncrementType() == 4) {
String groupName = null;
JRGroup group = variable.getIncrementGroup();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(groupName);
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown increment group '" + groupName + "' for variable : " + variable.getName(), variable);
variable.setIncrementGroup(group);
} else {
variable.setIncrementGroup(null);
}
}
}
}
private void assignGroupsToElements() throws JRException {
Map groupsMap = this.jasperDesign.getGroupsMap();
for (Iterator it = this.groupReprintedElements.iterator(); it.hasNext(); ) {
JRDesignElement element = it.next();
String groupName = null;
JRGroup group = element.getPrintWhenGroupChanges();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(group.getName());
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown reprint group '" + groupName + "' for element.", element);
element.setPrintWhenGroupChanges(group);
}
}
private void assignGroupsToImages() throws JRException {
Map groupsMap = this.jasperDesign.getGroupsMap();
for (Iterator it = this.groupEvaluatedImages.iterator(); it.hasNext(); ) {
JRDesignImage image = it.next();
String groupName = null;
JRGroup group = image.getEvaluationGroup();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(group.getName());
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown evaluation group '" + groupName + "' for image.", image);
image.setEvaluationGroup(group);
}
}
private void assignGroupsToTextFields() throws JRException {
Map groupsMap = this.jasperDesign.getGroupsMap();
for (Iterator it = this.groupEvaluatedTextFields.iterator(); it.hasNext(); ) {
JRDesignTextField textField = it.next();
String groupName = null;
JRGroup group = textField.getEvaluationGroup();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(group.getName());
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown evaluation group '" + groupName + "' for text field.", textField);
textField.setEvaluationGroup(group);
}
}
private void assignGroupsToCharts() throws JRException {
Map groupsMap = this.jasperDesign.getGroupsMap();
for (Iterator it = this.groupEvaluatedCharts.iterator(); it.hasNext(); ) {
JRDesignChart chart = it.next();
String groupName = null;
JRGroup group = chart.getEvaluationGroup();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(group.getName());
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown evaluation group '" + groupName + "' for chart.", chart);
chart.setEvaluationGroup(group);
}
}
private void assignGroupsToDatasets() throws JRException {
for (Iterator it = this.groupBoundDatasets.iterator(); it.hasNext(); ) {
Map groupsMap;
JRDesignElementDataset dataset = it.next();
JRDatasetRun datasetRun = dataset.getDatasetRun();
if (datasetRun == null) {
groupsMap = this.jasperDesign.getGroupsMap();
} else {
Map datasetMap = this.jasperDesign.getDatasetMap();
String datasetName = datasetRun.getDatasetName();
JRDesignDataset subDataset = (JRDesignDataset)datasetMap.get(datasetName);
if (subDataset == null)
throw new JRException("Unknown sub dataset '" + datasetName + "' for chart dataset.");
groupsMap = subDataset.getGroupsMap();
}
if (dataset.getIncrementType() == 4) {
String groupName = null;
JRGroup group = dataset.getIncrementGroup();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(group.getName());
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown increment group '" + groupName + "' for chart dataset.", dataset);
dataset.setIncrementGroup(group);
} else {
dataset.setIncrementGroup(null);
}
if (dataset.getResetType() == 4) {
String groupName = null;
JRGroup group = dataset.getResetGroup();
if (group != null) {
groupName = group.getName();
group = (JRGroup)groupsMap.get(group.getName());
}
if (!this.ignoreConsistencyProblems && group == null)
throw new JRValidationException("Unknown reset group '" + groupName + "' for chart dataset.", dataset);
dataset.setResetGroup(group);
continue;
}
dataset.setResetGroup(null);
}
}
public void addError(Exception e) {
if (!this.ignoreConsistencyProblems)
this.errors.add(e);
}
public boolean isIgnoreConsistencyProblems() {
return this.ignoreConsistencyProblems;
}
public void setIgnoreConsistencyProblems(boolean ignoreConsistencyProblems) {
this.ignoreConsistencyProblems = ignoreConsistencyProblems;
}
}