All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apertereports.engine.ReportWebServiceHelper Maven / Gradle / Ivy

package org.apertereports.engine;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory;

import org.apertereports.common.ConfigurationConstants;
import org.apertereports.common.ReportConstants;
import org.apertereports.common.ReportConstants.ErrorCodes;
import org.apertereports.common.ReportConstants.Parameter;
import org.apertereports.common.exception.AperteReportsException;
import org.apertereports.common.utils.ReportGeneratorUtils;
import org.apertereports.common.xml.ws.ReportData;
import org.apertereports.common.xml.ws.ReportExporterParameter;
import org.springframework.util.StringUtils;

public class ReportWebServiceHelper {
	private static final Logger logger = Logger.getLogger(ReportWebServiceHelper.class.getName());

	public byte[] generateAndExportReport(ReportData reportData) throws AperteReportsException {
		Map exporterParameters = getExporterParameters(reportData);
		Map configuration = getJasperConfiguration(reportData);
		Map reportParameters = getReportParameters(reportData);

		byte[] content;
		try {
			content = ReportGeneratorUtils.unwrapDataHandler(reportData.getSource());

			content = new ReportMaster(content, reportData.getId(), new EmptySubreportProvider())
					.generateAndExportReport(reportData.getFormat(), reportParameters, exporterParameters,
							configuration);
		} catch (AperteReportsException e) {
			throw e;
		} 

		return content;
	}

	private Map getReportParameters(ReportData reportData) throws AperteReportsException {
		Map reportParameters = new HashMap();
		try {
			for (org.apertereports.common.xml.ws.ReportParameter param : reportData.getReportParameters()) {
				Object object = ReportGeneratorUtils.deserializeObject(param.getValue());
				if (ReportGeneratorUtils.canConvertToInputStreams(object)) {
					object = ReportGeneratorUtils.convertBytesToInputStreams(object);
				}
				reportParameters.put(param.getName(), object);
			}
		} catch (Exception e) {
			throw new AperteReportsException(ErrorCodes.SERIALIZATION_EXCEPTION,  e);
		}
		if (!reportParameters.containsKey(JRXPathQueryExecuterFactory.XML_DATE_PATTERN)) {
			reportParameters.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, ReportConstants.DATETIME_PATTERN);
		}
		if (StringUtils.hasText(reportData.getLocale())) {
			reportParameters.put(JRParameter.REPORT_LOCALE, reportData.getLocale());
		}
		return reportParameters;
	}

	private Map getJasperConfiguration(ReportData reportData) {
		Map configuration = new HashMap();
		if (StringUtils.hasText(reportData.getCharacterEncoding())) {
			configuration.put(ConfigurationConstants.JASPER_REPORTS_CHARACTER_ENCODING, reportData
					.getCharacterEncoding().trim());
		}
		if (StringUtils.hasText(reportData.getDataSource())) {
			configuration.put(Parameter.DATASOURCE.name(), reportData.getDataSource());
		}
		return configuration;
	}

	private Map getExporterParameters(ReportData reportData) throws AperteReportsException {
		Map exporterParameters = new HashMap();
		for (ReportExporterParameter param : reportData.getExporterParameters()) {
			try {
				Object obj = ReportGeneratorUtils.resolveFieldValue(getClass().getClassLoader(), param.getClassName(),
						param.getFieldName());
				exporterParameters.put((JRExporterParameter) obj, param.getValue());
			} catch (Exception e) {
				throw new AperteReportsException(e);
			}
		}
		return exporterParameters;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy