use of net.sf.jasperreports.engine.JRException in project adempiere by adempiere.
the class ReportStarter method startProcess.
/**
* Start the process.
* Called then pressing the Process button in R_Request.
* It should only return false, if the function could not be performed
* as this causes the process to abort.
* @author rlemeill
* @param ctx context
* @param pi standard process info
* @param trx
* @return true if success
*/
public boolean startProcess(Properties ctx, ProcessInfo pi, Trx trx) {
processInfo = pi;
String Name = pi.getTitle();
int AD_PInstance_ID = pi.getAD_PInstance_ID();
int Record_ID = pi.getRecord_ID();
log.info("Name=" + Name + " AD_PInstance_ID=" + AD_PInstance_ID + " Record_ID=" + Record_ID);
String trxName = null;
if (trx != null) {
trxName = trx.getTrxName();
}
ReportData reportData = getReportData(pi, trxName);
if (reportData == null) {
reportResult(AD_PInstance_ID, "Can not find report data", trxName);
return false;
}
String reportPath = reportData.getReportFilePath();
if (Util.isEmpty(reportPath, true)) {
reportResult(AD_PInstance_ID, "Can not find report", trxName);
return false;
}
JasperData data = null;
File reportFile = null;
String fileExtension = "";
HashMap<String, Object> params = new HashMap<String, Object>();
addProcessParameters(AD_PInstance_ID, params, trxName);
addProcessInfoParameters(params, pi.getParameter());
reportFile = getReportFile(reportPath, (String) params.get("ReportType"));
if (reportFile == null || reportFile.exists() == false) {
log.severe("No report file found for given type, falling back to " + reportPath);
reportFile = getReportFile(reportPath);
}
if (reportFile == null || reportFile.exists() == false) {
String tmp = "Can not find report file at path - " + reportPath;
log.severe(tmp);
reportResult(AD_PInstance_ID, tmp, trxName);
}
if (reportFile != null) {
data = processReport(reportFile);
if (data.getJasperReport() == null) {
log.severe("Could not load Jasper Report " + reportPath);
return false;
}
fileExtension = reportFile.getName().substring(reportFile.getName().lastIndexOf("."), reportFile.getName().length());
} else {
return false;
}
JasperReport jasperReport = data.getJasperReport();
String jasperName = data.getJasperName();
String name = jasperReport.getName();
File reportDir = data.getReportDir();
// Add reportDir to class path
ClassLoader scl = ClassLoader.getSystemClassLoader();
try {
java.net.URLClassLoader ucl = new java.net.URLClassLoader(new java.net.URL[] { reportDir.toURI().toURL() }, scl);
net.sf.jasperreports.engine.util.JRResourcesUtil.setThreadClassLoader(ucl);
} catch (MalformedURLException me) {
log.warning("Could not add report directory to classpath: " + me.getMessage());
}
if (jasperReport != null) {
File[] subreports;
// Subreports
if (reportPath.startsWith("http://") || reportPath.startsWith("https://")) {
// Locate and download subreports from remote webcontext
subreports = getHttpSubreports(jasperName + "Subreport", reportPath, fileExtension);
} else if (reportPath.startsWith("attachment:")) {
subreports = getAttachmentSubreports(reportPath);
} else if (reportPath.startsWith("resource:")) {
subreports = getResourceSubreports(name + "Subreport", reportPath, fileExtension);
} else // TODO: Implement file:/ lookup for subreports
{
// Locate subreports from local/remote filesystem
subreports = reportDir.listFiles(new FileFilter(jasperName + "Subreport", reportDir, fileExtension));
}
for (int i = 0; i < subreports.length; i++) {
// @Trifon - begin
if (subreports[i].getName().toLowerCase().endsWith(".jasper") || subreports[i].getName().toLowerCase().endsWith(".jrxml")) {
JasperData subData = processReport(subreports[i]);
if (subData.getJasperReport() != null) {
params.put(subData.getJasperName(), subData.getJasperFile().getAbsolutePath());
}
}
// @Trifon - end
}
if (Record_ID > 0)
params.put("RECORD_ID", new Integer(Record_ID));
// contribution from Ricardo (ralexsander)
// in iReports you can 'SELECT' AD_Client_ID, AD_Org_ID and AD_User_ID using only AD_PINSTANCE_ID
params.put("AD_PINSTANCE_ID", new Integer(AD_PInstance_ID));
// FR [3123850] - Add continiuosly needed parameters to Jasper Starter - Carlos Ruiz - GlobalQSS
params.put("AD_CLIENT_ID", new Integer(Env.getAD_Client_ID(Env.getCtx())));
params.put("AD_ROLE_ID", new Integer(Env.getAD_Role_ID(Env.getCtx())));
params.put("AD_USER_ID", new Integer(Env.getAD_User_ID(Env.getCtx())));
Language currLang = Env.getLanguage(Env.getCtx());
String printerName = null;
MPrintFormat printFormat = null;
PrintInfo printInfo = null;
ProcessInfoParameter[] pip = pi.getParameter();
// Get print format and print info parameters
if (pip != null) {
for (int i = 0; i < pip.length; i++) {
if (ServerReportCtl.PARAM_PRINT_FORMAT.equalsIgnoreCase(pip[i].getParameterName())) {
printFormat = (MPrintFormat) pip[i].getParameter();
}
if (ServerReportCtl.PARAM_PRINT_INFO.equalsIgnoreCase(pip[i].getParameterName())) {
printInfo = (PrintInfo) pip[i].getParameter();
}
if (ServerReportCtl.PARAM_PRINTER_NAME.equalsIgnoreCase(pip[i].getParameterName())) {
printerName = (String) pip[i].getParameter();
}
}
}
if (printFormat != null) {
if (printInfo != null) {
// Set the language of the print format if we're printing a document
if (printInfo.isDocument()) {
currLang = printFormat.getLanguage();
}
}
// Set printer name unless already set.
if (printerName == null) {
printerName = printFormat.getPrinterName();
}
}
params.put("CURRENT_LANG", currLang.getAD_Language());
params.put(JRParameter.REPORT_LOCALE, currLang.getLocale());
// Resources
File resFile = null;
if (reportPath.startsWith("attachment:") && attachment != null) {
resFile = getAttachmentResourceFile(jasperName, currLang);
} else if (reportPath.startsWith("resource:")) {
resFile = getResourcesForResourceFile(jasperName, currLang);
// TODO: Implement file:/ for resources
} else {
resFile = new File(jasperName + "_" + currLang.getLocale().getLanguage() + ".properties");
if (!resFile.exists()) {
resFile = null;
}
if (resFile == null) {
resFile = new File(jasperName + ".properties");
if (!resFile.exists()) {
resFile = null;
}
}
}
if (resFile != null) {
try {
PropertyResourceBundle res = new PropertyResourceBundle(new FileInputStream(resFile));
params.put("RESOURCE", res);
} catch (IOException e) {
;
}
}
Connection conn = null;
try {
conn = trx != null ? trx.getConnection() : getConnection();
jasperPrint = JasperFillManager.fillReport(jasperReport, params, conn);
if (reportData.isDirectPrint() && !processInfo.isPrintPreview()) {
log.info("ReportStarter.startProcess print report -" + jasperPrint.getName());
//RF 1906632
if (!processInfo.isBatch()) {
// Get printer job
PrinterJob printerJob = org.compiere.print.CPrinter.getPrinterJob(printerName);
// Set print request attributes
// Paper Attributes:
PrintRequestAttributeSet prats = new HashPrintRequestAttributeSet();
// add: copies, job-name, priority
if (// @Trifon
printInfo == null || printInfo.isDocumentCopy() || printInfo.getCopies() < 1)
prats.add(new Copies(1));
else
prats.add(new Copies(printInfo.getCopies()));
Locale locale = Language.getLoginLanguage().getLocale();
// @Trifon
String printFormat_name = printFormat == null ? "" : printFormat.getName();
int numCopies = printInfo == null ? 0 : printInfo.getCopies();
prats.add(new JobName(printFormat_name + "_" + pi.getRecord_ID(), locale));
prats.add(PrintUtil.getJobPriority(jasperPrint.getPages().size(), numCopies, true));
// Create print service exporter
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
;
// Set parameters
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, printerJob.getPrintService());
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printerJob.getPrintService().getAttributes());
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, prats);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);
// Print report / document
exporter.exportReport();
} else {
// Used For the PH
try {
File PDF = File.createTempFile("mail", ".pdf");
JasperExportManager.exportReportToPdfFile(jasperPrint, PDF.getAbsolutePath());
processInfo.setPDFReport(PDF);
} catch (IOException e) {
log.severe("ReportStarter.startProcess: Can not make PDF File - " + e.getMessage());
}
}
// You can use JasperPrint to create PDF
// JasperExportManager.exportReportToPdfFile(jasperPrint, "BasicReport.pdf");
} else {
log.info("ReportStarter.startProcess run report -" + jasperPrint.getName());
JRViewerProvider viewerLauncher = getReportViewerProvider();
//viewerLauncher.openViewer(jasperPrint, pi.getTitle()+" - " + reportPath);
viewerLauncher.openViewer(jasperPrint, pi.getTitle() + "_" + pi.getRecord_ID() + ".pdf");
}
} catch (JRException e) {
log.severe("ReportStarter.startProcess: Can not run report - " + e.getMessage());
} finally {
if (conn != null && trx == null)
try {
conn.close();
} catch (SQLException e) {
throw new AdempiereException("@Error@ " + e);
}
}
}
reportResult(AD_PInstance_ID, null, trxName);
return true;
}
use of net.sf.jasperreports.engine.JRException in project adempiere by adempiere.
the class ReportInfo method compileReport.
/**
* Compile xml file to jasper File
*/
private JasperReport compileReport(File reportFile, File jasperFile) {
JasperReport res = null;
try {
String compiere_home = (String) System.getProperty("COMPIERE_HOME");
// compiere_home = "C:/compiere/acompiere2/";
//log.info( "compiere_home = "+compiere_home);
System.setProperty("jasper.reports.compile.class.path", compiere_home + "/lib/reporttools.jar;" + compiere_home + "/lib/Compiere.jar");
JasperCompileManager.compileReportToFile(reportFile.getAbsolutePath(), jasperFile.getAbsolutePath());
jasperFile.setLastModified(reportFile.lastModified());
res = (JasperReport) JRLoader.loadObject(jasperFile.getAbsolutePath());
} catch (JRException e) {
log.info("ReportInfo.compileReport- " + e);
this.errorMsg.add("ReportInfo.compileReport- " + e.getMessage());
this.hasError = true;
}
return res;
}
use of net.sf.jasperreports.engine.JRException in project adempiere by adempiere.
the class JRQueryExecuter method getStatement.
/**
*
*/
private PreparedStatement getStatement(Connection conn) throws JRException {
PreparedStatement pstmt = null;
if (queryString != null && queryString.trim().length() > 0) {
try {
pstmt = conn.prepareStatement(queryString);
if (parameterNames != null && parameterNames.size() > 0) {
JRParameter parameter = null;
String parameterName = null;
Class clazz = null;
Object parameterValue = null;
for (int i = 0; i < parameterNames.size(); i++) {
parameterName = (String) parameterNames.get(i);
parameter = (JRParameter) parametersMap.get(parameterName);
clazz = parameter.getValueClass();
//FIXMEparameterValue = jrParameter.getValue();
parameterValue = parameterValues.get(parameterName);
if (clazz.equals(java.lang.Object.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.JAVA_OBJECT);
} else {
pstmt.setObject(i + 1, parameterValue);
}
} else if (clazz.equals(java.lang.Boolean.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.BIT);
} else {
pstmt.setBoolean(i + 1, ((Boolean) parameterValue).booleanValue());
}
} else if (clazz.equals(java.lang.Byte.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.TINYINT);
} else {
pstmt.setByte(i + 1, ((Byte) parameterValue).byteValue());
}
} else if (clazz.equals(java.lang.Double.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.DOUBLE);
} else {
pstmt.setDouble(i + 1, ((Double) parameterValue).doubleValue());
}
} else if (clazz.equals(java.lang.Float.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.FLOAT);
} else {
pstmt.setFloat(i + 1, ((Float) parameterValue).floatValue());
}
} else if (clazz.equals(java.lang.Integer.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.INTEGER);
} else {
pstmt.setInt(i + 1, ((Integer) parameterValue).intValue());
}
} else if (clazz.equals(java.lang.Long.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.BIGINT);
} else {
pstmt.setLong(i + 1, ((Long) parameterValue).longValue());
}
} else if (clazz.equals(java.lang.Short.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.SMALLINT);
} else {
pstmt.setShort(i + 1, ((Short) parameterValue).shortValue());
}
} else if (clazz.equals(java.math.BigDecimal.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.DECIMAL);
} else {
pstmt.setBigDecimal(i + 1, (BigDecimal) parameterValue);
}
} else if (clazz.equals(java.lang.String.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.VARCHAR);
} else {
pstmt.setString(i + 1, parameterValue.toString());
}
} else if (clazz.equals(java.util.Date.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.DATE);
} else {
pstmt.setDate(i + 1, new java.sql.Date(((java.util.Date) parameterValue).getTime()));
}
} else if (clazz.equals(java.sql.Timestamp.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.TIMESTAMP);
} else {
pstmt.setTimestamp(i + 1, (java.sql.Timestamp) parameterValue);
}
} else if (clazz.equals(java.sql.Time.class)) {
if (parameterValue == null) {
pstmt.setNull(i + 1, Types.TIME);
} else {
pstmt.setTime(i + 1, (java.sql.Time) parameterValue);
}
} else {
throw new JRException("Parameter type not supported in query : " + parameterName + " class " + clazz.getName());
}
}
}
} catch (SQLException e) {
throw new JRException("Error preparing statement for executing the report query : " + "\n\n" + queryString + "\n\n", e);
}
}
return pstmt;
}
use of net.sf.jasperreports.engine.JRException in project adempiere by adempiere.
the class ReportProcessor method runReport.
// ReportServer
public JasperPrint runReport() {
System.setProperty("jasper.reports.compile.keep.java.file", "true");
ReportPool rp = new ReportPool();
ReportInfo reportInfo = rp.getReport(m_AD_Process_ID);
rp = null;
if (!reportInfo.hasError() && reportInfo.getJasperReport() != null) {
// add parameter
m_Param.putAll(reportInfo.getSubReport());
addProcessParameters(m_AD_PInstance_ID, m_Param);
m_Param.put("RECORD_ID", new Integer(m_Record_ID));
// Marco LOMBARDO: REPORT_HOME used to express subreports path.
//System.getProperty("REPORT_HOME"));
m_Param.put("REPORT_HOME", REPORT_PATH__fix);
// End Marco LOMBARDO.
Language currLang = Env.getLanguage(Env.getCtx());
m_Param.put("CURRENT_LANG", currLang.getAD_Language());
java.sql.Connection conn = DB.getConnectionRO();
//DB_CONN
m_Param.put("REPORT_CONNECTION", conn);
m_Param.put("DB_CONN", conn);
System.out.println("REPORT_CONNECTION = " + conn.toString());
log.saveError("REPORT_CONNECTION = " + conn.toString(), "");
// fill report
try {
compiereDataSource ds = CompiereDataSourceFactory.createDataSource(m_ctx, reportInfo, m_pi, m_Param);
//compiereDataSource ds = new compiereDataSource (m_ctx, reportInfo.getJasperReport());
m_jasperPrint = JasperFillManager.fillReport(reportInfo.getJasperReport(), m_Param, ds);
ds.close();
log.finest("ReportProcessor.fillReport");
} catch (JRException e) {
m_jasperPrint = null;
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} else
System.out.println("Error:" + reportInfo.getErrorMsg());
return m_jasperPrint;
}
use of net.sf.jasperreports.engine.JRException in project sic by belluccifranco.
the class ProductoServiceImpl method getReporteListaDePreciosPorEmpresa.
@Override
public byte[] getReporteListaDePreciosPorEmpresa(List<Producto> productos, long idEmpresa) {
ClassLoader classLoader = FacturaServiceImpl.class.getClassLoader();
InputStream isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/ListaPreciosProductos.jasper");
Map params = new HashMap();
params.put("empresa", empresaService.getEmpresaPorId(idEmpresa));
params.put("logo", Utilidades.convertirByteArrayIntoImage(empresaService.getEmpresaPorId(idEmpresa).getLogo()));
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(productos);
try {
return JasperExportManager.exportReportToPdf(JasperFillManager.fillReport(isFileReport, params, ds));
} catch (JRException ex) {
throw new ServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_error_reporte"), ex);
}
}
Aggregations