All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
net.sf.jasperreports.engine.base.JRBaseReport Maven / Gradle / Ivy
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2023 Cloud Software Group, Inc. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see .
*/
package net.sf.jasperreports.engine.base;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import net.sf.jasperreports.engine.DatasetPropertyExpression;
import net.sf.jasperreports.engine.JRBand;
import net.sf.jasperreports.engine.JRConstants;
import net.sf.jasperreports.engine.JRDataset;
import net.sf.jasperreports.engine.JRExpressionCollector;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRGroup;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JRPropertiesHolder;
import net.sf.jasperreports.engine.JRPropertiesMap;
import net.sf.jasperreports.engine.JRQuery;
import net.sf.jasperreports.engine.JRReport;
import net.sf.jasperreports.engine.JRReportTemplate;
import net.sf.jasperreports.engine.JRScriptlet;
import net.sf.jasperreports.engine.JRSection;
import net.sf.jasperreports.engine.JRSortField;
import net.sf.jasperreports.engine.JRStyle;
import net.sf.jasperreports.engine.JRVariable;
import net.sf.jasperreports.engine.JasperReportsContext;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.design.events.JRChangeEventsSupport;
import net.sf.jasperreports.engine.design.events.JRPropertyChangeSupport;
import net.sf.jasperreports.engine.type.OrientationEnum;
import net.sf.jasperreports.engine.type.PrintOrderEnum;
import net.sf.jasperreports.engine.type.RunDirectionEnum;
import net.sf.jasperreports.engine.type.SectionTypeEnum;
import net.sf.jasperreports.engine.type.WhenNoDataTypeEnum;
import net.sf.jasperreports.engine.type.WhenResourceMissingTypeEnum;
import net.sf.jasperreports.engine.util.StyleResolver;
/**
* Base class that implements the {@link net.sf.jasperreports.engine.JRReport} interface.
*
* @see net.sf.jasperreports.engine.JRReport
* @author Teodor Danciu ([email protected] )
*
*/
public class JRBaseReport implements JRReport, Serializable, JRChangeEventsSupport
{
/**
*
*/
private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
public static final String PROPERTY_WHEN_NO_DATA_TYPE = "whenNoDataType";
public static final String PROPERTY_SECTION_TYPE = "sectionType";
/**
*
*/
protected String name;
protected String language = LANGUAGE_JAVA;
protected int columnCount = 1;
protected PrintOrderEnum printOrderValue = PrintOrderEnum.VERTICAL;
protected RunDirectionEnum columnDirection = RunDirectionEnum.LTR;
protected int pageWidth = 595;
protected int pageHeight = 842;
protected OrientationEnum orientationValue = OrientationEnum.PORTRAIT;
protected WhenNoDataTypeEnum whenNoDataTypeValue;
protected SectionTypeEnum sectionType = SectionTypeEnum.BAND;
protected int columnWidth = 555;
protected int columnSpacing;
protected int leftMargin = 20;
protected int rightMargin = 20;
protected int topMargin = 30;
protected int bottomMargin = 30;
protected boolean isTitleNewPage;
protected boolean isSummaryNewPage;
protected boolean isSummaryWithPageHeaderAndFooter;
protected boolean isFloatColumnFooter;
protected boolean ignorePagination;//FIXMEBOOK remove default
/**
*
*/
protected String formatFactoryClass;
/**
*
*/
protected Set importsSet;
/**
* Report templates.
*/
protected JRReportTemplate[] templates;
protected JRStyle defaultStyle;
protected JRStyle[] styles;
protected transient StyleResolver styleResolver = StyleResolver.getInstance();
/**
* The main dataset of the report.
*/
protected JRDataset mainDataset;
/**
* Sub datasets of the report.
*/
protected JRDataset[] datasets;
protected JRBand background;
protected JRBand title;
protected JRBand pageHeader;
protected JRBand columnHeader;
protected JRSection detailSection;
protected JRBand columnFooter;
protected JRBand pageFooter;
protected JRBand lastPageFooter;
protected JRBand summary;
protected JRBand noData;
/**
* @deprecated Replaced by {@link JasperDesign#JasperDesign()}.
*/
public JRBaseReport()
{
}
public JRBaseReport(JRReport report, JRExpressionCollector expressionCollector)
{
this(report, new JRBaseObjectFactory(expressionCollector));
}
/**
* Constructs a copy of a report.
*/
public JRBaseReport(JRReport report, JRBaseObjectFactory factory)
{
/* */
name = report.getName();
language = report.getLanguage();
columnCount = report.getColumnCount();
printOrderValue = report.getPrintOrderValue();
columnDirection = report.getColumnDirection();
pageWidth = report.getPageWidth();
pageHeight = report.getPageHeight();
orientationValue = report.getOrientationValue();
whenNoDataTypeValue = report.getWhenNoDataTypeValue();
sectionType = report.getSectionType();
columnWidth = report.getColumnWidth();
columnSpacing = report.getColumnSpacing();
leftMargin = report.getLeftMargin();
rightMargin = report.getRightMargin();
topMargin = report.getTopMargin();
bottomMargin = report.getBottomMargin();
isTitleNewPage = report.isTitleNewPage();
isSummaryNewPage = report.isSummaryNewPage();
isSummaryWithPageHeaderAndFooter = report.isSummaryWithPageHeaderAndFooter();
isFloatColumnFooter = report.isFloatColumnFooter();
ignorePagination = report.isIgnorePagination();
formatFactoryClass = report.getFormatFactoryClass();
/* */
String[] imports = report.getImports();
if (imports != null && imports.length > 0)
{
importsSet = new HashSet<>(imports.length);
importsSet.addAll(Arrays.asList(imports));
}
/* */
factory.setDefaultStyleProvider(this);
copyTemplates(report, factory);
/* */
defaultStyle = factory.getStyle(report.getDefaultStyle());
/* */
JRStyle[] jrStyles = report.getStyles();
if (jrStyles != null && jrStyles.length > 0)
{
styles = new JRStyle[jrStyles.length];
for(int i = 0; i < styles.length; i++)
{
styles[i] = factory.getStyle(jrStyles[i]);
}
}
mainDataset = factory.getDataset(report.getMainDataset());
JRDataset[] datasetArray = report.getDatasets();
if (datasetArray != null && datasetArray.length > 0)
{
datasets = new JRDataset[datasetArray.length];
for (int i = 0; i < datasets.length; i++)
{
datasets[i] = factory.getDataset(datasetArray[i]);
}
}
background = factory.getBand(report.getBackground());
title = factory.getBand(report.getTitle());
pageHeader = factory.getBand(report.getPageHeader());
columnHeader = factory.getBand(report.getColumnHeader());
detailSection = factory.getSection(report.getDetailSection());
columnFooter = factory.getBand(report.getColumnFooter());
pageFooter = factory.getBand(report.getPageFooter());
lastPageFooter = factory.getBand(report.getLastPageFooter());
summary = factory.getBand(report.getSummary());
noData = factory.getBand(report.getNoData());
}
protected void copyTemplates(JRReport report, JRBaseObjectFactory factory)
{
JRReportTemplate[] reportTemplates = report.getTemplates();
if (reportTemplates == null || reportTemplates.length == 0)
{
templates = null;
}
else
{
templates = new JRReportTemplate[reportTemplates.length];
for (int i = 0; i < reportTemplates.length; i++)
{
templates[i] = factory.getReportTemplate(reportTemplates[i]);
}
}
}
public JRBaseReport(JRReport report)
{
this(report, (JRExpressionCollector) null);
}
/**
*
*/
public synchronized void setJasperReportsContext(JasperReportsContext jasperReportsContext)
{
styleResolver = new StyleResolver(jasperReportsContext);
}
@Override
public String getName()
{
return name;
}
@Override
public String getLanguage()
{
return language;
}
@Override
public int getColumnCount()
{
return columnCount;
}
@Override
public PrintOrderEnum getPrintOrderValue()
{
return printOrderValue;
}
@Override
public RunDirectionEnum getColumnDirection()
{
return columnDirection;
}
@Override
public int getPageWidth()
{
return pageWidth;
}
@Override
public int getPageHeight()
{
return pageHeight;
}
@Override
public OrientationEnum getOrientationValue()
{
return orientationValue;
}
@Override
public WhenNoDataTypeEnum getWhenNoDataTypeValue()
{
return whenNoDataTypeValue;
}
@Override
public void setWhenNoDataType(WhenNoDataTypeEnum whenNoDataTypeValue)
{
Object old = this.whenNoDataTypeValue;
this.whenNoDataTypeValue = whenNoDataTypeValue;
getEventSupport().firePropertyChange(PROPERTY_WHEN_NO_DATA_TYPE, old, whenNoDataTypeValue);
}
@Override
public SectionTypeEnum getSectionType()
{
return sectionType;
}
/**
*
*/
public void setSectionType(SectionTypeEnum sectionType)
{
Object old = this.sectionType;
this.sectionType = sectionType;
getEventSupport().firePropertyChange(PROPERTY_SECTION_TYPE, old, sectionType);
}
@Override
public int getColumnWidth()
{
return columnWidth;
}
@Override
public int getColumnSpacing()
{
return columnSpacing;
}
@Override
public int getLeftMargin()
{
return leftMargin;
}
@Override
public int getRightMargin()
{
return rightMargin;
}
@Override
public int getTopMargin()
{
return topMargin;
}
@Override
public int getBottomMargin()
{
return bottomMargin;
}
@Override
public boolean isTitleNewPage()
{
return isTitleNewPage;
}
@Override
public boolean isSummaryNewPage()
{
return isSummaryNewPage;
}
@Override
public boolean isSummaryWithPageHeaderAndFooter()
{
return isSummaryWithPageHeaderAndFooter;
}
@Override
public boolean isFloatColumnFooter()
{
return isFloatColumnFooter;
}
@Override
public String getScriptletClass()
{
return mainDataset.getScriptletClass();
}
@Override
public String getFormatFactoryClass()
{
return formatFactoryClass;
}
@Override
public String getResourceBundle()
{
return mainDataset.getResourceBundle();
}
@Override
public String[] getPropertyNames()
{
return mainDataset.getPropertiesMap().getPropertyNames();
}
@Override
public String getProperty(String propName)
{
return mainDataset.getPropertiesMap().getProperty(propName);
}
@Override
public void setProperty(String propName, String value)
{
mainDataset.getPropertiesMap().setProperty(propName, value);
}
@Override
public void removeProperty(String propName)
{
mainDataset.getPropertiesMap().removeProperty(propName);
}
@Override
public DatasetPropertyExpression[] getPropertyExpressions()
{
return mainDataset.getPropertyExpressions();
}
@Override
public String[] getImports()
{
if (importsSet != null)
{
return importsSet.toArray(new String[importsSet.size()]);
}
return null;
}
@Override
public JRStyle getDefaultStyle()
{
return defaultStyle;
}
@Override
public JRStyle[] getStyles()
{
return styles;
}
@Override
public StyleResolver getStyleResolver()
{
return styleResolver;
}
/**
* Gets an array of report scriptlets (excluding the scriptletClass one).
*/
@Override
public JRScriptlet[] getScriptlets()
{
return mainDataset.getScriptlets();
}
/**
* Gets an array of report parameters (including built-in ones).
*/
@Override
public JRParameter[] getParameters()
{
return mainDataset.getParameters();
}
@Override
public JRQuery getQuery()
{
return mainDataset.getQuery();
}
/**
* Gets an array of report fields.
*/
@Override
public JRField[] getFields()
{
return mainDataset.getFields();
}
/**
* Gets an array of sort report fields.
*/
@Override
public JRSortField[] getSortFields()
{
return mainDataset.getSortFields();
}
/**
* Gets an array of report variables.
*/
@Override
public JRVariable[] getVariables()
{
return mainDataset.getVariables();
}
@Override
public JRGroup[] getGroups()
{
return mainDataset.getGroups();
}
@Override
public JRBand getBackground()
{
return background;
}
@Override
public JRBand getTitle()
{
return title;
}
@Override
public JRBand getPageHeader()
{
return pageHeader;
}
@Override
public JRBand getColumnHeader()
{
return columnHeader;
}
@Override
public JRSection getDetailSection()
{
return detailSection;
}
@Override
public JRBand getColumnFooter()
{
return columnFooter;
}
@Override
public JRBand getPageFooter()
{
return pageFooter;
}
@Override
public JRBand getLastPageFooter()
{
return lastPageFooter;
}
@Override
public JRBand getSummary()
{
return summary;
}
@Override
public WhenResourceMissingTypeEnum getWhenResourceMissingTypeValue()
{
return mainDataset.getWhenResourceMissingTypeValue();
}
@Override
public void setWhenResourceMissingType(WhenResourceMissingTypeEnum whenResourceMissingType)
{
mainDataset.setWhenResourceMissingType(whenResourceMissingType);
}
@Override
public JRDataset getMainDataset()
{
return mainDataset;
}
@Override
public JRDataset[] getDatasets()
{
return datasets;
}
@Override
public boolean isIgnorePagination()
{
return ignorePagination;
}
@Override
public boolean hasProperties()
{
return mainDataset.hasProperties();
}
@Override
public JRPropertiesMap getPropertiesMap()
{
return mainDataset.getPropertiesMap();
}
@Override
public JRPropertiesHolder getParentProperties()
{
return null;
}
@Override
public JRReportTemplate[] getTemplates()
{
return templates;
}
/**
* @return the noData
*/
@Override
public JRBand getNoData() {
return noData;
}
/**
*
*/
public JRBand[] getAllBands()
{
List bands = new ArrayList<>();
addBand(title, bands);
addBand(pageHeader, bands);
addBand(columnHeader, bands);
JRGroup[] groups = mainDataset.getGroups();
if (groups != null)
{
for (JRGroup group : groups)
{
addBands(group.getGroupHeaderSection(), bands);
addBands(group.getGroupFooterSection(), bands);
}
}
addBands(detailSection, bands);
addBand(columnFooter, bands);
addBand(pageFooter, bands);
addBand(lastPageFooter, bands);
addBand(summary, bands);
addBand(noData, bands);
return bands.toArray(new JRBand[bands.size()]);
}
/**
*
*/
private void addBand(JRBand band, List bands)
{
if (band != null)
{
bands.add(band);
}
}
/**
*
*/
private void addBands(JRSection section, List bands)
{
if (section != null)
{
JRBand[] sectionBands = section.getBands();
if (sectionBands != null)
{
for (JRBand band : sectionBands)
{
addBand(band, bands);
}
}
}
}
@Override
public UUID getUUID()
{
return mainDataset.getUUID();
}
private transient JRPropertyChangeSupport eventSupport;//FIXMECLONE cloneable for reset?
@Override
public JRPropertyChangeSupport getEventSupport()
{
synchronized (this)
{
if (eventSupport == null)
{
eventSupport = new JRPropertyChangeSupport(this);
}
}
return eventSupport;
}
/*
* These fields are only for serialization backward compatibility.
*/
private int PSEUDO_SERIAL_VERSION_UID = JRConstants.PSEUDO_SERIAL_VERSION_UID; //NOPMD
/**
* @deprecated
*/
private JRBand detail;
/**
* @deprecated
*/
private byte whenNoDataType;
/**
* @deprecated
*/
private byte printOrder;
/**
* @deprecated
*/
private byte orientation;
@SuppressWarnings("deprecation")
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
in.defaultReadObject();
styleResolver = StyleResolver.getInstance();
if (detail != null)
{
detailSection = new JRBaseSection(detail);
detail = null;
}
if (PSEUDO_SERIAL_VERSION_UID < JRConstants.PSEUDO_SERIAL_VERSION_UID_3_7_2)
{
whenNoDataTypeValue = WhenNoDataTypeEnum.getByValue(whenNoDataType);
printOrderValue = PrintOrderEnum.getByValue(printOrder);
orientationValue = OrientationEnum.getByValue(orientation);
}
}
}