first commit
This commit is contained in:
304
hrmsEjb/net/sf/jasperreports/engine/xml/JRXmlLoader.java
Normal file
304
hrmsEjb/net/sf/jasperreports/engine/xml/JRXmlLoader.java
Normal 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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user