1538 lines
76 KiB
Java
1538 lines
76 KiB
Java
package net.sf.jasperreports.engine.xml;
|
|
|
|
import java.awt.Color;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStreamWriter;
|
|
import java.io.StringWriter;
|
|
import java.io.Writer;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.SortedSet;
|
|
import net.sf.jasperreports.charts.JRAreaPlot;
|
|
import net.sf.jasperreports.charts.JRBar3DPlot;
|
|
import net.sf.jasperreports.charts.JRBarPlot;
|
|
import net.sf.jasperreports.charts.JRBubblePlot;
|
|
import net.sf.jasperreports.charts.JRCandlestickPlot;
|
|
import net.sf.jasperreports.charts.JRCategoryDataset;
|
|
import net.sf.jasperreports.charts.JRCategorySeries;
|
|
import net.sf.jasperreports.charts.JRChartAxis;
|
|
import net.sf.jasperreports.charts.JRDataRange;
|
|
import net.sf.jasperreports.charts.JRHighLowDataset;
|
|
import net.sf.jasperreports.charts.JRHighLowPlot;
|
|
import net.sf.jasperreports.charts.JRLinePlot;
|
|
import net.sf.jasperreports.charts.JRMeterPlot;
|
|
import net.sf.jasperreports.charts.JRMultiAxisPlot;
|
|
import net.sf.jasperreports.charts.JRPie3DPlot;
|
|
import net.sf.jasperreports.charts.JRPieDataset;
|
|
import net.sf.jasperreports.charts.JRPiePlot;
|
|
import net.sf.jasperreports.charts.JRScatterPlot;
|
|
import net.sf.jasperreports.charts.JRThermometerPlot;
|
|
import net.sf.jasperreports.charts.JRTimePeriodDataset;
|
|
import net.sf.jasperreports.charts.JRTimePeriodSeries;
|
|
import net.sf.jasperreports.charts.JRTimeSeries;
|
|
import net.sf.jasperreports.charts.JRTimeSeriesDataset;
|
|
import net.sf.jasperreports.charts.JRTimeSeriesPlot;
|
|
import net.sf.jasperreports.charts.JRValueDataset;
|
|
import net.sf.jasperreports.charts.JRValueDisplay;
|
|
import net.sf.jasperreports.charts.JRXyDataset;
|
|
import net.sf.jasperreports.charts.JRXySeries;
|
|
import net.sf.jasperreports.charts.JRXyzDataset;
|
|
import net.sf.jasperreports.charts.JRXyzSeries;
|
|
import net.sf.jasperreports.charts.util.JRMeterInterval;
|
|
import net.sf.jasperreports.crosstabs.JRCellContents;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstab;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstabBucket;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstabCell;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstabColumnGroup;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstabDataset;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstabMeasure;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstabParameter;
|
|
import net.sf.jasperreports.crosstabs.JRCrosstabRowGroup;
|
|
import net.sf.jasperreports.crosstabs.design.JRDesignCrosstab;
|
|
import net.sf.jasperreports.engine.JRBand;
|
|
import net.sf.jasperreports.engine.JRBreak;
|
|
import net.sf.jasperreports.engine.JRChart;
|
|
import net.sf.jasperreports.engine.JRChartDataset;
|
|
import net.sf.jasperreports.engine.JRChartPlot;
|
|
import net.sf.jasperreports.engine.JRChild;
|
|
import net.sf.jasperreports.engine.JRDataset;
|
|
import net.sf.jasperreports.engine.JRDatasetParameter;
|
|
import net.sf.jasperreports.engine.JRDatasetRun;
|
|
import net.sf.jasperreports.engine.JRElement;
|
|
import net.sf.jasperreports.engine.JRElementDataset;
|
|
import net.sf.jasperreports.engine.JRElementGroup;
|
|
import net.sf.jasperreports.engine.JREllipse;
|
|
import net.sf.jasperreports.engine.JRException;
|
|
import net.sf.jasperreports.engine.JRField;
|
|
import net.sf.jasperreports.engine.JRFont;
|
|
import net.sf.jasperreports.engine.JRFrame;
|
|
import net.sf.jasperreports.engine.JRGraphicElement;
|
|
import net.sf.jasperreports.engine.JRGroup;
|
|
import net.sf.jasperreports.engine.JRHyperlink;
|
|
import net.sf.jasperreports.engine.JRHyperlinkParameter;
|
|
import net.sf.jasperreports.engine.JRImage;
|
|
import net.sf.jasperreports.engine.JRLine;
|
|
import net.sf.jasperreports.engine.JRParameter;
|
|
import net.sf.jasperreports.engine.JRPropertiesHolder;
|
|
import net.sf.jasperreports.engine.JRPropertiesMap;
|
|
import net.sf.jasperreports.engine.JRPropertyExpression;
|
|
import net.sf.jasperreports.engine.JRQuery;
|
|
import net.sf.jasperreports.engine.JRRectangle;
|
|
import net.sf.jasperreports.engine.JRReport;
|
|
import net.sf.jasperreports.engine.JRReportFont;
|
|
import net.sf.jasperreports.engine.JRReportTemplate;
|
|
import net.sf.jasperreports.engine.JRRuntimeException;
|
|
import net.sf.jasperreports.engine.JRSortField;
|
|
import net.sf.jasperreports.engine.JRStaticText;
|
|
import net.sf.jasperreports.engine.JRStyle;
|
|
import net.sf.jasperreports.engine.JRStyleContainer;
|
|
import net.sf.jasperreports.engine.JRSubreport;
|
|
import net.sf.jasperreports.engine.JRSubreportParameter;
|
|
import net.sf.jasperreports.engine.JRSubreportReturnValue;
|
|
import net.sf.jasperreports.engine.JRTextElement;
|
|
import net.sf.jasperreports.engine.JRTextField;
|
|
import net.sf.jasperreports.engine.JRVariable;
|
|
import net.sf.jasperreports.engine.util.JRXmlWriteHelper;
|
|
import org.jfree.chart.plot.PlotOrientation;
|
|
import org.jfree.data.time.Day;
|
|
|
|
public class JRXmlWriter extends JRXmlBaseWriter {
|
|
private JRReport report = null;
|
|
|
|
private String encoding = null;
|
|
|
|
private Map fontsMap = new HashMap();
|
|
|
|
private XmlWriterVisitor xmlWriterVisitor = new XmlWriterVisitor(this);
|
|
|
|
protected JRXmlWriter(JRReport report, String encoding) {
|
|
this.report = report;
|
|
this.encoding = encoding;
|
|
}
|
|
|
|
public static String writeReport(JRReport report, String encoding) {
|
|
JRXmlWriter writer = new JRXmlWriter(report, encoding);
|
|
StringWriter buffer = new StringWriter();
|
|
try {
|
|
writer.writeReport(buffer);
|
|
} catch (IOException e) {
|
|
throw new JRRuntimeException("Error writing report design.", e);
|
|
}
|
|
return buffer.toString();
|
|
}
|
|
|
|
public static void writeReport(JRReport report, String destFileName, String encoding) throws JRException {
|
|
FileOutputStream fos = null;
|
|
try {
|
|
fos = new FileOutputStream(destFileName);
|
|
Writer out = new OutputStreamWriter(fos, encoding);
|
|
JRXmlWriter writer = new JRXmlWriter(report, encoding);
|
|
writer.writeReport(out);
|
|
} catch (IOException e) {
|
|
throw new JRException("Error writing to file : " + destFileName, e);
|
|
} finally {
|
|
if (fos != null)
|
|
try {
|
|
fos.close();
|
|
} catch (IOException e) {}
|
|
}
|
|
}
|
|
|
|
public static void writeReport(JRReport report, OutputStream outputStream, String encoding) throws JRException {
|
|
try {
|
|
Writer out = new OutputStreamWriter(outputStream, encoding);
|
|
JRXmlWriter writer = new JRXmlWriter(report, encoding);
|
|
writer.writeReport(out);
|
|
} catch (Exception e) {
|
|
throw new JRException("Error writing to OutputStream : " + report.getName(), e);
|
|
}
|
|
}
|
|
|
|
protected void writeReport(Writer out) throws IOException {
|
|
useWriter(new JRXmlWriteHelper(out));
|
|
this.writer.writeProlog(this.encoding);
|
|
this.writer.writePublicDoctype("jasperReport", "-//JasperReports//DTD JasperReport//EN", "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd");
|
|
this.writer.startElement("jasperReport");
|
|
this.writer.addEncodedAttribute("name", this.report.getName());
|
|
this.writer.addEncodedAttribute("language", this.report.getLanguage(), "java");
|
|
this.writer.addAttribute("columnCount", this.report.getColumnCount(), 1);
|
|
this.writer.addAttribute("printOrder", this.report.getPrintOrder(), JRXmlConstants.getPrintOrderMap(), (byte)1);
|
|
this.writer.addAttribute("pageWidth", this.report.getPageWidth());
|
|
this.writer.addAttribute("pageHeight", this.report.getPageHeight());
|
|
this.writer.addAttribute("orientation", this.report.getOrientation(), JRXmlConstants.getOrientationMap(), (byte)1);
|
|
this.writer.addAttribute("whenNoDataType", this.report.getWhenNoDataType(), JRXmlConstants.getWhenNoDataTypeMap(), (byte)1);
|
|
this.writer.addAttribute("columnWidth", this.report.getColumnWidth());
|
|
this.writer.addAttribute("columnSpacing", this.report.getColumnSpacing(), 0);
|
|
this.writer.addAttribute("leftMargin", this.report.getLeftMargin());
|
|
this.writer.addAttribute("rightMargin", this.report.getRightMargin());
|
|
this.writer.addAttribute("topMargin", this.report.getTopMargin());
|
|
this.writer.addAttribute("bottomMargin", this.report.getBottomMargin());
|
|
this.writer.addAttribute("isTitleNewPage", this.report.isTitleNewPage(), false);
|
|
this.writer.addAttribute("isSummaryNewPage", this.report.isSummaryNewPage(), false);
|
|
this.writer.addAttribute("isFloatColumnFooter", this.report.isFloatColumnFooter(), false);
|
|
this.writer.addAttribute("scriptletClass", this.report.getScriptletClass());
|
|
this.writer.addAttribute("formatFactoryClass", this.report.getFormatFactoryClass());
|
|
this.writer.addEncodedAttribute("resourceBundle", this.report.getResourceBundle());
|
|
this.writer.addAttribute("whenResourceMissingType", this.report.getWhenResourceMissingType(), JRXmlConstants.getWhenResourceMissingTypeMap(), (byte)1);
|
|
this.writer.addAttribute("isIgnorePagination", this.report.isIgnorePagination(), false);
|
|
writeProperties((JRPropertiesHolder)this.report);
|
|
String[] imports = this.report.getImports();
|
|
if (imports != null && imports.length > 0)
|
|
for (int i = 0; i < imports.length; i++) {
|
|
String value = imports[i];
|
|
if (value != null) {
|
|
this.writer.startElement("import");
|
|
this.writer.addEncodedAttribute("value", value);
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
writeTemplates();
|
|
JRReportFont[] fonts = this.report.getFonts();
|
|
if (fonts != null && fonts.length > 0)
|
|
for (int i = 0; i < fonts.length; i++) {
|
|
this.fontsMap.put(fonts[i].getName(), fonts[i]);
|
|
writeReportFont(fonts[i]);
|
|
}
|
|
JRStyle[] styles = this.report.getStyles();
|
|
if (styles != null && styles.length > 0)
|
|
for (int i = 0; i < styles.length; i++)
|
|
writeStyle(styles[i]);
|
|
JRDataset[] datasets = this.report.getDatasets();
|
|
if (datasets != null && datasets.length > 0)
|
|
for (int i = 0; i < datasets.length; i++)
|
|
writeDataset(datasets[i]);
|
|
writeDatasetContents(this.report.getMainDataset());
|
|
if (this.report.getBackground() != null) {
|
|
this.writer.startElement("background");
|
|
writeBand(this.report.getBackground());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getTitle() != null) {
|
|
this.writer.startElement("title");
|
|
writeBand(this.report.getTitle());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getPageHeader() != null) {
|
|
this.writer.startElement("pageHeader");
|
|
writeBand(this.report.getPageHeader());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getColumnHeader() != null) {
|
|
this.writer.startElement("columnHeader");
|
|
writeBand(this.report.getColumnHeader());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getDetail() != null) {
|
|
this.writer.startElement("detail");
|
|
writeBand(this.report.getDetail());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getColumnFooter() != null) {
|
|
this.writer.startElement("columnFooter");
|
|
writeBand(this.report.getColumnFooter());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getPageFooter() != null) {
|
|
this.writer.startElement("pageFooter");
|
|
writeBand(this.report.getPageFooter());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getLastPageFooter() != null) {
|
|
this.writer.startElement("lastPageFooter");
|
|
writeBand(this.report.getLastPageFooter());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getSummary() != null) {
|
|
this.writer.startElement("summary");
|
|
writeBand(this.report.getSummary());
|
|
this.writer.closeElement();
|
|
}
|
|
if (this.report.getNoData() != null) {
|
|
this.writer.startElement("noData");
|
|
writeBand(this.report.getNoData());
|
|
this.writer.closeElement();
|
|
}
|
|
this.writer.closeElement();
|
|
out.flush();
|
|
}
|
|
|
|
private void writeProperties(JRPropertiesHolder propertiesHolder) throws IOException {
|
|
if (propertiesHolder.hasProperties()) {
|
|
JRPropertiesMap propertiesMap = propertiesHolder.getPropertiesMap();
|
|
String[] propertyNames = propertiesMap.getPropertyNames();
|
|
if (propertyNames != null && propertyNames.length > 0)
|
|
for (int i = 0; i < propertyNames.length; i++) {
|
|
this.writer.startElement("property");
|
|
this.writer.addEncodedAttribute("name", propertyNames[i]);
|
|
String value = propertiesMap.getProperty(propertyNames[i]);
|
|
if (value != null)
|
|
this.writer.addEncodedAttribute("value", value);
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void writeTemplates() throws IOException {
|
|
JRReportTemplate[] templates = this.report.getTemplates();
|
|
if (templates != null)
|
|
for (int i = 0; i < templates.length; i++) {
|
|
JRReportTemplate template = templates[i];
|
|
writeTemplate(template);
|
|
}
|
|
}
|
|
|
|
protected void writeTemplate(JRReportTemplate template) throws IOException {
|
|
this.writer.writeExpression("template", template.getSourceExpression(), true, String.class.getName());
|
|
}
|
|
|
|
private void writeReportFont(JRReportFont font) throws IOException {
|
|
this.writer.startElement("reportFont");
|
|
this.writer.addEncodedAttribute("name", font.getName());
|
|
this.writer.addAttribute("isDefault", font.isDefault());
|
|
this.writer.addEncodedAttribute("fontName", font.getOwnFontName());
|
|
this.writer.addAttribute("size", font.getOwnFontSize());
|
|
this.writer.addAttribute("isBold", font.isOwnBold());
|
|
this.writer.addAttribute("isItalic", font.isOwnItalic());
|
|
this.writer.addAttribute("isUnderline", font.isOwnUnderline());
|
|
this.writer.addAttribute("isStrikeThrough", font.isOwnStrikeThrough());
|
|
this.writer.addEncodedAttribute("pdfFontName", font.getOwnPdfFontName());
|
|
this.writer.addEncodedAttribute("pdfEncoding", font.getOwnPdfEncoding());
|
|
this.writer.addAttribute("isPdfEmbedded", font.isOwnPdfEmbedded());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeParameter(JRParameter parameter) throws IOException {
|
|
this.writer.startElement("parameter");
|
|
this.writer.addEncodedAttribute("name", parameter.getName());
|
|
this.writer.addAttribute("class", parameter.getValueClassName());
|
|
this.writer.addAttribute("isForPrompting", parameter.isForPrompting(), true);
|
|
writeProperties((JRPropertiesHolder)parameter);
|
|
this.writer.writeCDATAElement("parameterDescription", parameter.getDescription());
|
|
this.writer.writeExpression("defaultValueExpression", parameter.getDefaultValueExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeQuery(JRQuery query) throws IOException {
|
|
this.writer.startElement("queryString");
|
|
this.writer.addEncodedAttribute("language", query.getLanguage(), "sql");
|
|
this.writer.writeCDATA(query.getText());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeField(JRField field) throws IOException {
|
|
this.writer.startElement("field");
|
|
this.writer.addEncodedAttribute("name", field.getName());
|
|
this.writer.addAttribute("class", field.getValueClassName());
|
|
writeProperties((JRPropertiesHolder)field);
|
|
this.writer.writeCDATAElement("fieldDescription", field.getDescription());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeSortField(JRSortField sortField) throws IOException {
|
|
this.writer.startElement("sortField");
|
|
this.writer.addEncodedAttribute("name", sortField.getName());
|
|
this.writer.addAttribute("order", sortField.getOrder(), JRXmlConstants.getSortOrderMap(), (byte)0);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeVariable(JRVariable variable) throws IOException {
|
|
this.writer.startElement("variable");
|
|
this.writer.addEncodedAttribute("name", variable.getName());
|
|
this.writer.addAttribute("class", variable.getValueClassName());
|
|
this.writer.addAttribute("resetType", variable.getResetType(), JRXmlConstants.getResetTypeMap(), (byte)1);
|
|
if (variable.getResetGroup() != null)
|
|
this.writer.addEncodedAttribute("resetGroup", variable.getResetGroup().getName());
|
|
this.writer.addAttribute("incrementType", variable.getIncrementType(), JRXmlConstants.getResetTypeMap(), (byte)5);
|
|
if (variable.getIncrementGroup() != null)
|
|
this.writer.addEncodedAttribute("incrementGroup", variable.getIncrementGroup().getName());
|
|
this.writer.addAttribute("calculation", variable.getCalculation(), JRXmlConstants.getCalculationMap(), (byte)0);
|
|
this.writer.addAttribute("incrementerFactoryClass", variable.getIncrementerFactoryClassName());
|
|
this.writer.writeExpression("variableExpression", variable.getExpression(), false);
|
|
this.writer.writeExpression("initialValueExpression", variable.getInitialValueExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeGroup(JRGroup group) throws IOException {
|
|
this.writer.startElement("group");
|
|
this.writer.addEncodedAttribute("name", group.getName());
|
|
this.writer.addAttribute("isStartNewColumn", group.isStartNewColumn(), false);
|
|
this.writer.addAttribute("isStartNewPage", group.isStartNewPage(), false);
|
|
this.writer.addAttribute("isResetPageNumber", group.isResetPageNumber(), false);
|
|
this.writer.addAttribute("isReprintHeaderOnEachPage", group.isReprintHeaderOnEachPage(), false);
|
|
this.writer.addAttributePositive("minHeightToStartNewPage", group.getMinHeightToStartNewPage());
|
|
this.writer.writeExpression("groupExpression", group.getExpression(), false);
|
|
if (group.getGroupHeader() != null) {
|
|
this.writer.startElement("groupHeader");
|
|
writeBand(group.getGroupHeader());
|
|
this.writer.closeElement();
|
|
}
|
|
if (group.getGroupFooter() != null) {
|
|
this.writer.startElement("groupFooter");
|
|
writeBand(group.getGroupFooter());
|
|
this.writer.closeElement();
|
|
}
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeBand(JRBand band) throws IOException {
|
|
this.writer.startElement("band");
|
|
this.writer.addAttributePositive("height", band.getHeight());
|
|
this.writer.addAttribute("isSplitAllowed", band.isSplitAllowed(), true);
|
|
this.writer.writeExpression("printWhenExpression", band.getPrintWhenExpression(), false);
|
|
List children = band.getChildren();
|
|
if (children != null && children.size() > 0)
|
|
for (int i = 0; i < children.size(); i++)
|
|
((JRChild)children.get(i)).visit(this.xmlWriterVisitor);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeElementGroup(JRElementGroup elementGroup) throws IOException {
|
|
this.writer.startElement("elementGroup");
|
|
List children = elementGroup.getChildren();
|
|
if (children != null && children.size() > 0)
|
|
for (int i = 0; i < children.size(); i++)
|
|
((JRChild)children.get(i)).visit(this.xmlWriterVisitor);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeBreak(JRBreak breakElement) throws IOException {
|
|
this.writer.startElement("break");
|
|
this.writer.addAttribute("type", breakElement.getType(), JRXmlConstants.getBreakTypeMap(), (byte)1);
|
|
writeReportElement((JRElement)breakElement);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeLine(JRLine line) throws IOException {
|
|
this.writer.startElement("line");
|
|
this.writer.addAttribute("direction", line.getDirection(), JRXmlConstants.getDirectionMap(), (byte)1);
|
|
writeReportElement((JRElement)line);
|
|
writeGraphicElement((JRGraphicElement)line);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeReportElement(JRElement element) throws IOException {
|
|
this.writer.startElement("reportElement");
|
|
this.writer.addEncodedAttribute("key", element.getKey());
|
|
writeStyleReferenceAttr((JRStyleContainer)element);
|
|
this.writer.addAttribute("positionType", element.getPositionType(), JRXmlConstants.getPositionTypeMap(), (byte)2);
|
|
this.writer.addAttribute("stretchType", element.getStretchType(), JRXmlConstants.getStretchTypeMap(), (byte)0);
|
|
this.writer.addAttribute("isPrintRepeatedValues", element.isPrintRepeatedValues(), true);
|
|
this.writer.addAttribute("mode", element.getOwnMode(), JRXmlConstants.getModeMap());
|
|
this.writer.addAttribute("x", element.getX());
|
|
this.writer.addAttribute("y", element.getY());
|
|
this.writer.addAttribute("width", element.getWidth());
|
|
this.writer.addAttribute("height", element.getHeight());
|
|
this.writer.addAttribute("isRemoveLineWhenBlank", element.isRemoveLineWhenBlank(), false);
|
|
this.writer.addAttribute("isPrintInFirstWholeBand", element.isPrintInFirstWholeBand(), false);
|
|
this.writer.addAttribute("isPrintWhenDetailOverflows", element.isPrintWhenDetailOverflows(), false);
|
|
if (element.getPrintWhenGroupChanges() != null)
|
|
this.writer.addEncodedAttribute("printWhenGroupChanges", element.getPrintWhenGroupChanges().getName());
|
|
this.writer.addAttribute("forecolor", element.getOwnForecolor());
|
|
this.writer.addAttribute("backcolor", element.getOwnBackcolor());
|
|
writeProperties((JRPropertiesHolder)element);
|
|
writePropertyExpressions(element.getPropertyExpressions());
|
|
this.writer.writeExpression("printWhenExpression", element.getPrintWhenExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writePropertyExpressions(JRPropertyExpression[] propertyExpressions) throws IOException {
|
|
if (propertyExpressions != null)
|
|
for (int i = 0; i < propertyExpressions.length; i++)
|
|
writePropertyExpression(propertyExpressions[i]);
|
|
}
|
|
|
|
protected void writePropertyExpression(JRPropertyExpression propertyExpression) throws IOException {
|
|
String expressionText = propertyExpression.getValueExpression().getText();
|
|
this.writer.writeCDATAElement("propertyExpression", expressionText, "name", propertyExpression.getName());
|
|
}
|
|
|
|
private void writeGraphicElement(JRGraphicElement element) throws IOException {
|
|
this.writer.startElement("graphicElement");
|
|
this.writer.addAttribute("fill", element.getOwnFill(), JRXmlConstants.getFillMap());
|
|
writePen(element.getLinePen());
|
|
this.writer.closeElement(true);
|
|
}
|
|
|
|
public void writeRectangle(JRRectangle rectangle) throws IOException {
|
|
this.writer.startElement("rectangle");
|
|
this.writer.addAttribute("radius", rectangle.getOwnRadius());
|
|
writeReportElement((JRElement)rectangle);
|
|
writeGraphicElement((JRGraphicElement)rectangle);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeEllipse(JREllipse ellipse) throws IOException {
|
|
this.writer.startElement("ellipse");
|
|
writeReportElement((JRElement)ellipse);
|
|
writeGraphicElement((JRGraphicElement)ellipse);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeImage(JRImage image) throws IOException {
|
|
this.writer.startElement("image");
|
|
this.writer.addAttribute("scaleImage", image.getOwnScaleImage(), JRXmlConstants.getScaleImageMap());
|
|
this.writer.addAttribute("hAlign", image.getOwnHorizontalAlignment(), JRXmlConstants.getHorizontalAlignMap());
|
|
this.writer.addAttribute("vAlign", image.getOwnVerticalAlignment(), JRXmlConstants.getVerticalAlignMap());
|
|
this.writer.addAttribute("isUsingCache", image.isOwnUsingCache());
|
|
this.writer.addAttribute("isLazy", image.isLazy(), false);
|
|
this.writer.addAttribute("onErrorType", image.getOnErrorType(), JRXmlConstants.getOnErrorTypeMap(), (byte)1);
|
|
this.writer.addAttribute("evaluationTime", image.getEvaluationTime(), JRXmlConstants.getEvaluationTimeMap(), (byte)1);
|
|
if (image.getEvaluationGroup() != null)
|
|
this.writer.addEncodedAttribute("evaluationGroup", image.getEvaluationGroup().getName());
|
|
this.writer.addEncodedAttribute("hyperlinkType", image.getLinkType());
|
|
this.writer.addAttribute("hyperlinkTarget", image.getHyperlinkTarget(), JRXmlConstants.getHyperlinkTargetMap(), (byte)1);
|
|
this.writer.addAttribute("bookmarkLevel", image.getBookmarkLevel(), 0);
|
|
writeReportElement((JRElement)image);
|
|
writeBox(image.getLineBox());
|
|
writeGraphicElement((JRGraphicElement)image);
|
|
this.writer.writeExpression("imageExpression", image.getExpression(), true);
|
|
this.writer.writeExpression("anchorNameExpression", image.getAnchorNameExpression(), false);
|
|
this.writer.writeExpression("hyperlinkReferenceExpression", image.getHyperlinkReferenceExpression(), false);
|
|
this.writer.writeExpression("hyperlinkAnchorExpression", image.getHyperlinkAnchorExpression(), false);
|
|
this.writer.writeExpression("hyperlinkPageExpression", image.getHyperlinkPageExpression(), false);
|
|
this.writer.writeExpression("hyperlinkTooltipExpression", image.getHyperlinkTooltipExpression(), false);
|
|
writeHyperlinkParameters(image.getHyperlinkParameters());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeStaticText(JRStaticText staticText) throws IOException {
|
|
this.writer.startElement("staticText");
|
|
writeReportElement((JRElement)staticText);
|
|
writeBox(staticText.getLineBox());
|
|
writeTextElement((JRTextElement)staticText);
|
|
this.writer.writeCDATAElement("text", staticText.getText());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeTextElement(JRTextElement textElement) throws IOException {
|
|
this.writer.startElement("textElement");
|
|
this.writer.addAttribute("textAlignment", textElement.getOwnHorizontalAlignment(), JRXmlConstants.getHorizontalAlignMap());
|
|
this.writer.addAttribute("verticalAlignment", textElement.getOwnVerticalAlignment(), JRXmlConstants.getVerticalAlignMap());
|
|
this.writer.addAttribute("rotation", textElement.getOwnRotation(), JRXmlConstants.getRotationMap());
|
|
this.writer.addAttribute("lineSpacing", textElement.getOwnLineSpacing(), JRXmlConstants.getLineSpacingMap());
|
|
this.writer.addAttribute("markup", textElement.getOwnMarkup());
|
|
writeFont((JRFont)textElement);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeFont(JRFont font) throws IOException {
|
|
if (font != null) {
|
|
this.writer.startElement("font");
|
|
if (font.getReportFont() != null) {
|
|
JRFont baseFont = (JRFont)this.fontsMap.get(font.getReportFont().getName());
|
|
if (baseFont != null) {
|
|
this.writer.addEncodedAttribute("reportFont", font.getReportFont().getName());
|
|
} else {
|
|
throw new JRRuntimeException("Referenced report font not found : " + font.getReportFont().getName());
|
|
}
|
|
}
|
|
this.writer.addEncodedAttribute("fontName", font.getOwnFontName());
|
|
this.writer.addAttribute("size", font.getOwnFontSize());
|
|
this.writer.addAttribute("isBold", font.isOwnBold());
|
|
this.writer.addAttribute("isItalic", font.isOwnItalic());
|
|
this.writer.addAttribute("isUnderline", font.isOwnUnderline());
|
|
this.writer.addAttribute("isStrikeThrough", font.isOwnStrikeThrough());
|
|
this.writer.addEncodedAttribute("pdfFontName", font.getOwnPdfFontName());
|
|
this.writer.addEncodedAttribute("pdfEncoding", font.getOwnPdfEncoding());
|
|
this.writer.addAttribute("isPdfEmbedded", font.isOwnPdfEmbedded());
|
|
this.writer.closeElement(true);
|
|
}
|
|
}
|
|
|
|
public void writeTextField(JRTextField textField) throws IOException {
|
|
this.writer.startElement("textField");
|
|
this.writer.addAttribute("isStretchWithOverflow", textField.isStretchWithOverflow(), false);
|
|
this.writer.addAttribute("evaluationTime", textField.getEvaluationTime(), JRXmlConstants.getEvaluationTimeMap(), (byte)1);
|
|
if (textField.getEvaluationGroup() != null)
|
|
this.writer.addEncodedAttribute("evaluationGroup", textField.getEvaluationGroup().getName());
|
|
this.writer.addEncodedAttribute("pattern", textField.getOwnPattern());
|
|
this.writer.addAttribute("isBlankWhenNull", textField.isOwnBlankWhenNull());
|
|
this.writer.addEncodedAttribute("hyperlinkType", textField.getLinkType());
|
|
this.writer.addAttribute("hyperlinkTarget", textField.getHyperlinkTarget(), JRXmlConstants.getHyperlinkTargetMap(), (byte)1);
|
|
this.writer.addAttribute("bookmarkLevel", textField.getBookmarkLevel(), 0);
|
|
writeReportElement((JRElement)textField);
|
|
writeBox(textField.getLineBox());
|
|
writeTextElement((JRTextElement)textField);
|
|
this.writer.writeExpression("textFieldExpression", textField.getExpression(), true);
|
|
this.writer.writeExpression("anchorNameExpression", textField.getAnchorNameExpression(), false);
|
|
this.writer.writeExpression("hyperlinkReferenceExpression", textField.getHyperlinkReferenceExpression(), false);
|
|
this.writer.writeExpression("hyperlinkAnchorExpression", textField.getHyperlinkAnchorExpression(), false);
|
|
this.writer.writeExpression("hyperlinkPageExpression", textField.getHyperlinkPageExpression(), false);
|
|
this.writer.writeExpression("hyperlinkTooltipExpression", textField.getHyperlinkTooltipExpression(), false);
|
|
writeHyperlinkParameters(textField.getHyperlinkParameters());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeSubreport(JRSubreport subreport) throws IOException {
|
|
this.writer.startElement("subreport");
|
|
this.writer.addAttribute("isUsingCache", subreport.isOwnUsingCache());
|
|
writeReportElement((JRElement)subreport);
|
|
this.writer.writeExpression("parametersMapExpression", subreport.getParametersMapExpression(), false);
|
|
JRSubreportParameter[] parameters = subreport.getParameters();
|
|
if (parameters != null && parameters.length > 0)
|
|
for (int i = 0; i < parameters.length; i++)
|
|
writeSubreportParameter(parameters[i]);
|
|
this.writer.writeExpression("connectionExpression", subreport.getConnectionExpression(), false);
|
|
this.writer.writeExpression("dataSourceExpression", subreport.getDataSourceExpression(), false);
|
|
JRSubreportReturnValue[] returnValues = subreport.getReturnValues();
|
|
if (returnValues != null && returnValues.length > 0)
|
|
for (int i = 0; i < returnValues.length; i++)
|
|
writeSubreportReturnValue(returnValues[i]);
|
|
this.writer.writeExpression("subreportExpression", subreport.getExpression(), true);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeSubreportParameter(JRSubreportParameter subreportParameter) throws IOException {
|
|
this.writer.startElement("subreportParameter");
|
|
this.writer.addEncodedAttribute("name", subreportParameter.getName());
|
|
this.writer.writeExpression("subreportParameterExpression", subreportParameter.getExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeDatasetParameter(JRDatasetParameter datasetParameter) throws IOException {
|
|
this.writer.startElement("datasetParameter");
|
|
this.writer.addEncodedAttribute("name", datasetParameter.getName());
|
|
this.writer.writeExpression("datasetParameterExpression", datasetParameter.getExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("chart");
|
|
this.writer.addAttribute("isShowLegend", chart.isShowLegend(), true);
|
|
this.writer.addAttribute("evaluationTime", chart.getEvaluationTime(), JRXmlConstants.getEvaluationTimeMap(), (byte)1);
|
|
if (chart.getEvaluationTime() == 5)
|
|
this.writer.addEncodedAttribute("evaluationGroup", chart.getEvaluationGroup().getName());
|
|
this.writer.addEncodedAttribute("hyperlinkType", chart.getLinkType());
|
|
this.writer.addAttribute("hyperlinkTarget", chart.getHyperlinkTarget(), JRXmlConstants.getHyperlinkTargetMap(), (byte)1);
|
|
this.writer.addAttribute("bookmarkLevel", chart.getBookmarkLevel(), 0);
|
|
this.writer.addAttribute("customizerClass", chart.getCustomizerClass());
|
|
this.writer.addAttribute("renderType", chart.getRenderType());
|
|
writeReportElement((JRElement)chart);
|
|
writeBox(chart.getLineBox());
|
|
this.writer.startElement("chartTitle");
|
|
this.writer.addAttribute("position", chart.getTitlePosition(), JRXmlConstants.getChartEdgeMap(), (byte)1);
|
|
this.writer.addAttribute("color", chart.getOwnTitleColor());
|
|
writeFont(chart.getTitleFont());
|
|
if (chart.getTitleExpression() != null)
|
|
this.writer.writeExpression("titleExpression", chart.getTitleExpression(), false);
|
|
this.writer.closeElement();
|
|
this.writer.startElement("chartSubtitle");
|
|
this.writer.addAttribute("color", chart.getOwnSubtitleColor());
|
|
writeFont(chart.getSubtitleFont());
|
|
if (chart.getSubtitleExpression() != null)
|
|
this.writer.writeExpression("subtitleExpression", chart.getSubtitleExpression(), false);
|
|
this.writer.closeElement();
|
|
this.writer.startElement("chartLegend");
|
|
if (chart.getOwnLegendColor() != null)
|
|
this.writer.addAttribute("textColor", chart.getOwnLegendColor());
|
|
if (chart.getOwnLegendBackgroundColor() != null)
|
|
this.writer.addAttribute("backgroundColor", chart.getOwnLegendBackgroundColor());
|
|
this.writer.addAttribute("position", chart.getLegendPosition(), JRXmlConstants.getChartEdgeMap(), (byte)2);
|
|
writeFont(chart.getLegendFont());
|
|
this.writer.closeElement();
|
|
this.writer.writeExpression("anchorNameExpression", chart.getAnchorNameExpression(), false);
|
|
this.writer.writeExpression("hyperlinkReferenceExpression", chart.getHyperlinkReferenceExpression(), false);
|
|
this.writer.writeExpression("hyperlinkAnchorExpression", chart.getHyperlinkAnchorExpression(), false);
|
|
this.writer.writeExpression("hyperlinkPageExpression", chart.getHyperlinkPageExpression(), false);
|
|
this.writer.writeExpression("hyperlinkTooltipExpression", chart.getHyperlinkTooltipExpression(), false);
|
|
writeHyperlinkParameters(chart.getHyperlinkParameters());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeElementDataset(JRElementDataset dataset) throws IOException {
|
|
this.writer.startElement("dataset");
|
|
this.writer.addAttribute("resetType", dataset.getResetType(), JRXmlConstants.getResetTypeMap(), (byte)1);
|
|
if (dataset.getResetType() == 4)
|
|
this.writer.addEncodedAttribute("resetGroup", dataset.getResetGroup().getName());
|
|
this.writer.addAttribute("incrementType", dataset.getIncrementType(), JRXmlConstants.getResetTypeMap(), (byte)5);
|
|
if (dataset.getIncrementType() == 4)
|
|
this.writer.addEncodedAttribute("incrementGroup", dataset.getIncrementGroup().getName());
|
|
this.writer.writeExpression("incrementWhenExpression", dataset.getIncrementWhenExpression(), false);
|
|
JRDatasetRun datasetRun = dataset.getDatasetRun();
|
|
if (datasetRun != null)
|
|
writeDatasetRun(datasetRun);
|
|
this.writer.closeElement(true);
|
|
}
|
|
|
|
private void writeCategoryDataSet(JRCategoryDataset dataset) throws IOException {
|
|
this.writer.startElement("categoryDataset");
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
JRCategorySeries[] categorySeries = dataset.getSeries();
|
|
if (categorySeries != null && categorySeries.length > 0)
|
|
for (int i = 0; i < categorySeries.length; i++)
|
|
writeCategorySeries(categorySeries[i]);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeTimeSeriesDataset(JRTimeSeriesDataset dataset) throws IOException {
|
|
this.writer.startElement("timeSeriesDataset");
|
|
if (dataset.getTimePeriod() != null && !Day.class.getName().equals(dataset.getTimePeriod().getName()))
|
|
this.writer.addAttribute("timePeriod", JRXmlConstants.getTimePeriodName(dataset.getTimePeriod()));
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
JRTimeSeries[] timeSeries = dataset.getSeries();
|
|
if (timeSeries != null && timeSeries.length > 0)
|
|
for (int i = 0; i < timeSeries.length; i++)
|
|
writeTimeSeries(timeSeries[i]);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeTimePeriodDataset(JRTimePeriodDataset dataset) throws IOException {
|
|
this.writer.startElement("timePeriodDataset");
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
JRTimePeriodSeries[] timePeriodSeries = dataset.getSeries();
|
|
if (timePeriodSeries != null && timePeriodSeries.length > 0)
|
|
for (int i = 0; i < timePeriodSeries.length; i++)
|
|
writeTimePeriodSeries(timePeriodSeries[i]);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeCategorySeries(JRCategorySeries categorySeries) throws IOException {
|
|
this.writer.startElement("categorySeries");
|
|
this.writer.writeExpression("seriesExpression", categorySeries.getSeriesExpression(), false);
|
|
this.writer.writeExpression("categoryExpression", categorySeries.getCategoryExpression(), false);
|
|
this.writer.writeExpression("valueExpression", categorySeries.getValueExpression(), false);
|
|
this.writer.writeExpression("labelExpression", categorySeries.getLabelExpression(), false);
|
|
writeHyperlink("itemHyperlink", categorySeries.getItemHyperlink());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeXyzDataset(JRXyzDataset dataset) throws IOException {
|
|
this.writer.startElement("xyzDataset");
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
JRXyzSeries[] series = dataset.getSeries();
|
|
if (series != null && series.length > 0)
|
|
for (int i = 0; i < series.length; i++)
|
|
writeXyzSeries(series[i]);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeXyzSeries(JRXyzSeries series) throws IOException {
|
|
this.writer.startElement("xyzSeries");
|
|
this.writer.writeExpression("seriesExpression", series.getSeriesExpression(), false);
|
|
this.writer.writeExpression("xValueExpression", series.getXValueExpression(), false);
|
|
this.writer.writeExpression("yValueExpression", series.getYValueExpression(), false);
|
|
this.writer.writeExpression("zValueExpression", series.getZValueExpression(), false);
|
|
writeHyperlink("itemHyperlink", series.getItemHyperlink());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeXySeries(JRXySeries xySeries) throws IOException {
|
|
this.writer.startElement("xySeries");
|
|
this.writer.writeExpression("seriesExpression", xySeries.getSeriesExpression(), false);
|
|
this.writer.writeExpression("xValueExpression", xySeries.getXValueExpression(), false);
|
|
this.writer.writeExpression("yValueExpression", xySeries.getYValueExpression(), false);
|
|
this.writer.writeExpression("labelExpression", xySeries.getLabelExpression(), false);
|
|
writeHyperlink("itemHyperlink", xySeries.getItemHyperlink());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeXyDataset(JRXyDataset dataset) throws IOException {
|
|
this.writer.startElement("xyDataset");
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
JRXySeries[] xySeries = dataset.getSeries();
|
|
if (xySeries != null && xySeries.length > 0)
|
|
for (int i = 0; i < xySeries.length; i++)
|
|
writeXySeries(xySeries[i]);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeTimeSeries(JRTimeSeries timeSeries) throws IOException {
|
|
this.writer.startElement("timeSeries");
|
|
this.writer.writeExpression("seriesExpression", timeSeries.getSeriesExpression(), false);
|
|
this.writer.writeExpression("timePeriodExpression", timeSeries.getTimePeriodExpression(), false);
|
|
this.writer.writeExpression("valueExpression", timeSeries.getValueExpression(), false);
|
|
this.writer.writeExpression("labelExpression", timeSeries.getLabelExpression(), false);
|
|
writeHyperlink("itemHyperlink", timeSeries.getItemHyperlink());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeTimePeriodSeries(JRTimePeriodSeries timePeriodSeries) throws IOException {
|
|
this.writer.startElement("timePeriodSeries");
|
|
this.writer.writeExpression("seriesExpression", timePeriodSeries.getSeriesExpression(), false);
|
|
this.writer.writeExpression("startDateExpression", timePeriodSeries.getStartDateExpression(), false);
|
|
this.writer.writeExpression("endDateExpression", timePeriodSeries.getEndDateExpression(), false);
|
|
this.writer.writeExpression("valueExpression", timePeriodSeries.getValueExpression(), false);
|
|
this.writer.writeExpression("labelExpression", timePeriodSeries.getLabelExpression(), false);
|
|
writeHyperlink("itemHyperlink", timePeriodSeries.getItemHyperlink());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writePieDataset(JRPieDataset dataset) throws IOException {
|
|
this.writer.startElement("pieDataset");
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
this.writer.writeExpression("keyExpression", dataset.getKeyExpression(), false);
|
|
this.writer.writeExpression("valueExpression", dataset.getValueExpression(), false);
|
|
this.writer.writeExpression("labelExpression", dataset.getLabelExpression(), false);
|
|
writeHyperlink("sectionHyperlink", dataset.getSectionHyperlink());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeValueDataset(JRValueDataset dataset) throws IOException {
|
|
this.writer.startElement("valueDataset");
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
this.writer.writeExpression("valueExpression", dataset.getValueExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeValueDisplay(JRValueDisplay valueDisplay) throws IOException {
|
|
this.writer.startElement("valueDisplay");
|
|
this.writer.addAttribute("color", valueDisplay.getColor());
|
|
this.writer.addAttribute("mask", valueDisplay.getMask());
|
|
writeFont(valueDisplay.getFont());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeDataRange(JRDataRange dataRange) throws IOException {
|
|
this.writer.startElement("dataRange");
|
|
this.writer.writeExpression("lowExpression", dataRange.getLowExpression(), false);
|
|
this.writer.writeExpression("highExpression", dataRange.getHighExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeMeterInterval(JRMeterInterval interval) throws IOException {
|
|
this.writer.startElement("meterInterval");
|
|
this.writer.addAttribute("label", interval.getLabel());
|
|
this.writer.addAttribute("color", interval.getBackgroundColor());
|
|
this.writer.addAttribute("alpha", interval.getAlpha());
|
|
writeDataRange(interval.getDataRange());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeSeriesColors(SortedSet seriesColors) throws IOException {
|
|
if (seriesColors == null || seriesColors.size() == 0)
|
|
return;
|
|
JRChartPlot.JRSeriesColor[] colors = (JRChartPlot.JRSeriesColor[])seriesColors.toArray((Object[])new JRChartPlot.JRSeriesColor[0]);
|
|
for (int i = 0; i < colors.length; i++) {
|
|
this.writer.startElement("seriesColor");
|
|
this.writer.addAttribute("seriesOrder", colors[i].getSeriesOrder());
|
|
this.writer.addAttribute("color", colors[i].getColor());
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
|
|
private void writeChartAxis(JRChartAxis chartAxis) throws IOException {
|
|
this.writer.startElement("axis");
|
|
this.writer.addAttribute("position", chartAxis.getPosition(), JRXmlConstants.getAxisPositionMap(), (byte)1);
|
|
writeChartTag(chartAxis.getChart());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writePlot(JRChartPlot plot) throws IOException {
|
|
this.writer.startElement("plot");
|
|
this.writer.addAttribute("backcolor", plot.getOwnBackcolor());
|
|
this.writer.addAttribute("orientation", plot.getOrientation(), JRXmlConstants.getPlotOrientationMap(), PlotOrientation.VERTICAL);
|
|
this.writer.addAttribute("backgroundAlpha", plot.getBackgroundAlpha(), 1.0F);
|
|
this.writer.addAttribute("foregroundAlpha", plot.getForegroundAlpha(), 1.0F);
|
|
this.writer.addAttribute("labelRotation", plot.getLabelRotation(), 0.0D);
|
|
writeSeriesColors(plot.getSeriesColors());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writePieChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("pieChart");
|
|
writeChart(chart);
|
|
writePieDataset((JRPieDataset)chart.getDataset());
|
|
JRPiePlot plot = (JRPiePlot)chart.getPlot();
|
|
this.writer.startElement("piePlot");
|
|
this.writer.addAttribute("isCircular", plot.isCircular(), false);
|
|
writePlot(chart.getPlot());
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writePie3DChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("pie3DChart");
|
|
writeChart(chart);
|
|
writePieDataset((JRPieDataset)chart.getDataset());
|
|
JRPie3DPlot plot = (JRPie3DPlot)chart.getPlot();
|
|
this.writer.startElement("pie3DPlot");
|
|
this.writer.addAttribute("depthFactor", plot.getDepthFactor(), 0.2D);
|
|
this.writer.addAttribute("isCircular", plot.isCircular(), false);
|
|
writePlot(chart.getPlot());
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeAxisFormat(String axisFormatElementName, JRFont axisLabelFont, Color axisLabelColor, JRFont axisTickLabelFont, Color axisTickLabelColor, String axisTickLabelMask, Color axisLineColor) throws IOException {
|
|
if (axisLabelFont == null && axisLabelColor == null && axisTickLabelFont == null && axisTickLabelColor == null && axisLineColor == null)
|
|
return;
|
|
this.writer.startElement(axisFormatElementName);
|
|
this.writer.startElement("axisFormat");
|
|
this.writer.addAttribute("labelColor", axisLabelColor);
|
|
this.writer.addAttribute("tickLabelColor", axisTickLabelColor);
|
|
this.writer.addAttribute("tickLabelMask", axisTickLabelMask);
|
|
this.writer.addAttribute("axisLineColor", axisLineColor);
|
|
if (axisLabelFont != null) {
|
|
this.writer.startElement("labelFont");
|
|
writeFont(axisLabelFont);
|
|
this.writer.closeElement();
|
|
}
|
|
if (axisTickLabelFont != null) {
|
|
this.writer.startElement("tickLabelFont");
|
|
writeFont(axisTickLabelFont);
|
|
this.writer.closeElement();
|
|
}
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeBarPlot(JRBarPlot plot) throws IOException {
|
|
this.writer.startElement("barPlot");
|
|
this.writer.addAttribute("isShowLabels", plot.isShowLabels(), false);
|
|
this.writer.addAttribute("isShowTickLabels", plot.isShowTickLabels(), true);
|
|
this.writer.addAttribute("isShowTickMarks", plot.isShowTickMarks(), true);
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("categoryAxisLabelExpression", plot.getCategoryAxisLabelExpression(), false);
|
|
writeAxisFormat("categoryAxisFormat", plot.getCategoryAxisLabelFont(), plot.getOwnCategoryAxisLabelColor(), plot.getCategoryAxisTickLabelFont(), plot.getOwnCategoryAxisTickLabelColor(), plot.getCategoryAxisTickLabelMask(), plot.getOwnCategoryAxisLineColor());
|
|
this.writer.writeExpression("valueAxisLabelExpression", plot.getValueAxisLabelExpression(), false);
|
|
writeAxisFormat("valueAxisFormat", plot.getValueAxisLabelFont(), plot.getOwnValueAxisLabelColor(), plot.getValueAxisTickLabelFont(), plot.getOwnValueAxisTickLabelColor(), plot.getValueAxisTickLabelMask(), plot.getOwnValueAxisLineColor());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeBubblePlot(JRBubblePlot plot) throws IOException {
|
|
this.writer.startElement("bubblePlot");
|
|
this.writer.addAttribute("scaleType", plot.getScaleType(), JRXmlConstants.getScaleTypeMap());
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("xAxisLabelExpression", plot.getXAxisLabelExpression(), false);
|
|
writeAxisFormat("xAxisFormat", plot.getXAxisLabelFont(), plot.getOwnXAxisLabelColor(), plot.getXAxisTickLabelFont(), plot.getOwnXAxisTickLabelColor(), plot.getXAxisTickLabelMask(), plot.getOwnXAxisLineColor());
|
|
this.writer.writeExpression("yAxisLabelExpression", plot.getYAxisLabelExpression(), false);
|
|
writeAxisFormat("yAxisFormat", plot.getYAxisLabelFont(), plot.getOwnYAxisLabelColor(), plot.getYAxisTickLabelFont(), plot.getOwnYAxisTickLabelColor(), plot.getYAxisTickLabelMask(), plot.getOwnYAxisLineColor());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeLinePlot(JRLinePlot plot) throws IOException {
|
|
this.writer.startElement("linePlot");
|
|
this.writer.addAttribute("isShowLines", plot.isShowLines(), true);
|
|
this.writer.addAttribute("isShowShapes", plot.isShowShapes(), true);
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("categoryAxisLabelExpression", plot.getCategoryAxisLabelExpression(), false);
|
|
writeAxisFormat("categoryAxisFormat", plot.getCategoryAxisLabelFont(), plot.getOwnCategoryAxisLabelColor(), plot.getCategoryAxisTickLabelFont(), plot.getOwnCategoryAxisTickLabelColor(), plot.getCategoryAxisTickLabelMask(), plot.getOwnCategoryAxisLineColor());
|
|
this.writer.writeExpression("valueAxisLabelExpression", plot.getValueAxisLabelExpression(), false);
|
|
writeAxisFormat("valueAxisFormat", plot.getValueAxisLabelFont(), plot.getOwnValueAxisLabelColor(), plot.getValueAxisTickLabelFont(), plot.getOwnValueAxisTickLabelColor(), plot.getValueAxisTickLabelMask(), plot.getOwnValueAxisLineColor());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeTimeSeriesPlot(JRTimeSeriesPlot plot) throws IOException {
|
|
this.writer.startElement("timeSeriesPlot");
|
|
this.writer.addAttribute("isShowLines", plot.isShowLines(), true);
|
|
this.writer.addAttribute("isShowShapes", plot.isShowShapes(), true);
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("timeAxisLabelExpression", plot.getTimeAxisLabelExpression(), false);
|
|
writeAxisFormat("timeAxisFormat", plot.getTimeAxisLabelFont(), plot.getOwnTimeAxisLabelColor(), plot.getTimeAxisTickLabelFont(), plot.getOwnTimeAxisTickLabelColor(), plot.getTimeAxisTickLabelMask(), plot.getOwnTimeAxisLineColor());
|
|
this.writer.writeExpression("valueAxisLabelExpression", plot.getValueAxisLabelExpression(), false);
|
|
writeAxisFormat("valueAxisFormat", plot.getValueAxisLabelFont(), plot.getOwnValueAxisLabelColor(), plot.getValueAxisTickLabelFont(), plot.getOwnValueAxisTickLabelColor(), plot.getValueAxisTickLabelMask(), plot.getOwnValueAxisLineColor());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeBar3DPlot(JRBar3DPlot plot) throws IOException {
|
|
this.writer.startElement("bar3DPlot");
|
|
this.writer.addAttribute("isShowLabels", plot.isShowLabels(), false);
|
|
this.writer.addAttribute("xOffset", plot.getXOffset(), 12.0D);
|
|
this.writer.addAttribute("yOffset", plot.getYOffset(), 8.0D);
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("categoryAxisLabelExpression", plot.getCategoryAxisLabelExpression(), false);
|
|
writeAxisFormat("categoryAxisFormat", plot.getCategoryAxisLabelFont(), plot.getOwnCategoryAxisLabelColor(), plot.getCategoryAxisTickLabelFont(), plot.getOwnCategoryAxisTickLabelColor(), plot.getCategoryAxisTickLabelMask(), plot.getOwnCategoryAxisLineColor());
|
|
this.writer.writeExpression("valueAxisLabelExpression", plot.getValueAxisLabelExpression(), false);
|
|
writeAxisFormat("valueAxisFormat", plot.getValueAxisLabelFont(), plot.getOwnValueAxisLabelColor(), plot.getValueAxisTickLabelFont(), plot.getOwnValueAxisTickLabelColor(), plot.getValueAxisTickLabelMask(), plot.getOwnValueAxisLineColor());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeBarChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("barChart");
|
|
writeChart(chart);
|
|
writeCategoryDataSet((JRCategoryDataset)chart.getDataset());
|
|
writeBarPlot((JRBarPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeBar3DChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("bar3DChart");
|
|
writeChart(chart);
|
|
writeCategoryDataSet((JRCategoryDataset)chart.getDataset());
|
|
writeBar3DPlot((JRBar3DPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeBubbleChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("bubbleChart");
|
|
writeChart(chart);
|
|
writeXyzDataset((JRXyzDataset)chart.getDataset());
|
|
writeBubblePlot((JRBubblePlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeStackedBarChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("stackedBarChart");
|
|
writeChart(chart);
|
|
writeCategoryDataSet((JRCategoryDataset)chart.getDataset());
|
|
writeBarPlot((JRBarPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeStackedBar3DChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("stackedBar3DChart");
|
|
writeChart(chart);
|
|
writeCategoryDataSet((JRCategoryDataset)chart.getDataset());
|
|
writeBar3DPlot((JRBar3DPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeLineChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("lineChart");
|
|
writeChart(chart);
|
|
writeCategoryDataSet((JRCategoryDataset)chart.getDataset());
|
|
writeLinePlot((JRLinePlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeTimeSeriesChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("timeSeriesChart");
|
|
writeChart(chart);
|
|
writeTimeSeriesDataset((JRTimeSeriesDataset)chart.getDataset());
|
|
writeTimeSeriesPlot((JRTimeSeriesPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeHighLowDataset(JRHighLowDataset dataset) throws IOException {
|
|
this.writer.startElement("highLowDataset");
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
this.writer.writeExpression("seriesExpression", dataset.getSeriesExpression(), false);
|
|
this.writer.writeExpression("dateExpression", dataset.getDateExpression(), false);
|
|
this.writer.writeExpression("highExpression", dataset.getHighExpression(), false);
|
|
this.writer.writeExpression("lowExpression", dataset.getLowExpression(), false);
|
|
this.writer.writeExpression("openExpression", dataset.getOpenExpression(), false);
|
|
this.writer.writeExpression("closeExpression", dataset.getCloseExpression(), false);
|
|
this.writer.writeExpression("volumeExpression", dataset.getVolumeExpression(), false);
|
|
writeHyperlink("itemHyperlink", dataset.getItemHyperlink());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeHighLowChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("highLowChart");
|
|
writeChart(chart);
|
|
writeHighLowDataset((JRHighLowDataset)chart.getDataset());
|
|
JRHighLowPlot plot = (JRHighLowPlot)chart.getPlot();
|
|
this.writer.startElement("highLowPlot");
|
|
this.writer.addAttribute("isShowOpenTicks", plot.isShowOpenTicks(), true);
|
|
this.writer.addAttribute("isShowCloseTicks", plot.isShowCloseTicks(), true);
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("timeAxisLabelExpression", plot.getTimeAxisLabelExpression(), false);
|
|
writeAxisFormat("timeAxisFormat", plot.getTimeAxisLabelFont(), plot.getOwnTimeAxisLabelColor(), plot.getTimeAxisTickLabelFont(), plot.getOwnTimeAxisTickLabelColor(), plot.getTimeAxisTickLabelMask(), plot.getOwnTimeAxisLineColor());
|
|
this.writer.writeExpression("valueAxisLabelExpression", plot.getValueAxisLabelExpression(), false);
|
|
writeAxisFormat("valueAxisFormat", plot.getValueAxisLabelFont(), plot.getOwnValueAxisLabelColor(), plot.getValueAxisTickLabelFont(), plot.getOwnValueAxisTickLabelColor(), plot.getValueAxisTickLabelMask(), plot.getOwnValueAxisLineColor());
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeCandlestickChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("candlestickChart");
|
|
writeChart(chart);
|
|
writeHighLowDataset((JRHighLowDataset)chart.getDataset());
|
|
JRCandlestickPlot plot = (JRCandlestickPlot)chart.getPlot();
|
|
this.writer.startElement("candlestickPlot");
|
|
this.writer.addAttribute("isShowVolume", plot.isShowVolume(), true);
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("timeAxisLabelExpression", plot.getTimeAxisLabelExpression(), false);
|
|
writeAxisFormat("timeAxisFormat", plot.getTimeAxisLabelFont(), plot.getOwnTimeAxisLabelColor(), plot.getTimeAxisTickLabelFont(), plot.getOwnTimeAxisTickLabelColor(), plot.getTimeAxisTickLabelMask(), plot.getOwnTimeAxisLineColor());
|
|
this.writer.writeExpression("valueAxisLabelExpression", plot.getValueAxisLabelExpression(), false);
|
|
writeAxisFormat("valueAxisFormat", plot.getValueAxisLabelFont(), plot.getOwnValueAxisLabelColor(), plot.getValueAxisTickLabelFont(), plot.getOwnValueAxisTickLabelColor(), plot.getValueAxisTickLabelMask(), plot.getOwnValueAxisLineColor());
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeAreaPlot(JRAreaPlot plot) throws IOException {
|
|
this.writer.startElement("areaPlot");
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("categoryAxisLabelExpression", plot.getCategoryAxisLabelExpression(), false);
|
|
writeAxisFormat("categoryAxisFormat", plot.getCategoryAxisLabelFont(), plot.getOwnCategoryAxisLabelColor(), plot.getCategoryAxisTickLabelFont(), plot.getOwnCategoryAxisTickLabelColor(), plot.getCategoryAxisTickLabelMask(), plot.getOwnCategoryAxisLineColor());
|
|
this.writer.writeExpression("valueAxisLabelExpression", plot.getValueAxisLabelExpression(), false);
|
|
writeAxisFormat("valueAxisFormat", plot.getValueAxisLabelFont(), plot.getOwnValueAxisLabelColor(), plot.getValueAxisTickLabelFont(), plot.getOwnValueAxisTickLabelColor(), plot.getValueAxisTickLabelMask(), plot.getOwnValueAxisLineColor());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeAreaChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("areaChart");
|
|
writeChart(chart);
|
|
writeCategoryDataSet((JRCategoryDataset)chart.getDataset());
|
|
writeAreaPlot((JRAreaPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeScatterPlot(JRScatterPlot plot) throws IOException {
|
|
this.writer.startElement("scatterPlot");
|
|
this.writer.addAttribute("isShowLines", plot.isShowLines(), true);
|
|
this.writer.addAttribute("isShowShapes", plot.isShowShapes(), true);
|
|
writePlot((JRChartPlot)plot);
|
|
this.writer.writeExpression("xAxisLabelExpression", plot.getXAxisLabelExpression(), false);
|
|
writeAxisFormat("xAxisFormat", plot.getXAxisLabelFont(), plot.getOwnXAxisLabelColor(), plot.getXAxisTickLabelFont(), plot.getOwnXAxisTickLabelColor(), plot.getXAxisTickLabelMask(), plot.getOwnXAxisLineColor());
|
|
this.writer.writeExpression("yAxisLabelExpression", plot.getYAxisLabelExpression(), false);
|
|
writeAxisFormat("yAxisFormat", plot.getYAxisLabelFont(), plot.getOwnYAxisLabelColor(), plot.getYAxisTickLabelFont(), plot.getOwnYAxisTickLabelColor(), plot.getYAxisTickLabelMask(), plot.getOwnYAxisLineColor());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeScatterChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("scatterChart");
|
|
writeChart(chart);
|
|
writeXyDataset((JRXyDataset)chart.getDataset());
|
|
writeScatterPlot((JRScatterPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeXyAreaChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("xyAreaChart");
|
|
writeChart(chart);
|
|
writeXyDataset((JRXyDataset)chart.getDataset());
|
|
writeAreaPlot((JRAreaPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeXyBarChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("xyBarChart");
|
|
writeChart(chart);
|
|
JRChartDataset dataset = chart.getDataset();
|
|
if (dataset.getDatasetType() == 6) {
|
|
writeTimeSeriesDataset((JRTimeSeriesDataset)dataset);
|
|
} else if (dataset.getDatasetType() == 5) {
|
|
writeTimePeriodDataset((JRTimePeriodDataset)dataset);
|
|
} else if (dataset.getDatasetType() == 3) {
|
|
writeXyDataset((JRXyDataset)dataset);
|
|
}
|
|
writeBarPlot((JRBarPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeXyLineChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("xyLineChart");
|
|
writeChart(chart);
|
|
writeXyDataset((JRXyDataset)chart.getDataset());
|
|
writeLinePlot((JRLinePlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeMeterChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("meterChart");
|
|
writeChart(chart);
|
|
writeValueDataset((JRValueDataset)chart.getDataset());
|
|
JRMeterPlot plot = (JRMeterPlot)chart.getPlot();
|
|
this.writer.startElement("meterPlot");
|
|
this.writer.addAttribute("shape", plot.getShape(), JRXmlConstants.getMeterShapeMap(), (byte)2);
|
|
this.writer.addAttribute("angle", plot.getMeterAngle());
|
|
this.writer.addAttribute("units", plot.getUnits());
|
|
this.writer.addAttribute("tickInterval", plot.getTickInterval());
|
|
this.writer.addAttribute("meterColor", plot.getMeterBackgroundColor());
|
|
this.writer.addAttribute("needleColor", plot.getNeedleColor());
|
|
this.writer.addAttribute("tickColor", plot.getTickColor());
|
|
writePlot(chart.getPlot());
|
|
writeValueDisplay(plot.getValueDisplay());
|
|
writeDataRange(plot.getDataRange());
|
|
List intervals = plot.getIntervals();
|
|
if (intervals != null) {
|
|
Iterator iter = intervals.iterator();
|
|
while (iter.hasNext()) {
|
|
JRMeterInterval meterInterval = iter.next();
|
|
writeMeterInterval(meterInterval);
|
|
}
|
|
}
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeThermometerChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("thermometerChart");
|
|
writeChart(chart);
|
|
writeValueDataset((JRValueDataset)chart.getDataset());
|
|
JRThermometerPlot plot = (JRThermometerPlot)chart.getPlot();
|
|
this.writer.startElement("thermometerPlot");
|
|
this.writer.addAttribute("valueLocation", plot.getValueLocation(), JRXmlConstants.getThermometerValueLocationMap(), (byte)3);
|
|
this.writer.addAttribute("isShowValueLines", plot.isShowValueLines());
|
|
this.writer.addAttribute("mercuryColor", plot.getMercuryColor());
|
|
writePlot(chart.getPlot());
|
|
writeValueDisplay(plot.getValueDisplay());
|
|
writeDataRange(plot.getDataRange());
|
|
if (plot.getLowRange() != null) {
|
|
this.writer.startElement("lowRange");
|
|
writeDataRange(plot.getLowRange());
|
|
this.writer.closeElement();
|
|
}
|
|
if (plot.getMediumRange() != null) {
|
|
this.writer.startElement("mediumRange");
|
|
writeDataRange(plot.getMediumRange());
|
|
this.writer.closeElement();
|
|
}
|
|
if (plot.getHighRange() != null) {
|
|
this.writer.startElement("highRange");
|
|
writeDataRange(plot.getHighRange());
|
|
this.writer.closeElement();
|
|
}
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeMultiAxisChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("multiAxisChart");
|
|
writeChart(chart);
|
|
JRMultiAxisPlot plot = (JRMultiAxisPlot)chart.getPlot();
|
|
this.writer.startElement("multiAxisPlot");
|
|
writePlot(chart.getPlot());
|
|
List axes = plot.getAxes();
|
|
if (axes != null) {
|
|
Iterator iter = axes.iterator();
|
|
while (iter.hasNext()) {
|
|
JRChartAxis chartAxis = iter.next();
|
|
writeChartAxis(chartAxis);
|
|
}
|
|
}
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeStackedAreaChart(JRChart chart) throws IOException {
|
|
this.writer.startElement("stackedAreaChart");
|
|
writeChart(chart);
|
|
writeCategoryDataSet((JRCategoryDataset)chart.getDataset());
|
|
writeAreaPlot((JRAreaPlot)chart.getPlot());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeChartTag(JRChart chart) throws IOException {
|
|
switch (chart.getChartType()) {
|
|
case 1:
|
|
writeAreaChart(chart);
|
|
return;
|
|
case 3:
|
|
writeBarChart(chart);
|
|
return;
|
|
case 2:
|
|
writeBar3DChart(chart);
|
|
return;
|
|
case 4:
|
|
writeBubbleChart(chart);
|
|
return;
|
|
case 5:
|
|
writeCandlestickChart(chart);
|
|
return;
|
|
case 6:
|
|
writeHighLowChart(chart);
|
|
return;
|
|
case 7:
|
|
writeLineChart(chart);
|
|
return;
|
|
case 17:
|
|
writeMeterChart(chart);
|
|
return;
|
|
case 19:
|
|
writeMultiAxisChart(chart);
|
|
return;
|
|
case 9:
|
|
writePieChart(chart);
|
|
return;
|
|
case 8:
|
|
writePie3DChart(chart);
|
|
return;
|
|
case 10:
|
|
writeScatterChart(chart);
|
|
return;
|
|
case 12:
|
|
writeStackedBarChart(chart);
|
|
return;
|
|
case 11:
|
|
writeStackedBar3DChart(chart);
|
|
return;
|
|
case 18:
|
|
writeThermometerChart(chart);
|
|
return;
|
|
case 16:
|
|
writeTimeSeriesChart(chart);
|
|
return;
|
|
case 13:
|
|
writeXyAreaChart(chart);
|
|
return;
|
|
case 14:
|
|
writeXyBarChart(chart);
|
|
return;
|
|
case 15:
|
|
writeXyLineChart(chart);
|
|
return;
|
|
case 20:
|
|
writeStackedAreaChart(chart);
|
|
return;
|
|
}
|
|
throw new JRRuntimeException("Chart type not supported.");
|
|
}
|
|
|
|
private void writeSubreportReturnValue(JRSubreportReturnValue returnValue) throws IOException {
|
|
this.writer.startElement("returnValue");
|
|
this.writer.addEncodedAttribute("subreportVariable", returnValue.getSubreportVariable());
|
|
this.writer.addEncodedAttribute("toVariable", returnValue.getToVariable());
|
|
this.writer.addAttribute("calculation", returnValue.getCalculation(), JRXmlConstants.getCalculationMap(), (byte)0);
|
|
this.writer.addAttribute("incrementerFactoryClass", returnValue.getIncrementerFactoryClassName());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeCrosstab(JRCrosstab crosstab) throws IOException {
|
|
this.writer.startElement("crosstab");
|
|
this.writer.addAttribute("isRepeatColumnHeaders", crosstab.isRepeatColumnHeaders(), true);
|
|
this.writer.addAttribute("isRepeatRowHeaders", crosstab.isRepeatRowHeaders(), true);
|
|
this.writer.addAttribute("columnBreakOffset", crosstab.getColumnBreakOffset(), 10);
|
|
this.writer.addAttribute("runDirection", crosstab.getRunDirection(), JRXmlConstants.getRunDirectionMap(), (byte)0);
|
|
writeReportElement((JRElement)crosstab);
|
|
JRCrosstabParameter[] parameters = crosstab.getParameters();
|
|
if (parameters != null)
|
|
for (int m = 0; m < parameters.length; m++) {
|
|
if (!parameters[m].isSystemDefined())
|
|
writeCrosstabParameter(parameters[m]);
|
|
}
|
|
this.writer.writeExpression("parametersMapExpression", crosstab.getParametersMapExpression(), false);
|
|
writeCrosstabDataset(crosstab);
|
|
writeCrosstabHeaderCell(crosstab);
|
|
JRCrosstabRowGroup[] rowGroups = crosstab.getRowGroups();
|
|
for (int i = 0; i < rowGroups.length; i++)
|
|
writeCrosstabRowGroup(rowGroups[i]);
|
|
JRCrosstabColumnGroup[] columnGroups = crosstab.getColumnGroups();
|
|
for (int j = 0; j < columnGroups.length; j++)
|
|
writeCrosstabColumnGroup(columnGroups[j]);
|
|
JRCrosstabMeasure[] measures = crosstab.getMeasures();
|
|
for (int k = 0; k < measures.length; k++)
|
|
writeCrosstabMeasure(measures[k]);
|
|
if (crosstab instanceof JRDesignCrosstab) {
|
|
List cellsList = ((JRDesignCrosstab)crosstab).getCellsList();
|
|
for (Iterator it = cellsList.iterator(); it.hasNext(); ) {
|
|
JRCrosstabCell cell = it.next();
|
|
writeCrosstabCell(cell);
|
|
}
|
|
} else {
|
|
JRCrosstabCell[][] cells = crosstab.getCells();
|
|
Set cellsSet = new HashSet();
|
|
for (int m = cells.length - 1; m >= 0; m--) {
|
|
for (int n = (cells[m]).length - 1; n >= 0; n--) {
|
|
JRCrosstabCell cell = cells[m][n];
|
|
if (cell != null && cellsSet.add(cell))
|
|
writeCrosstabCell(cell);
|
|
}
|
|
}
|
|
}
|
|
writeCrosstabWhenNoDataCell(crosstab);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
private void writeCrosstabDataset(JRCrosstab crosstab) throws IOException {
|
|
JRCrosstabDataset dataset = crosstab.getDataset();
|
|
this.writer.startElement("crosstabDataset");
|
|
this.writer.addAttribute("isDataPreSorted", dataset.isDataPreSorted(), false);
|
|
writeElementDataset((JRElementDataset)dataset);
|
|
this.writer.closeElement(true);
|
|
}
|
|
|
|
private void writeCrosstabWhenNoDataCell(JRCrosstab crosstab) throws IOException {
|
|
JRCellContents whenNoDataCell = crosstab.getWhenNoDataCell();
|
|
if (whenNoDataCell != null) {
|
|
this.writer.startElement("whenNoDataCell");
|
|
writeCellContents(whenNoDataCell);
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
|
|
private void writeCrosstabHeaderCell(JRCrosstab crosstab) throws IOException {
|
|
JRCellContents headerCell = crosstab.getHeaderCell();
|
|
if (headerCell != null) {
|
|
this.writer.startElement("crosstabHeaderCell");
|
|
writeCellContents(headerCell);
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
|
|
protected void writeCrosstabRowGroup(JRCrosstabRowGroup group) throws IOException {
|
|
this.writer.startElement("rowGroup");
|
|
this.writer.addEncodedAttribute("name", group.getName());
|
|
this.writer.addAttribute("width", group.getWidth());
|
|
this.writer.addAttribute("totalPosition", group.getTotalPosition(), JRXmlConstants.getCrosstabTotalPositionMap(), (byte)0);
|
|
this.writer.addAttribute("headerPosition", group.getPosition(), JRXmlConstants.getCrosstabRowPositionMap(), (byte)1);
|
|
writeBucket(group.getBucket());
|
|
JRCellContents header = group.getHeader();
|
|
this.writer.startElement("crosstabRowHeader");
|
|
writeCellContents(header);
|
|
this.writer.closeElement();
|
|
JRCellContents totalHeader = group.getTotalHeader();
|
|
this.writer.startElement("crosstabTotalRowHeader");
|
|
writeCellContents(totalHeader);
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writeCrosstabColumnGroup(JRCrosstabColumnGroup group) throws IOException {
|
|
this.writer.startElement("columnGroup");
|
|
this.writer.addEncodedAttribute("name", group.getName());
|
|
this.writer.addAttribute("height", group.getHeight());
|
|
this.writer.addAttribute("totalPosition", group.getTotalPosition(), JRXmlConstants.getCrosstabTotalPositionMap(), (byte)0);
|
|
this.writer.addAttribute("headerPosition", group.getPosition(), JRXmlConstants.getCrosstabColumnPositionMap(), (byte)1);
|
|
writeBucket(group.getBucket());
|
|
JRCellContents header = group.getHeader();
|
|
this.writer.startElement("crosstabColumnHeader");
|
|
writeCellContents(header);
|
|
this.writer.closeElement();
|
|
JRCellContents totalHeader = group.getTotalHeader();
|
|
this.writer.startElement("crosstabTotalColumnHeader");
|
|
writeCellContents(totalHeader);
|
|
this.writer.closeElement();
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writeBucket(JRCrosstabBucket bucket) throws IOException {
|
|
this.writer.startElement("bucket");
|
|
this.writer.addAttribute("order", bucket.getOrder(), JRXmlConstants.getCrosstabBucketOrderMap(), (byte)1);
|
|
this.writer.writeExpression("bucketExpression", bucket.getExpression(), true);
|
|
this.writer.writeExpression("comparatorExpression", bucket.getComparatorExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writeCrosstabMeasure(JRCrosstabMeasure measure) throws IOException {
|
|
this.writer.startElement("measure");
|
|
this.writer.addEncodedAttribute("name", measure.getName());
|
|
this.writer.addAttribute("class", measure.getValueClassName());
|
|
this.writer.addAttribute("calculation", measure.getCalculation(), JRXmlConstants.getCalculationMap(), (byte)0);
|
|
this.writer.addAttribute("percentageOf", measure.getPercentageOfType(), JRXmlConstants.getCrosstabPercentageMap(), (byte)0);
|
|
this.writer.addAttribute("percentageCalculatorClass", measure.getPercentageCalculatorClassName());
|
|
this.writer.writeExpression("measureExpression", measure.getValueExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writeCrosstabCell(JRCrosstabCell cell) throws IOException {
|
|
this.writer.startElement("crosstabCell");
|
|
this.writer.addAttribute("width", cell.getWidth());
|
|
this.writer.addAttribute("height", cell.getHeight());
|
|
this.writer.addEncodedAttribute("rowTotalGroup", cell.getRowTotalGroup());
|
|
this.writer.addEncodedAttribute("columnTotalGroup", cell.getColumnTotalGroup());
|
|
writeCellContents(cell.getContents());
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writeCellContents(JRCellContents contents) throws IOException {
|
|
if (contents != null) {
|
|
this.writer.startElement("cellContents");
|
|
this.writer.addAttribute("backcolor", contents.getBackcolor());
|
|
this.writer.addAttribute("mode", contents.getMode(), JRXmlConstants.getModeMap());
|
|
writeStyleReferenceAttr((JRStyleContainer)contents);
|
|
writeBox(contents.getLineBox());
|
|
List children = contents.getChildren();
|
|
if (children != null)
|
|
for (Iterator it = children.iterator(); it.hasNext();)
|
|
((JRChild)it.next()).visit(this.xmlWriterVisitor);
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
|
|
protected void writeCrosstabParameter(JRCrosstabParameter parameter) throws IOException {
|
|
this.writer.startElement("crosstabParameter");
|
|
this.writer.addEncodedAttribute("name", parameter.getName());
|
|
this.writer.addAttribute("class", parameter.getValueClassName(), "java.lang.String");
|
|
this.writer.writeExpression("parameterValueExpression", parameter.getExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeDataset(JRDataset dataset) throws IOException {
|
|
this.writer.startElement("subDataset");
|
|
this.writer.addEncodedAttribute("name", dataset.getName());
|
|
this.writer.addAttribute("scriptletClass", dataset.getScriptletClass());
|
|
this.writer.addEncodedAttribute("resourceBundle", dataset.getResourceBundle());
|
|
this.writer.addAttribute("whenResourceMissingType", dataset.getWhenResourceMissingType(), JRXmlConstants.getWhenResourceMissingTypeMap(), (byte)1);
|
|
writeProperties((JRPropertiesHolder)dataset);
|
|
writeDatasetContents(dataset);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writeDatasetContents(JRDataset dataset) throws IOException {
|
|
JRParameter[] parameters = dataset.getParameters();
|
|
if (parameters != null && parameters.length > 0)
|
|
for (int i = 0; i < parameters.length; i++) {
|
|
if (!parameters[i].isSystemDefined())
|
|
writeParameter(parameters[i]);
|
|
}
|
|
if (dataset.getQuery() != null)
|
|
writeQuery(dataset.getQuery());
|
|
JRField[] fields = dataset.getFields();
|
|
if (fields != null && fields.length > 0)
|
|
for (int i = 0; i < fields.length; i++)
|
|
writeField(fields[i]);
|
|
JRSortField[] sortFields = dataset.getSortFields();
|
|
if (sortFields != null && sortFields.length > 0)
|
|
for (int i = 0; i < sortFields.length; i++)
|
|
writeSortField(sortFields[i]);
|
|
JRVariable[] variables = dataset.getVariables();
|
|
if (variables != null && variables.length > 0)
|
|
for (int i = 0; i < variables.length; i++) {
|
|
if (!variables[i].isSystemDefined())
|
|
writeVariable(variables[i]);
|
|
}
|
|
this.writer.writeExpression("filterExpression", dataset.getFilterExpression(), false);
|
|
JRGroup[] groups = dataset.getGroups();
|
|
if (groups != null && groups.length > 0)
|
|
for (int i = 0; i < groups.length; i++)
|
|
writeGroup(groups[i]);
|
|
}
|
|
|
|
protected void writeDatasetRun(JRDatasetRun datasetRun) throws IOException {
|
|
this.writer.startElement("datasetRun");
|
|
this.writer.addEncodedAttribute("subDataset", datasetRun.getDatasetName());
|
|
this.writer.writeExpression("parametersMapExpression", datasetRun.getParametersMapExpression(), false);
|
|
JRDatasetParameter[] parameters = datasetRun.getParameters();
|
|
if (parameters != null && parameters.length > 0)
|
|
for (int i = 0; i < parameters.length; i++)
|
|
writeDatasetParameter(parameters[i]);
|
|
this.writer.writeExpression("connectionExpression", datasetRun.getConnectionExpression(), false);
|
|
this.writer.writeExpression("dataSourceExpression", datasetRun.getDataSourceExpression(), false);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
public void writeFrame(JRFrame frame) throws IOException {
|
|
this.writer.startElement("frame");
|
|
writeReportElement((JRElement)frame);
|
|
writeBox(frame.getLineBox());
|
|
List children = frame.getChildren();
|
|
if (children != null)
|
|
for (Iterator it = children.iterator(); it.hasNext();)
|
|
((JRChild)it.next()).visit(this.xmlWriterVisitor);
|
|
this.writer.closeElement();
|
|
}
|
|
|
|
protected void writeHyperlinkParameters(JRHyperlinkParameter[] parameters) throws IOException {
|
|
if (parameters != null)
|
|
for (int i = 0; i < parameters.length; i++) {
|
|
JRHyperlinkParameter parameter = parameters[i];
|
|
writeHyperlinkParameter(parameter);
|
|
}
|
|
}
|
|
|
|
protected void writeHyperlinkParameter(JRHyperlinkParameter parameter) throws IOException {
|
|
if (parameter != null) {
|
|
this.writer.startElement("hyperlinkParameter");
|
|
this.writer.addEncodedAttribute("name", parameter.getName());
|
|
this.writer.writeExpression("hyperlinkParameterExpression", parameter.getValueExpression(), true, String.class.getName());
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
|
|
protected void writeHyperlink(String tagName, JRHyperlink hyperlink) throws IOException {
|
|
if (hyperlink != null) {
|
|
this.writer.startElement(tagName);
|
|
this.writer.addEncodedAttribute("hyperlinkType", hyperlink.getLinkType());
|
|
this.writer.addAttribute("hyperlinkTarget", hyperlink.getHyperlinkTarget(), JRXmlConstants.getHyperlinkTargetMap(), (byte)1);
|
|
this.writer.writeExpression("hyperlinkReferenceExpression", hyperlink.getHyperlinkReferenceExpression(), false);
|
|
this.writer.writeExpression("hyperlinkAnchorExpression", hyperlink.getHyperlinkAnchorExpression(), false);
|
|
this.writer.writeExpression("hyperlinkPageExpression", hyperlink.getHyperlinkPageExpression(), false);
|
|
this.writer.writeExpression("hyperlinkTooltipExpression", hyperlink.getHyperlinkTooltipExpression(), false);
|
|
writeHyperlinkParameters(hyperlink.getHyperlinkParameters());
|
|
this.writer.closeElement();
|
|
}
|
|
}
|
|
|
|
protected boolean toWriteConditionalStyles() {
|
|
return true;
|
|
}
|
|
}
|