ar.com.fdvs.dj.domain.builders.SubReportBuilder Maven / Gradle / Ivy
/*
* 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.DynamicJasperHelper;
import ar.com.fdvs.dj.core.layout.LayoutManager;
import ar.com.fdvs.dj.domain.DJDataSource;
import ar.com.fdvs.dj.domain.DynamicReport;
import ar.com.fdvs.dj.domain.entities.Subreport;
import ar.com.fdvs.dj.domain.entities.SubreportParameter;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class SubReportBuilder {
/**
* Logger for this class
*/
private static final Log logger = LogFactory.getLog(SubReportBuilder.class);
private Subreport subreport = new Subreport();
public Subreport build() throws DJBuilderException {
if (subreport.getPath() == null && subreport.getDynamicReport() == null && subreport.getReport() == null)
throw new DJBuilderException("No subreport origin defined (path, dynamicReport, jasperReport)");
//If the subreport comes from a file, then we load it now
if (subreport.getPath() != null) {
JasperReport jr;
File file = new File(subreport.getPath());
if (file.exists()){
logger.debug("Loading subreport from file path");
try {
jr = (JasperReport) JRLoader.loadObject(file);
} catch (JRException e) {
throw new DJBuilderException("Could not load subreport.",e);
}
} else {
logger.debug("Loading subreport from classpath");
URL url = DynamicJasperHelper.class.getClassLoader().getResource(subreport.getPath());
try {
jr = (JasperReport) JRLoader.loadObject(url.openStream());
} catch (IOException e) {
throw new DJBuilderException("Could not open subreport as an input stream",e);
} catch (JRException e) {
throw new DJBuilderException("Could not load subreport.",e);
}
}
subreport.setReport(jr);
}
return subreport;
}
/**
* Indicates from where to get the data source.
*
* @param origin Must be one of these constans located in DJConstants inteface
* - SUBREPORT_DATAS_OURCE_ORIGIN_PARAMETER
* - SUBREPORT_DATAS_OURCE_ORIGIN_FIELD
* - SUBREPORT_DATAS_OURCE_ORIGIN_INTERNAL
* @param type tell if the datasource is a Collection, an Array, a ResultSet or whatever.
* Its value must be a constant from {@link DJConstants} of the like DATA_SOURCE_TYPE_...
* @param expression is -depending on the origin- te path to the datasource
* ie: if origin is SUBREPORT_DATAS_OURCE_ORIGIN_PARAMETER, then expression can be "subreport_datasource".
* You must in the parameters map an object using "subreport_datasource" as the key.
* The object must be an instance of {@link JRDataSource} or any of the following
* Collection, Array, ResultSet, or any of the data source types provided by Jasper Reports
* @return
*/
public SubReportBuilder setDataSource(int origin, int type, String expression) {
DJDataSource ds = new DJDataSource(expression, origin, type);
subreport.setDatasource(ds);
return this;
}
/**
* like addDataSource(int origin, int type, String expression) but the type will be of the {@link JRDataSource}
* @param origin
* @param expression
* @return
*/
public SubReportBuilder setDataSource(int origin, String expression) {
return setDataSource(origin, DJConstants.DATA_SOURCE_TYPE_JRDATASOURCE, expression);
}
/**
* like addDataSource(int origin, String expression) but the origin will be from a Parameter
* @param expression
* @return
*/
public SubReportBuilder setDataSource(String expression) {
return setDataSource(DJConstants.DATA_SOURCE_ORIGIN_PARAMETER, DJConstants.DATA_SOURCE_TYPE_JRDATASOURCE, expression);
}
public SubReportBuilder setReport(JasperReport jasperReport) {
subreport.setReport(jasperReport);
return this;
}
public SubReportBuilder setDynamicReport(DynamicReport dynamicReport, LayoutManager layoutManager) {
subreport.setDynamicReport(dynamicReport);
subreport.setLayoutManager(layoutManager);
return this;
}
public SubReportBuilder setPathToReport(String path) {
subreport.setPath(path);
return this;
}
public SubReportBuilder setStartInNewPage(boolean startInNewPage) {
subreport.setStartInNewPage(startInNewPage);
return this;
}
public SubReportBuilder addParameter(SubreportParameter sp) {
subreport.getParameters().add(sp);
return this;
}
public SubReportBuilder addParameterFieldType(String propertyName, String paramName) {
SubreportParameter sp = new SubreportParameter(paramName,propertyName,null,DJConstants.SUBREPORT_PARAM_ORIGIN_FIELD);
subreport.getParameters().add(sp);
return this;
}
/**
* When true, and id the subreport is dynamic, it's page size and margins will match with the parent report
* @param fitparent
* @return
*/
public SubReportBuilder setFitToParentPrintableArea(boolean fitparent) {
subreport.setFitToParentPrintableArea(fitparent);
return this;
}
/**
* If false, and the report doesn't fit in the space given until end of page, it will be pushed to the next
* page.
* default is TRUE
* @param splitAllowed
* @return
*/
public SubReportBuilder setSplitAllowed(boolean splitAllowed) {
subreport.setSplitAllowed(splitAllowed);
return this;
}
/**
* defines the KEY in the parent report parameters map where to get the subreport parameters map.
* @param path where to get the parameter map for the subrerpot.
* @return
*/
public SubReportBuilder setParameterMapPath(String path) {
subreport.setParametersExpression(path);
subreport.setParametersMapOrigin(DJConstants.SUBREPORT_PARAMETER_MAP_ORIGIN_PARAMETER);
return this;
}
/**
*
* @param path where to get the parameter map for the subrerpot
* @param origin where the paramters map comes from: DJConstants.SUBREPORT_PARAMETER_MAP_ORIGIN_PARAMETER or DJConstants.SUBREPORT_PARAMETER_MAP_ORIGIN_FIELD
* @return
*/
public SubReportBuilder setParameterMapPath(String path, int origin) {
subreport.setParametersExpression(path);
subreport.setParametersMapOrigin(origin);
return this;
}
public SubReportBuilder setUserParentReportParameterMap(boolean useParent) {
subreport.setUseParentReportParameters(useParent);
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy