ar.com.fdvs.dj.domain.builders.DynamicReportBuilder Maven / Gradle / Ivy
Show all versions of DynamicJasper Show documentation
/*
* DynamicJasper: A library for creating reports dynamically by specifying
* columns, groups, styles, etc. at runtime. It also saves a lot of development
* time in many cases! (http://sourceforge.net/projects/dynamicjasper)
*
* Copyright (C) 2008 FDV Solutions (http://www.fdvsolutions.com)
*
* This library 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 2.1 of the License, or (at your option) any later version.
*
* This library 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 this library; if not, write to the Free Software
*
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*
*/
package ar.com.fdvs.dj.domain.builders;
import ar.com.fdvs.dj.core.DJConstants;
import ar.com.fdvs.dj.core.DJException;
import ar.com.fdvs.dj.core.JasperDesignDecorator;
import ar.com.fdvs.dj.core.layout.HorizontalBandAlignment;
import ar.com.fdvs.dj.core.layout.LayoutManager;
import ar.com.fdvs.dj.domain.AutoText;
import ar.com.fdvs.dj.domain.ColumnProperty;
import ar.com.fdvs.dj.domain.CustomExpression;
import ar.com.fdvs.dj.domain.DJCalculation;
import ar.com.fdvs.dj.domain.DJChart;
import ar.com.fdvs.dj.domain.DJCrosstab;
import ar.com.fdvs.dj.domain.DJQuery;
import ar.com.fdvs.dj.domain.DJValueFormatter;
import ar.com.fdvs.dj.domain.DJWaterMark;
import ar.com.fdvs.dj.domain.DynamicReport;
import ar.com.fdvs.dj.domain.DynamicReportOptions;
import ar.com.fdvs.dj.domain.ImageBanner;
import ar.com.fdvs.dj.domain.Style;
import ar.com.fdvs.dj.domain.constants.Font;
import ar.com.fdvs.dj.domain.constants.GroupLayout;
import ar.com.fdvs.dj.domain.constants.ImageScaleMode;
import ar.com.fdvs.dj.domain.constants.Page;
import ar.com.fdvs.dj.domain.entities.DJColSpan;
import ar.com.fdvs.dj.domain.entities.DJGroup;
import ar.com.fdvs.dj.domain.entities.DJGroupVariable;
import ar.com.fdvs.dj.domain.entities.DJGroupVariableDef;
import ar.com.fdvs.dj.domain.entities.DJVariable;
import ar.com.fdvs.dj.domain.entities.Parameter;
import ar.com.fdvs.dj.domain.entities.Subreport;
import ar.com.fdvs.dj.domain.entities.SubreportParameter;
import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn;
import ar.com.fdvs.dj.domain.entities.columns.GlobalGroupColumn;
import ar.com.fdvs.dj.domain.entities.columns.PercentageColumn;
import ar.com.fdvs.dj.domain.entities.columns.PropertyColumn;
import net.sf.jasperreports.engine.JasperReport;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
/**
* Builder created to give users a friendly way of creating a
* DynamicReport.
*
* Usage example:
* DynamicReportBuilder drb = new DynamicReportBuilder(); Integer margin = new
* Integer(20); drb.addTitle("Clients List").addTitleStyle(titleStyle)
* .addSubtitle("Clients without debt") .addDetailHeight(new Integer(15))
* .addLeftMargin(margin).addRightMargin(margin).addTopMargin(margin)
* .addBottomMargin(margin)
* .addPrintBackgroundOnOddRows(true).addOddRowBackgroundStyle(oddRowStyle)
* .addColumnsPerPage(new Integer(1)).addColumnSpace(new Integer(5))
* .addColumn(column1).addColumn(column2).build();
*
* Like with all DJ's builders, it's usage must end with a call to build()
* mehtod.
*
*/
@SuppressWarnings("WeakerAccess")
public class DynamicReportBuilder {
/**
* DynamicReportBuilder cannot be used twice since this produced undesired
* results on the generated DynamicReport Object.
*/
protected boolean built = false;
protected final DynamicReport report = new DynamicReport();
protected final DynamicReportOptions options = new DynamicReportOptions();
protected final List globalFooterCrosstabs = new ArrayList();
protected final List globalHeaderCrosstabs = new ArrayList();
protected final List autoTexts = new ArrayList();
protected final Map> groupFooterSubreports = new HashMap>();
protected final Map> groupHeaderSubreports = new HashMap>();
protected final DJGroup globalVariablesGroup;
protected final List concatenatedReports = new ArrayList();
public DynamicReportBuilder() {
super();
globalVariablesGroup = createDummyGroup();
}
public DynamicReportBuilder addAutoText(AutoText text) {
if (AutoText.WIDTH_NOT_SET == text.getWidth()) {
text.setWidth(AutoText.DEFAULT_WIDTH);
}
if (AutoText.WIDTH_NOT_SET == text.getWidth2()) {
text.setWidth2(AutoText.DEFAULT_WIDTH);
}
autoTexts.add(text);
return this;
}
/**
* Adds an autotext to the Report, this are common texts such us "Page X/Y",
* "Created on 07/25/2007", etc.
*
* The parameters are all constants from the
* ar.com.fdvs.dj.domain.AutoText
class
*
* @param type One of these constants:
AUTOTEXT_PAGE_X_OF_Y
* AUTOTEXT_PAGE_X_SLASH_Y
AUTOTEXT_PAGE_X, AUTOTEXT_CREATED_ON
* AUTOTEXT_CUSTOM_MESSAGE
* @param position POSITION_HEADER or POSITION_FOOTER
* @param alignment
ALIGMENT_LEFT
ALIGMENT_CENTER
* ALIGMENT_RIGHT
* @param pattern only for dates:
PATTERN_DATE_DATE_ONLY
* PATTERN_DATE_TIME_ONLY
PATTERN_DATE_DATE_TIME
* @return
*/
public DynamicReportBuilder addAutoText(byte type, byte position, byte alignment, byte pattern) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(type, position, alignment_, pattern);
addAutoText(text);
return this;
}
/**
* Adds an autotext to the Report, this are common texts such us "Page X/Y",
* "Created on 07/25/2007", etc.
*
* The parameters are all constants from the
* ar.com.fdvs.dj.domain.AutoText
class
*
* @param type One of these constants:
AUTOTEXT_PAGE_X_OF_Y
* AUTOTEXT_PAGE_X_SLASH_Y
AUTOTEXT_PAGE_X, AUTOTEXT_CREATED_ON
* AUTOTEXT_CUSTOM_MESSAGE
* @param position POSITION_HEADER or POSITION_FOOTER
* @param alignment
ALIGMENT_LEFT
ALIGMENT_CENTER
* ALIGMENT_RIGHT
* @param pattern only for dates:
PATTERN_DATE_DATE_ONLY
* PATTERN_DATE_TIME_ONLY
PATTERN_DATE_DATE_TIME
* @param width with of the autotext. If autotext is of the type
* AUTOTEXT_PAGE_X_OF_Y or AUTOTEXT_PAGE_X_SLASH_Y then is the width of the
* first part
* @param width2 If autotext is of the type AUTOTEXT_PAGE_X_OF_Y or
* AUTOTEXT_PAGE_X_SLASH_Y, this defines the width given to the "total page"
* variable
* @return
*/
public DynamicReportBuilder addAutoText(byte type, byte position, byte alignment, byte pattern, int width, int width2) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(type, position, alignment_, pattern, width, width2);
addAutoText(text);
return this;
}
/**
* Adds a custom fixed message (literal) in header or footer. The message
* width will be the page witdth
* The parameters are all constants from the
* ar.com.fdvs.dj.domain.AutoText
class
*
*
*
* @param message The text to show
* @param position POSITION_HEADER or POSITION_FOOTER
* @param alignment
ALIGMENT_LEFT
ALIGMENT_CENTER
* ALIGMENT_RIGHT
* @return
*/
public DynamicReportBuilder addAutoText(String message, byte position, byte alignment) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(message, position, alignment_);
text.setWidth(AutoText.WIDTH_NOT_SET);
addAutoText(text);
return this;
}
/**
* Adds a custom fixed message (literal) in header or footer. The message
* width will be the page width
* The parameters are all constants from the
* ar.com.fdvs.dj.domain.AutoText
class
*
*
*
* @param message The text to show
* @param position POSITION_HEADER or POSITION_FOOTER
* @param alignment
ALIGMENT_LEFT
ALIGMENT_CENTER
* ALIGMENT_RIGHT
* @param width the width of the message
* @return
*/
public DynamicReportBuilder addAutoText(String message, byte position, byte alignment, int width) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(message, position, alignment_, width);
addAutoText(text);
return this;
}
public DynamicReportBuilder addAutoText(String message, byte position, byte alignment, int width, Style style) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(message, position, alignment_, width);
text.setStyle(style);
addAutoText(text);
return this;
}
/**
* Adds an autotext to the Report, this are common texts such us "Page X/Y",
* "Created on 07/25/2007", etc.
*
* The parameters are all constants from the
* ar.com.fdvs.dj.domain.AutoText
class
*
* @param type One of these constants:
AUTOTEXT_PAGE_X_OF_Y
* AUTOTEXT_PAGE_X_SLASH_Y
*
AUTOTEXT_PAGE_X, AUTOTEXT_CREATED_ON
AUTOTEXT_CUSTOM_MESSAGE
* @param position POSITION_HEADER or POSITION_FOOTER
* @param alignment
ALIGMENT_LEFT
ALIGMENT_CENTER
* ALIGMENT_RIGHT
* @return
*/
public DynamicReportBuilder addAutoText(byte type, byte position, byte alignment, int width, int width2) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(type, position, alignment_);
text.setWidth(width);
text.setWidth2(width2);
addAutoText(text);
return this;
}
public DynamicReportBuilder addAutoText(byte type, byte position, byte alignment, int width, int width2, Style style) {
return addAutoText(type, position, alignment, width, width2, 0, false, style);
}
public DynamicReportBuilder addAutoText(byte type, byte position, byte alignment, int width, int width2, int pageOffset, Style style) {
return addAutoText(type, position, alignment, width, width2, pageOffset, false, style);
}
public DynamicReportBuilder addAutoText(byte type, byte position, byte alignment, int width, int width2, int pageOffset, boolean useI18n, Style style) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(type, position, alignment_);
text.setPageOffset(pageOffset);
text.setUseI18n(useI18n);
text.setWidth(width);
text.setWidth2(width2);
text.setStyle(style);
addAutoText(text);
return this;
}
/**
* Adds an autotext to the Report, this are common texts such us "Page X/Y",
* "Created on 07/25/2007", etc.
*
* The parameters are all constants from the
* ar.com.fdvs.dj.domain.AutoText
class
*
* @param type One of these constants:
AUTOTEXT_PAGE_X_OF_Y
* AUTOTEXT_PAGE_X_SLASH_Y
*
AUTOTEXT_PAGE_X, AUTOTEXT_CREATED_ON
AUTOTEXT_CUSTOM_MESSAGE
* @param position POSITION_HEADER or POSITION_FOOTER
* @param alignment
ALIGMENT_LEFT
ALIGMENT_CENTER
* ALIGMENT_RIGHT
* @return
*/
public DynamicReportBuilder addAutoText(byte type, byte position, byte alignment) {
HorizontalBandAlignment alignment_ = HorizontalBandAlignment.buildAligment(alignment);
AutoText text = new AutoText(type, position, alignment_);
text.setWidth(AutoText.WIDTH_NOT_SET);
text.setWidth2(AutoText.WIDTH_NOT_SET);
addAutoText(text);
return this;
}
/**
* Builds the DynamicReport object. Cannot be used twice since this produced
* undesired results on the generated DynamicReport object
*
* @return
*/
public DynamicReport build() {
if (built) {
throw new DJBuilderException("DynamicReport already built. Cannot use more than once.");
} else {
built = true;
}
report.setOptions(options);
if (!globalVariablesGroup.getFooterVariables().isEmpty() || !globalVariablesGroup.getHeaderVariables().isEmpty() || !globalVariablesGroup.getVariables().isEmpty() || hasPercentageColumn()) {
report.getColumnsGroups().add(0, globalVariablesGroup);
}
createChartGroups();
addGlobalCrosstabs();
addSubreportsToGroups();
concatenateReports();
report.setAutoTexts(autoTexts);
return report;
}
private boolean hasPercentageColumn() {
for (AbstractColumn abstractColumn : report.getColumns()) {
if (abstractColumn instanceof PercentageColumn) {
return true;
}
}
return false;
}
private void addGlobalCrosstabs() {
//For header
for (DJCrosstab djcross : globalHeaderCrosstabs) {
DJGroup globalGroup = createDummyGroupForCrosstabs("crosstabHeaderGroup-" + globalHeaderCrosstabs.indexOf(djcross));
globalGroup.getHeaderCrosstabs().add(djcross);
report.getColumnsGroups().add(0, globalGroup);
}
//For footer
for (DJCrosstab djcross : globalFooterCrosstabs) {
DJGroup globalGroup = createDummyGroupForCrosstabs("crosstabFooterGroup-" + globalFooterCrosstabs.indexOf(djcross));
globalGroup.getFooterCrosstabs().add(djcross);
report.getColumnsGroups().add(0, globalGroup);
}
}
/**
* Because the groups are not created until we call the "build()" method,
* all the subreports that must go inside a group are handled here.
*/
protected void addSubreportsToGroups() {
for (Integer groupNum : groupFooterSubreports.keySet()) {
List list = groupFooterSubreports.get(groupNum);
DJGroup group = report.getColumnsGroups().get(groupNum - 1);
group.getFooterSubreports().addAll(list);
}
for (Integer groupNum : groupHeaderSubreports.keySet()) {
List list = groupHeaderSubreports.get(groupNum);
DJGroup group = report.getColumnsGroups().get(groupNum - 1);
group.getHeaderSubreports().addAll(list);
}
}
/**
* Create dummy groups for each concatenated report, and in the footer of
* each group adds the subreport.
*/
protected void concatenateReports() {
if (!concatenatedReports.isEmpty()) { // dummy group for page break if needed
DJGroup globalGroup = createDummyGroup();
report.getColumnsGroups().add(0, globalGroup);
}
for (Subreport subreport : concatenatedReports) {
DJGroup globalGroup = createDummyGroup();
globalGroup.getFooterSubreports().add(subreport);
report.getColumnsGroups().add(0, globalGroup);
}
}
/**
* @return
*/
private DJGroup createDummyGroup() {
DJGroup globalGroup = new DJGroup();
globalGroup.setLayout(GroupLayout.EMPTY);
GlobalGroupColumn globalCol = new GlobalGroupColumn("global");
globalGroup.setColumnToGroupBy(globalCol);
return globalGroup;
}
private DJGroup createDummyGroupForCrosstabs(String name) {
DJGroup globalGroup = new DJGroup();
globalGroup.setLayout(GroupLayout.EMPTY);
GlobalGroupColumn globalCol = new GlobalGroupColumn(name);
globalCol.setTitle("");
globalGroup.setColumnToGroupBy(globalCol);
return globalGroup;
}
public DynamicReportBuilder setTitle(String title) {
report.setTitle(title);
return this;
}
public DynamicReportBuilder setTitleIsJrExpression(boolean isExpression) {
report.setTitleIsJrExpression(isExpression);
return this;
}
/**
* Sets the name of the report.
* When exporting to Excel, this is going to be the sheet name. Be
* careful because Excel only allows 32 alphanumeric characters
*
* @param reportName
* @return
*/
public DynamicReportBuilder setReportName(String reportName) {
report.setReportName(reportName);
return this;
}
public DynamicReportBuilder setSubtitle(String subtitle) {
report.setSubtitle(subtitle);
return this;
}
public DynamicReportBuilder addColumn(AbstractColumn column) {
report.getColumns().add(column);
return this;
}
/**
* returns an unmodifiable List of the columns so far
*
* @return
*/
public List getColumns() {
return Collections.unmodifiableList(report.getColumns());
}
public DynamicReportBuilder addGroup(DJGroup group) {
report.getColumnsGroups().add(group);
return this;
}
public DynamicReportBuilder setHeaderHeight(int height) {
options.setHeaderHeight(height);
return this;
}
/**
* @return
* @deprecated @param height
*/
public DynamicReportBuilder setFooterHeight(int height) {
options.setFooterVariablesHeight(height);
return this;
}
public DynamicReportBuilder setFooterVariablesHeight(int height) {
options.setFooterVariablesHeight(height);
return this;
}
public DynamicReportBuilder setHeaderVariablesHeight(int height) {
options.setHeaderVariablesHeight(height);
return this;
}
public DynamicReportBuilder setDetailHeight(int height) {
options.setDetailHeight(height);
return this;
}
public DynamicReportBuilder setLeftMargin(int margin) {
options.setLeftMargin(margin);
return this;
}
public DynamicReportBuilder setRightMargin(int margin) {
options.setRightMargin(margin);
return this;
}
public DynamicReportBuilder setTopMargin(int margin) {
options.setTopMargin(margin);
return this;
}
public DynamicReportBuilder setBottomMargin(int margin) {
options.setBottomMargin(margin);
return this;
}
public DynamicReportBuilder setColumnsPerPage(int numColumns) {
options.setColumnsPerPage(numColumns);
return this;
}
public DynamicReportBuilder setColumnsPerPage(int numColumns, int columnSpace) {
options.setColumnsPerPage(numColumns);
options.setColumnSpace(columnSpace);
return this;
}
public DynamicReportBuilder setColumnSpace(int columSpace) {
options.setColumnSpace(columSpace);
return this;
}
/**
* When FALSE, no column names are printed (in the header band)
*
* @param bool
* @return
*/
public DynamicReportBuilder setPrintColumnNames(boolean bool) {
options.setPrintColumnNames(bool);
return this;
}
/**
* When TRUE, no page break at all (useful for Excell) Default is FALSE
*
* @param bool
* @return
*/
public DynamicReportBuilder setIgnorePagination(boolean bool) {
options.setIgnorePagination(bool);
return this;
}
public DynamicReportBuilder setUseFullPageWidth(boolean useFullwidth) {
options.setUseFullPageWidth(useFullwidth);
return this;
}
public DynamicReportBuilder setTitleStyle(Style titleStyle) {
this.report.setTitleStyle(titleStyle);
return this;
}
public DynamicReportBuilder setSubtitleStyle(Style subtitleStyle) {
this.report.setSubtitleStyle(subtitleStyle);
return this;
}
public DynamicReportBuilder setPrintBackgroundOnOddRows(boolean printBackgroundOnOddRows) {
this.options.setPrintBackgroundOnOddRows(printBackgroundOnOddRows);
return this;
}
public DynamicReportBuilder setOddRowBackgroundStyle(Style oddRowBackgroundStyle) {
this.options.setOddRowBackgroundStyle(oddRowBackgroundStyle);
return this;
}
public DynamicReportBuilder setGrandTotalLegend(String title) {
this.globalVariablesGroup.getColumnToGroupBy().setTitle(title);
return this;
}
public DynamicReportBuilder setGlobalHeaderVariableHeight(int height) {
globalVariablesGroup.setHeaderVariablesHeight(height);
return this;
}
public DynamicReportBuilder setGlobalFooterVariableHeight(int height) {
globalVariablesGroup.setFooterVariablesHeight(height);
return this;
}
/**
* @param col
* @param op
* @return
*/
public DynamicReportBuilder addGlobalHeaderVariable(AbstractColumn col, DJCalculation op) {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(col, op));
return this;
}
public DynamicReportBuilder addGlobalHeaderVariable(AbstractColumn col, DJCalculation op, Style style) {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(col, op, style));
return this;
}
public DynamicReportBuilder addGlobalHeaderVariable(AbstractColumn col, DJCalculation op, Style style, DJValueFormatter valueFormatter) {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(col, op, style, valueFormatter));
return this;
}
public DynamicReportBuilder addGlobalHeaderVariable(DJGroupVariable variable) {
globalVariablesGroup.addHeaderVariable(variable);
return this;
}
public DynamicReportBuilder addGlobalHeaderVariable(AbstractColumn column, CustomExpression valueExpression) {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(column, valueExpression));
return this;
}
public DynamicReportBuilder addGlobalHeaderVariable(AbstractColumn column, CustomExpression valueExpression, Style style) {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(column, valueExpression, style));
return this;
}
/**
* @param col
* @param op
* @return
*/
public DynamicReportBuilder addGlobalFooterVariable(AbstractColumn col, DJCalculation op) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(col, op));
return this;
}
public DynamicReportBuilder addGlobalFooterVariable(AbstractColumn col, DJCalculation op, Style style) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(col, op, style));
return this;
}
public DynamicReportBuilder addGlobalFooterVariable(AbstractColumn col, DJCalculation op, Style style, DJValueFormatter valueFormatter) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(col, op, style, valueFormatter));
return this;
}
public DynamicReportBuilder addGlobalFooterVariable(DJGroupVariable variable) {
globalVariablesGroup.addFooterVariable(variable);
return this;
}
public DynamicReportBuilder addGlobalFooterVariable(AbstractColumn column, CustomExpression valueExpression) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(column, valueExpression));
return this;
}
public DynamicReportBuilder addGlobalFooterVariable(AbstractColumn column, CustomExpression valueExpression, Style style) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(column, valueExpression, style));
return this;
}
public DynamicReportBuilder addGlobalColumnVariable(String position, AbstractColumn col, DJCalculation op) {
if (DJConstants.FOOTER.equals(position)) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(col, op));
} else {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(col, op));
}
return this;
}
public DynamicReportBuilder addGlobalColumnVariable(String position, AbstractColumn col, DJCalculation op, Style style) {
if (DJConstants.FOOTER.equals(position)) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(col, op, style));
} else {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(col, op, style));
}
return this;
}
public DynamicReportBuilder addGlobalColumnVariable(String position, AbstractColumn col, DJCalculation op, Style style, DJValueFormatter valueFormatter) {
if (DJConstants.FOOTER.equals(position)) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(col, op, style, valueFormatter));
} else {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(col, op, style, valueFormatter));
}
return this;
}
public DynamicReportBuilder addGlobalColumnVariable(String position, DJGroupVariable variable) {
if (DJConstants.FOOTER.equals(position)) {
globalVariablesGroup.addFooterVariable(variable);
} else {
globalVariablesGroup.addHeaderVariable(variable);
}
return this;
}
public DynamicReportBuilder addGlobalColumnVariable(String position, AbstractColumn column, CustomExpression valueExpression) {
if (DJConstants.FOOTER.equals(position)) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(column, valueExpression));
} else {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(column, valueExpression));
}
return this;
}
/**
* @param position DJConstants.FOOTER or DJConstants.HEADER
* @param column column to operate with
* @param valueExpression
* @param style
* @return
*/
public DynamicReportBuilder addGlobalColumnVariable(String position, AbstractColumn column, CustomExpression valueExpression, Style style) {
if (DJConstants.FOOTER.equals(position)) {
globalVariablesGroup.addFooterVariable(new DJGroupVariable(column, valueExpression, style));
} else {
globalVariablesGroup.addHeaderVariable(new DJGroupVariable(column, valueExpression, style));
}
return this;
}
/**
* For variable registration only (can bee later referenced in custom
* expression)
*
* @param name
* @param col
* @param op
* @return
*/
public DynamicReportBuilder addGlobalVariable(String name, AbstractColumn col, DJCalculation op) {
globalVariablesGroup.addVariable(new DJGroupVariableDef(name, col, op));
return this;
}
/**
* @param name
* @param prop
* @param op
* @return
* @see DynamicReportBuilder#addGlobalVariable(String, AbstractColumn,
* DJCalculation)
*/
public DynamicReportBuilder addGlobalVariable(String name, ColumnProperty prop, DJCalculation op) {
globalVariablesGroup.addVariable(new DJGroupVariableDef(name, prop, op));
return this;
}
/**
* @param name
* @param property
* @param className
* @param op
* @return
* @see DynamicReportBuilder#addGlobalVariable(String, AbstractColumn,
* DJCalculation)
*/
public DynamicReportBuilder addGlobalVariable(String name, String property, String className, DJCalculation op) {
globalVariablesGroup.addVariable(new DJGroupVariableDef(name, new ColumnProperty(property, className), op));
return this;
}
public DynamicReportBuilder setTitleHeight(int height) {
options.setTitleHeight(height);
return this;
}
public DynamicReportBuilder setSubtitleHeight(int height) {
options.setSubtitleHeight(height);
return this;
}
/**
* Defines the page size and orientation.
* Common pages size and orientation are constants of
* ar.com.fdvs.dj.domain.constants.Page
*
* @param page
* @return
*/
public DynamicReportBuilder setPageSizeAndOrientation(Page page) {
options.setPage(page);
return this;
}
@Deprecated
public DynamicReportBuilder addImageBanner(String path, int width, int height, byte align) {
ImageBanner.Alignment alignment = ImageBanner.Alignment.fromValue(align);
if (alignment == null)
throw new DJException("Invalid ImageBanner.Alignment");
ImageBanner banner = new ImageBanner(path, width, height, alignment);
options.getImageBanners().put(alignment, banner);
return this;
}
public DynamicReportBuilder addImageBanner(String path, int width, int height, ImageBanner.Alignment alignment) {
ImageBanner banner = new ImageBanner(path, width, height, alignment);
options.getImageBanners().put(alignment, banner);
return this;
}
@Deprecated
public DynamicReportBuilder addImageBanner(String path, int width, int height, byte align, ImageScaleMode scaleMode) {
ImageBanner.Alignment alignment = ImageBanner.Alignment.fromValue(align);
if (alignment == null)
throw new DJException("Invalid ImageBanner.Alignment");
ImageBanner banner = new ImageBanner(path, width, height, alignment);
banner.setScaleMode(scaleMode);
options.getImageBanners().put(alignment, banner);
return this;
}
public DynamicReportBuilder addImageBanner(String path, int width, int height, ImageBanner.Alignment alignment, ImageScaleMode scaleMode) {
ImageBanner banner = new ImageBanner(path, width, height, alignment);
banner.setScaleMode(scaleMode);
options.getImageBanners().put(alignment, banner);
return this;
}
@Deprecated
public DynamicReportBuilder addFooterImageBanner(String path, int width, int height, byte align, ImageScaleMode scaleMode) {
ImageBanner.Alignment alignment = ImageBanner.Alignment.fromValue(align);
if (alignment == null)
throw new DJException("Invalid ImageBanner.Alignment");
ImageBanner banner = new ImageBanner(path, width, height, alignment);
banner.setScaleMode(scaleMode);
options.getFooterImageBanners().put(alignment, banner);
return this;
}
public DynamicReportBuilder addFooterImageBanner(String path, int width, int height, ImageBanner.Alignment alignment, ImageScaleMode scaleMode) {
ImageBanner banner = new ImageBanner(path, width, height, alignment);
banner.setScaleMode(scaleMode);
options.getFooterImageBanners().put(alignment, banner);
return this;
}
public DynamicReportBuilder addFirstPageImageBanner(String path, int width, int height, ImageBanner.Alignment align) {
ImageBanner banner = new ImageBanner(path, width, height, align);
options.getFirstPageImageBanners().put(align, banner);
return this;
}
@Deprecated
public DynamicReportBuilder addFirstPageImageBanner(String path, int width, int height, byte align) {
ImageBanner.Alignment alignment = ImageBanner.Alignment.fromValue(align);
if (alignment == null)
throw new DJException("Invalid ImageBanner.Alignment");
ImageBanner banner = new ImageBanner(path, width, height, alignment);
options.getFirstPageImageBanners().put(alignment, banner);
return this;
}
@Deprecated
public DynamicReportBuilder addFirstPageFooterImageBanner(String path, int width, int height, byte align) {
ImageBanner.Alignment alignment = ImageBanner.Alignment.fromValue(align);
if (alignment == null)
throw new DJException("Invalid ImageBanner.Alignment");
ImageBanner banner = new ImageBanner(path, width, height, alignment);
options.getFirstPageFooterImageBanners().put(alignment, banner);
return this;
}
public DynamicReportBuilder addFirstPageFooterImageBanner(String path, int width, int height, ImageBanner.Alignment alignment) {
ImageBanner banner = new ImageBanner(path, width, height, alignment);
options.getFirstPageFooterImageBanners().put(alignment, banner);
return this;
}
@Deprecated
public DynamicReportBuilder addFirstPageImageBanner(String path, int width, int height, byte align, ImageScaleMode scaleMode) {
ImageBanner.Alignment alignment = ImageBanner.Alignment.fromValue(align);
if (alignment == null)
throw new DJException("Invalid ImageBanner.Alignment");
ImageBanner banner = new ImageBanner(path, width, height, alignment);
banner.setScaleMode(scaleMode);
options.getFirstPageImageBanners().put(alignment, banner);
return this;
}
public DynamicReportBuilder addFirstPageImageBanner(String path, int width, int height, ImageBanner.Alignment alignment, ImageScaleMode scaleMode) {
ImageBanner banner = new ImageBanner(path, width, height, alignment);
banner.setScaleMode(scaleMode);
options.getFirstPageImageBanners().put(alignment, banner);
return this;
}
/**
* Registers a field that is not necesary bound to a column, it can be used
* in a custom expression
*
* @param name
* @param className
* @return
*/
public DynamicReportBuilder addField(String name, String className) {
return addField(new ColumnProperty(name, className));
}
public DynamicReportBuilder addField(String name, Class clazz) {
return addField(new ColumnProperty(name, clazz.getName()));
}
/**
* Registers a field that is not necesary bound to a column, it can be used
* in a custom expression
*
* @param columnProperty
* @return
*/
public DynamicReportBuilder addField(ColumnProperty columnProperty) {
report.getFields().add(columnProperty);
return this;
}
/**
* Returns registered fields so far.
*
* @return List
*/
public List getFields() {
return report.getFields();
}
/**
* Registers a field that is not necesary bound to a column, it can be used
* in a custom expression
*
* @return A Dynamic Report Builder
* @deprecated
*/
public DynamicReportBuilder addChart(DJChart chart) {
report.getCharts().add(chart);
return this;
}
/**
* Registers a field that is not necesary bound to a column, it can be used
* in a custom expression
*
* @param djChart a DJ chart
* @return A Dynamic Report Builder
*/
public DynamicReportBuilder addChart(ar.com.fdvs.dj.domain.chart.DJChart djChart) {
report.getNewCharts().add(djChart);
return this;
}
private void createChartGroups() {
for (ar.com.fdvs.dj.domain.chart.DJChart djChart : report.getNewCharts()) {
DJGroup djGroup = getChartColumnsGroup(djChart);
if (djGroup == null) {
djGroup = new GroupBuilder().setCriteriaColumn(djChart.getDataset().getColumnsGroup())
.setGroupLayout(GroupLayout.VALUE_FOR_EACH)
.build();
addGroup(djGroup);
}
}
}
private DJGroup getChartColumnsGroup(ar.com.fdvs.dj.domain.chart.DJChart djChart) {
PropertyColumn columnsGroup = djChart.getDataset().getColumnsGroup();
for (DJGroup djGroup : report.getColumnsGroups()) {
if (djGroup.getColumnToGroupBy() == columnsGroup) {
return djGroup;
}
}
return null;
}
/**
* The full path of a jrxml file, or the path in the classpath of a jrxml
* resource.
*
* @param path
* @return
*/
public DynamicReportBuilder setTemplateFile(String path) {
report.setTemplateFileName(path);
return this;
}
/**
* The full path of a jrxml file, or the path in the classpath of a jrxml
* resource.
*
* @param path
* @return
*/
public DynamicReportBuilder setTemplateFile(String path, boolean importFields, boolean importVariables, boolean importParameters, boolean importDatasets) {
report.setTemplateFileName(path);
report.setTemplateImportFields(importFields);
report.setTemplateImportParameters(importParameters);
report.setTemplateImportVariables(importVariables);
report.setTemplateImportDatasets(importDatasets);
return this;
}
public DynamicReportBuilder setMargins(int top, int bottom, int left, int right) {
options.setTopMargin(top);
options.setBottomMargin(bottom);
options.setLeftMargin(left);
options.setRightMargin(right);
return this;
}
public DynamicReportBuilder setDefaultStyles(Style title, Style subtitle, Style columnHeader, Style columDetail) {
if (columDetail != null) {
options.setDefaultDetailStyle(columDetail);
}
if (columnHeader != null) {
options.setDefaultHeaderStyle(columnHeader);
}
if (subtitle != null) {
report.setSubtitleStyle(subtitle);
}
if (title != null) {
report.setTitleStyle(title);
}
return this;
}
/**
* Adds the locale to use when filling the report.
*
* @param locale
* @return
*/
public DynamicReportBuilder setReportLocale(Locale locale) {
report.setReportLocale(locale);
return this;
}
/**
* All concatenated reports are shown in the same order they are inserted
*
* @param subreport
* @return
*/
public DynamicReportBuilder addConcatenatedReport(Subreport subreport) {
concatenatedReports.add(subreport);
return this;
}
public DynamicReportBuilder addConcatenatedReport(DynamicReport dynamicReport, LayoutManager layoutManager, String dataSourcePath, int dataSourceOrigin, int dataSourceType) throws DJBuilderException {
Subreport subreport = new SubReportBuilder()
.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setDynamicReport(dynamicReport, layoutManager)
.build();
concatenatedReports.add(subreport);
return this;
}
public DynamicReportBuilder addConcatenatedReport(DynamicReport dynamicReport, LayoutManager layoutManager, String dataSourcePath, int dataSourceOrigin, int dataSourceType, boolean startOnNewPage) throws DJBuilderException {
Subreport subreport = new SubReportBuilder()
.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setDynamicReport(dynamicReport, layoutManager)
.setStartInNewPage(startOnNewPage)
.build();
concatenatedReports.add(subreport);
return this;
}
public DynamicReportBuilder addConcatenatedReport(JasperReport jasperReport, String dataSourcePath, int dataSourceOrigin, int dataSourceType) throws DJBuilderException {
Subreport subreport = new SubReportBuilder()
.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setReport(jasperReport)
.build();
concatenatedReports.add(subreport);
return this;
}
public DynamicReportBuilder addConcatenatedReport(JasperReport jasperReport, String dataSourcePath, int dataSourceOrigin, int dataSourceType, boolean startOnNewPage) throws DJBuilderException {
Subreport subreport = new SubReportBuilder()
.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setReport(jasperReport)
.setStartInNewPage(startOnNewPage)
.build();
concatenatedReports.add(subreport);
return this;
}
/**
* Adds in the group (starts with 1) "groupNumber" a subreport in the footer
* band
*
* @param groupNumber
* @param subreport
* @return
*/
public DynamicReportBuilder addSubreportInGroupFooter(int groupNumber, Subreport subreport) {
return addSubreportInContainer(groupNumber, subreport, groupFooterSubreports);
}
protected DynamicReportBuilder addSubreportInContainer(int groupNumber, Subreport subreport, Map> container) {
Integer groupNum = groupNumber;
List list = container.get(groupNum);
if (list == null) {
list = new ArrayList();
container.put(groupNum, list);
}
list.add(subreport);
return this;
}
public DynamicReportBuilder addSubreportInGroupFooter(int groupNumber, DynamicReport dynamicReport, LayoutManager layoutManager, String dataSourcePath, int dataSourceOrigin, int dataSourceType) throws DJBuilderException {
Subreport subreport = new SubReportBuilder()
.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setDynamicReport(dynamicReport, layoutManager)
.build();
return addSubreportInGroupFooter(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupFooter(int groupNumber, DynamicReport dynamicReport, LayoutManager layoutManager, String dataSourcePath, int dataSourceOrigin, int dataSourceType, SubreportParameter[] params) throws DJBuilderException {
SubReportBuilder srb = new SubReportBuilder();
srb.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setDynamicReport(dynamicReport, layoutManager);
if (params != null) {
for (SubreportParameter param : params) {
srb.addParameter(param);
}
}
Subreport subreport = srb.build();
return addSubreportInGroupFooter(groupNumber, subreport);
}
/**
* @param position {@link DJConstants#FOOTER} or {@link DJConstants#HEADER}
* @param groupNumber
* @param dynamicReport
* @param layoutManager
* @param dataSourcePath
* @param dataSourceOrigin
* @param dataSourceType
* @param params
* @return
* @throws DJBuilderException
*/
public DynamicReportBuilder addSubreportInGroup(String position, int groupNumber, DynamicReport dynamicReport, LayoutManager layoutManager, String dataSourcePath, int dataSourceOrigin, int dataSourceType, SubreportParameter[] params) throws DJBuilderException {
if (DJConstants.FOOTER.equals(position)) {
addSubreportInGroupFooter(groupNumber, dynamicReport, layoutManager, dataSourcePath, dataSourceOrigin, dataSourceType, params);
} else {
addSubreportInGroupHeader(groupNumber, dynamicReport, layoutManager, dataSourcePath, dataSourceOrigin, dataSourceType, params);
}
return this;
}
public DynamicReportBuilder addSubreportInGroupHeader(int groupNumber, DynamicReport dynamicReport, LayoutManager layoutManager, String dataSourcePath, int dataSourceOrigin, int dataSourceType, SubreportParameter[] params) throws DJBuilderException {
SubReportBuilder srb = new SubReportBuilder();
srb.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setDynamicReport(dynamicReport, layoutManager);
if (params != null) {
for (SubreportParameter param : params) {
srb.addParameter(param);
}
}
Subreport subreport = srb.build();
return addSubreportInGroupHeader(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupFooter(int groupNumber,
DynamicReport dynamicReport, LayoutManager layoutManager,
String dataSourcePath, int dataSourceOrigin, int dataSourceType,
SubreportParameter[] params, boolean startInNewPage)
throws DJBuilderException {
SubReportBuilder srb = new SubReportBuilder();
srb.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setStartInNewPage(startInNewPage).setDynamicReport(
dynamicReport, layoutManager);
if (params != null) {
for (SubreportParameter param : params) {
srb.addParameter(param);
}
}
Subreport subreport = srb.build();
return addSubreportInGroupFooter(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupHeader(int groupNumber,
DynamicReport dynamicReport, LayoutManager layoutManager,
String dataSourcePath, int dataSourceOrigin, int dataSourceType,
SubreportParameter[] params, boolean startInNewPage)
throws DJBuilderException {
SubReportBuilder srb = new SubReportBuilder();
srb.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setStartInNewPage(startInNewPage).setDynamicReport(
dynamicReport, layoutManager);
if (params != null) {
for (SubreportParameter param : params) {
srb.addParameter(param);
}
}
Subreport subreport = srb.build();
return addSubreportInGroupHeader(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupFooter(int groupNumber,
DynamicReport dynamicReport, LayoutManager layoutManager,
String dataSourcePath, int dataSourceOrigin, int dataSourceType,
SubreportParameter[] params, boolean startInNewPage, boolean fitParent)
throws DJBuilderException {
SubReportBuilder srb = new SubReportBuilder();
srb.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setStartInNewPage(startInNewPage).setDynamicReport(
dynamicReport, layoutManager).setFitToParentPrintableArea(fitParent);
if (params != null) {
for (SubreportParameter param : params) {
srb.addParameter(param);
}
}
Subreport subreport = srb.build();
return addSubreportInGroupFooter(groupNumber, subreport);
}
/**
* @param position position {@link DJConstants#FOOTER} or
* {@link DJConstants#HEADER}
* @param groupNumber
* @param dynamicReport
* @param layoutManager
* @param dataSourcePath
* @param dataSourceOrigin
* @param dataSourceType
* @param params
* @param startInNewPage
* @param fitParent
* @return
* @throws DJBuilderException
*/
public DynamicReportBuilder addSubreportInGroup(String position, int groupNumber,
DynamicReport dynamicReport, LayoutManager layoutManager,
String dataSourcePath, int dataSourceOrigin, int dataSourceType,
SubreportParameter[] params, boolean startInNewPage, boolean fitParent)
throws DJBuilderException {
if (DJConstants.FOOTER.equals(position)) {
addSubreportInGroupFooter(groupNumber, dynamicReport, layoutManager, dataSourcePath, dataSourceOrigin, dataSourceType, params, startInNewPage, fitParent);
} else {
addSubreportInGroupHeader(groupNumber, dynamicReport, layoutManager, dataSourcePath, dataSourceOrigin, dataSourceType, params, startInNewPage, fitParent);
}
return this;
}
public DynamicReportBuilder addSubreportInGroupHeader(int groupNumber,
DynamicReport dynamicReport, LayoutManager layoutManager,
String dataSourcePath, int dataSourceOrigin, int dataSourceType,
SubreportParameter[] params, boolean startInNewPage, boolean fitParent)
throws DJBuilderException {
SubReportBuilder srb = new SubReportBuilder();
srb.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setStartInNewPage(startInNewPage).setDynamicReport(
dynamicReport, layoutManager).setFitToParentPrintableArea(fitParent);
if (params != null) {
for (SubreportParameter param : params) {
srb.addParameter(param);
}
}
Subreport subreport = srb.build();
return addSubreportInGroupHeader(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupFooter(int groupNumber,
String pathToSubreport, String dataSourcePath,
int dataSourceOrigin, int dataSourceType) throws DJBuilderException {
Subreport subreport = new SubReportBuilder().setDataSource(
dataSourceOrigin, dataSourceType, dataSourcePath)
.setPathToReport(pathToSubreport).build();
return addSubreportInGroupFooter(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupFooter(int groupNumber,
String pathToSubreport, String dataSourcePath,
int dataSourceOrigin, int dataSourceType, boolean startInNewPage)
throws DJBuilderException {
Subreport subreport = new SubReportBuilder().setDataSource(
dataSourceOrigin, dataSourceType, dataSourcePath)
.setPathToReport(pathToSubreport).setStartInNewPage(
startInNewPage).build();
return addSubreportInGroupFooter(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupHeader(int groupNumber, Subreport subreport) {
return addSubreportInContainer(groupNumber, subreport, groupHeaderSubreports);
}
public DynamicReportBuilder addSubreportInGroupHeader(int groupNumber, DynamicReport dynamicReport, LayoutManager layoutManager, String dataSourcePath, int dataSourceOrigin, int dataSourceType) throws DJBuilderException {
Subreport subreport = new SubReportBuilder()
.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setDynamicReport(dynamicReport, layoutManager)
.build();
return addSubreportInGroupHeader(groupNumber, subreport);
}
public DynamicReportBuilder addSubreportInGroupHeader(int groupNumber, String pathToSubreport, String dataSourcePath, int dataSourceOrigin, int dataSourceType) throws DJBuilderException {
Subreport subreport = new SubReportBuilder()
.setDataSource(dataSourceOrigin, dataSourceType, dataSourcePath)
.setPathToReport(pathToSubreport)
.build();
return addSubreportInGroupHeader(groupNumber, subreport);
}
/**
* You can register styles object for later reference them directly. Parent
* styles should be registered this way
*
* @param style
* @return
* @throws DJBuilderException
*/
public DynamicReportBuilder addStyle(Style style) throws DJBuilderException {
if (style.getName() == null) {
throw new DJBuilderException("Invalid style. The style must have a name");
}
report.addStyle(style);
return this;
}
/**
* @return
* @deprecated @param resourceBundle
*/
public DynamicReportBuilder addResourceBundle(String resourceBundle) {
return setResourceBundle(resourceBundle);
}
public DynamicReportBuilder setResourceBundle(String resourceBundle) {
report.setResourceBundle(resourceBundle);
return this;
}
public DynamicReportBuilder setGrandTotalLegendStyle(Style grandTotalStyle) {
this.globalVariablesGroup.getColumnToGroupBy().setHeaderStyle(grandTotalStyle);
this.globalVariablesGroup.getColumnToGroupBy().setStyle(grandTotalStyle);
return this;
}
/**
* Adds a crosstab in the header, before the the data
*
* @param cross
* @return
*/
public DynamicReportBuilder addHeaderCrosstab(DJCrosstab cross) {
this.globalHeaderCrosstabs.add(cross);
return this;
}
/**
* Adds a crosstab in the footer of the report (at the end of all data)
*
* @param cross
* @return
*/
public DynamicReportBuilder addFooterCrosstab(DJCrosstab cross) {
this.globalFooterCrosstabs.add(cross);
return this;
}
/**
* Adds main report query.
*
* @param text
* @param language use constants from {@link DJConstants}
* @return
*/
public DynamicReportBuilder setQuery(String text, String language) {
this.report.setQuery(new DJQuery(text, language));
return this;
}
public DynamicReportBuilder addFont(String fontName, java.awt.Font font) {
this.report.getFontsMap().put(fontName, font);
return this;
}
/**
* Defines the behaviour when the datasource is empty. Defatul vaue is
* {@link DJConstants#WHEN_NO_DATA_TYPE_NO_PAGES}
*
* @return A Dynamic Report Builder
*/
public DynamicReportBuilder setWhenNoDataType(byte whenNoDataType) {
this.report.setWhenNoDataType(whenNoDataType);
return this;
}
/**
* @return A Dynamic Report Builder
* @see DynamicReportBuilder#setWhenNoDataType
*/
public DynamicReportBuilder setWhenNoDataNoPages() {
this.report.setWhenNoDataType(DJConstants.WHEN_NO_DATA_TYPE_NO_PAGES);
return this;
}
/**
* @return A Dynamic Report Builder
* @see DynamicReportBuilder#setWhenNoDataType
*/
public DynamicReportBuilder setWhenNoDataBlankPage() {
this.report.setWhenNoDataType(DJConstants.WHEN_NO_DATA_TYPE_BLANK_PAGE);
return this;
}
/**
* @return A Dynamic Report Builder
* @see DynamicReportBuilder#setWhenNoDataType
*/
public DynamicReportBuilder setWhenNoDataAllSectionNoDetail() {
this.report.setWhenNoDataType(DJConstants.WHEN_NO_DATA_TYPE_ALL_SECTIONS_NO_DETAIL);
return this;
}
/**
* @return A Dynamic Report Builder
* @see DynamicReportBuilder#setWhenNoDataType
*/
public DynamicReportBuilder setWhenNoDataShowNoDataSection() {
this.report.setWhenNoDataType(DJConstants.WHEN_NO_DATA_TYPE_NO_DATA_SECTION);
return this;
}
/**
* Defines what to show if a missing resource is referenced Possible values
* are:
* DJConstants.WHEN_RESOURCE_MISSING_TYPE_EMPTY: Leaves and empty
* field.
* DJConstants.WHEN_RESOURCE_MISSING_TYPE_ERROR: Throwns and exception.
* DJConstants.WHEN_RESOURCE_MISSING_TYPE_KEY: Shows the key of the missing
* resource.
DJConstants.WHEN_RESOURCE_MISSING_TYPE_NULL: returns NULL
*
* @param whenResourceMissing
* @return
*/
public DynamicReportBuilder setWhenResourceMissing(byte whenResourceMissing) {
this.report.setWhenResourceMissing(whenResourceMissing);
return this;
}
public DynamicReportBuilder setWhenResourceMissingLeaveEmptySpace() {
this.report.setWhenResourceMissing(DJConstants.WHEN_RESOURCE_MISSING_TYPE_EMPTY);
return this;
}
public DynamicReportBuilder setWhenResourceMissingThrowException() {
this.report.setWhenResourceMissing(DJConstants.WHEN_RESOURCE_MISSING_TYPE_ERROR);
return this;
}
public DynamicReportBuilder setWhenResourceMissingShowKey() {
this.report.setWhenResourceMissing(DJConstants.WHEN_RESOURCE_MISSING_TYPE_KEY);
return this;
}
public DynamicReportBuilder setWhenResourceMissingReturnNull() {
this.report.setWhenResourceMissing(DJConstants.WHEN_RESOURCE_MISSING_TYPE_NULL);
return this;
}
/**
* Defines the text to show when the data source is empty.
* By default the title and column headers are shown
*
* @param text
* @param style : the style of the text
* @return
*/
public DynamicReportBuilder setWhenNoData(String text, Style style) {
this.report.setWhenNoDataStyle(style);
this.report.setWhenNoDataText(text);
this.report.setWhenNoDataType(DJConstants.WHEN_NO_DATA_TYPE_NO_DATA_SECTION);
return this;
}
/**
* Defines the text to show when the data source is empty.
*
* @param text
* @param style : the style of the text
* @param showTitle : if true, the title is shown
* @param showColumnHeader : if true, the column headers are shown
* @return A Dynamic Report Builder
*/
public DynamicReportBuilder setWhenNoData(String text, Style style, boolean showTitle, boolean showColumnHeader) {
this.report.setWhenNoDataStyle(style);
this.report.setWhenNoDataText(text);
this.report.setWhenNoDataType(DJConstants.WHEN_NO_DATA_TYPE_NO_DATA_SECTION);
this.report.setWhenNoDataShowColumnHeader(showColumnHeader);
this.report.setWhenNoDataShowTitle(showTitle);
return this;
}
public DynamicReportBuilder addParameter(String name, String className) {
this.report.addParameter(name, className);
return this;
}
public DynamicReportBuilder addParameter(Parameter parameter) {
this.report.addParameter(parameter);
return this;
}
/**
* If true and there is no room for a textfield at the end of a page in the
* detail band, it will be splitted and continued in next page.
*
* @param split
* @return A Dynamic Report Builder
*/
public DynamicReportBuilder setAllowDetailSplit(boolean split) {
this.report.setAllowDetailSplit(split);
return this;
}
/**
* Adds a property to report design, this properties are mostly used by
* exporters to know if any specific configuration is needed
*
* @param name
* @param value
* @return A Dynamic Report Builder
*/
public DynamicReportBuilder setProperty(String name, String value) {
this.report.setProperty(name, value);
return this;
}
/**
* When false, no detail is shown. This is useful when using certain
* grouping layout and header variables
*
* @param bool
* @return A Dynamic Report Builder
*/
public DynamicReportBuilder setShowDetailBand(boolean bool) {
this.options.setShowDetailBand(bool);
return this;
}
/**
* Returns the "idx" column, idx is 0 based
*
* @param idx
* @return
*/
public AbstractColumn getColumn(int idx) {
return this.report.getColumns().get(idx);
}
/**
* Returns the "idx" group, idx is 0 based
*
* @param idx
* @return
*/
public DJGroup getGroup(int idx) {
return this.report.getColumnsGroups().get(idx);
}
public DynamicReportBuilder setTitle(String title, boolean isExpression) {
setTitle(title);
setTitleIsJrExpression(isExpression);
return this;
}
/**
* Use this to register variables manually.
*
* @param var
* @return
*/
public DynamicReportBuilder addVariable(DJVariable var) {
report.getVariables().add(var);
return this;
}
/**
* Set a colspan in a group of columns. First add the cols to the report
*
* @param colNumber the index of the col
* @param colQuantity the number of cols how i will take
* @param colspanTitle colspan title
* @return a Dynamic Report Builder
* @throws ColumnBuilderException When the index of the cols is out of
* bounds.
*/
public DynamicReportBuilder setColspan(int colNumber, int colQuantity, String colspanTitle) {
this.setColspan(colNumber, colQuantity, colspanTitle, null);
return this;
}
public DynamicReportBuilder setColspan(int colNumber, int colQuantity, String colspanTitle, Style colspanStyle) {
List cols;
try {
cols = report.getColumns().subList(colNumber, (colQuantity + colNumber));
} catch (IndexOutOfBoundsException e) {
String message = "Cols must be between 0 and " + (report.getColumns().size() - 1);
throw new ColumnBuilderException(message, e);
}
DJColSpan colSpan = new DJColSpan();
colSpan.setTitle(colspanTitle);
colSpan.setColumns(cols);
colSpan.setColspanHeaderStyle(colspanStyle);
for (AbstractColumn abstractColumn : colSpan.getColumns()) {
abstractColumn.setColSpan(colSpan);
}
return this;
}
/**
* Sets the language of the expressions used in the report (can be one of
* java, groovy, or javascript).
*
* Default is DJConstants#REPORT_LANGUAGE_JAVA
*
* @param language
* @return
* @see DJConstants#REPORT_LANGUAGE_JAVA DJConstants#REPORT_LANGUAGE_GROOVY
* DJConstants#REPORT_LANGUAGE_JAVASCRIPT
* @see DynamicReport#language
*/
public DynamicReportBuilder setLanguage(String language) {
this.report.setLanguage(language);
return this;
}
public DynamicReportBuilder addWatermark(String text) {
return addWatermark(new DJWaterMark(text));
}
public DynamicReportBuilder addWatermark(DJWaterMark waterMark) {
this.report.setWaterMark(waterMark);
return this;
}
public DynamicReportBuilder addWatermark(String text, Font font, Color color, int angle) {
return addWatermark(new DJWaterMark(text, font, Color.cyan, angle));
}
public DynamicReportBuilder setJasperDesignDecorator(JasperDesignDecorator jasperDesignDecorator) {
this.report.setJasperDesignDecorator(jasperDesignDecorator);
return this;
}
public DynamicReportBuilder setDefaultEncoding(String encoding) {
this.report.setDefaultEncoding(encoding);
return this;
}
}