From 48b3693944b615b678b4fec0babbc9d86ce231b8 Mon Sep 17 00:00:00 2001 From: kiran Date: Fri, 30 Nov 2012 17:08:20 -0800 Subject: [PATCH] Generate Pdf option for reports --- .../api/ApiParameterHelper.java | 9 ++ .../dataqueries/api/ReportsApiResource.java | 41 ++++++++ .../service/ReadReportingService.java | 3 + .../service/ReadReportingServiceImpl.java | 93 ++++++++++++++++++- 4 files changed, 145 insertions(+), 1 deletion(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/api/ApiParameterHelper.java b/mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/api/ApiParameterHelper.java index e910aba81..e468094f0 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/api/ApiParameterHelper.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/api/ApiParameterHelper.java @@ -63,6 +63,15 @@ public class ApiParameterHelper { return exportCsv; } + + public static boolean exportPdf(final MultivaluedMap queryParams) { + boolean exportPDF = false; + if (queryParams.getFirst("exportPDF") != null) { + String exportPdfValue = queryParams.getFirst("exportPDF"); + exportPDF = "true".equalsIgnoreCase(exportPdfValue); + } + return exportPDF; + } public static boolean parameterType(final MultivaluedMap queryParams) { boolean parameterType = false; if (queryParams.getFirst("parameterType") != null) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/api/ReportsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/api/ReportsApiResource.java index bbb595ca4..2374a33f2 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/api/ReportsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/api/ReportsApiResource.java @@ -1,5 +1,6 @@ package org.mifosplatform.infrastructure.dataqueries.api; +import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -13,6 +14,7 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.StreamingOutput; import javax.ws.rs.core.UriInfo; @@ -50,6 +52,22 @@ public class ReportsApiResource { boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); boolean exportCsv = ApiParameterHelper.exportCsv(uriInfo.getQueryParameters()); + + boolean exportPdf = ApiParameterHelper.exportPdf(uriInfo.getQueryParameters()); + + if(exportPdf) + + { + String result = this.readExtraDataAndReportingService + .retrieveReportPDF(".", ".", extractedQueryParams); + + return Response + .ok() + .entity(result) + .header("Content-Disposition", + "attachment;filename=ReportList.pdf").build(); + + } if (!exportCsv) { GenericResultsetData result = this.readExtraDataAndReportingService.retrieveGenericResultset(".", ".", extractedQueryParams); @@ -75,6 +93,7 @@ public class ReportsApiResource { boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); boolean exportCsv = ApiParameterHelper.exportCsv(uriInfo.getQueryParameters()); boolean parameterType = ApiParameterHelper.parameterType(uriInfo.getQueryParameters()); + boolean exportPdf = ApiParameterHelper.exportPdf(uriInfo.getQueryParameters()); checkUserPermissionForReport(reportName, parameterType); @@ -89,6 +108,28 @@ public class ReportsApiResource { } else { parameterTypeValue = "parameter"; } + + + // PDF format + + if(exportPdf) + { + + Map reportParams = getReportParams(queryParams, false); + String pdfFileName = this.readExtraDataAndReportingService + .retrieveReportPDF(reportName, parameterTypeValue, reportParams); + + File file=new File(pdfFileName); + + ResponseBuilder response=Response.ok(file); + response.header("Content-Disposition", + "attachment; filename=\"" + +pdfFileName+"\""); + response.header("content-Type","application/pdf"); + + return response.build(); + + } if (!exportCsv) { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingService.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingService.java index 4e2335e14..5e703fee8 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingService.java @@ -15,5 +15,8 @@ public interface ReadReportingService { Response processPentahoRequest(String reportName, String outputType, Map queryParams); + String retrieveReportPDF(String name, String type,Map extractedQueryParams); + + String getReportType(String reportName); } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingServiceImpl.java index 262f2d6c2..37a4e3460 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/dataqueries/service/ReadReportingServiceImpl.java @@ -2,6 +2,8 @@ package org.mifosplatform.infrastructure.dataqueries.service; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -18,6 +20,7 @@ import javax.ws.rs.core.StreamingOutput; import org.apache.commons.lang.StringUtils; import org.mifosng.platform.exceptions.PlatformDataIntegrityException; import org.mifosng.platform.exceptions.ReportNotFoundException; +import org.mifosng.platform.infrastructure.FileUtils; import org.mifosplatform.infrastructure.dataqueries.data.GenericResultsetData; import org.mifosplatform.infrastructure.dataqueries.data.ResultsetColumnHeader; import org.mifosplatform.infrastructure.dataqueries.data.ResultsetDataRow; @@ -41,6 +44,11 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.lowagie.text.Document; +import com.lowagie.text.PageSize; +import com.lowagie.text.pdf.PdfPTable; +import com.lowagie.text.pdf.PdfWriter; + @Service public class ReadReportingServiceImpl implements ReadReportingService { @@ -134,6 +142,8 @@ public class ReadReportingServiceImpl implements ReadReportingService { return writer; } + + @Override public GenericResultsetData retrieveGenericResultset(final String name, final String type, final Map queryParams) { @@ -332,4 +342,85 @@ public class ReadReportingServiceImpl implements ReadReportingService { } } -} \ No newline at end of file + @Override +public String retrieveReportPDF(final String reportName,final String type, final Map queryParams) { + + String fileLocation=FileUtils.MIFOSX_BASE_DIR+File.separator+""; + if(!new File(fileLocation).isDirectory()) + { + new File(fileLocation).mkdirs(); + } + + String genaratePdf=fileLocation+File.separator+reportName+".pdf"; + + + try + { + GenericResultsetData result = retrieveGenericResultset( + reportName, type, queryParams); + + + List columnHeaders = result.getColumnHeaders(); + List data = result.getData(); + List row; + + logger.info("NO. of Columns: " + columnHeaders.size()); + Integer chSize = columnHeaders.size(); + + Document document = new Document(PageSize.B0.rotate()); + + PdfWriter.getInstance(document, + new FileOutputStream(new File(fileLocation+reportName+".pdf"))); + document.open(); + + PdfPTable table = new PdfPTable(chSize); + table.setWidthPercentage(100); + + for (int i = 0; i < chSize; i++) { + + table.addCell(columnHeaders.get(i).getColumnName()); + + } + table.completeRow(); + + Integer rSize; + String currColType; + String currVal; + logger.info("NO. of Rows: " + data.size()); + for (int i = 0; i < data.size(); i++) { + row = data.get(i).getRow(); + rSize = row.size(); + for (int j = 0; j < rSize; j++) { + currColType = columnHeaders.get(j).getColumnType(); + currVal = row.get(j); + if (currVal != null) { + if (currColType.equals("DECIMAL") + || currColType.equals("DOUBLE") + || currColType.equals("BIGINT") + || currColType.equals("SMALLINT") + || currColType.equals("INT")) + { + + table.addCell(currVal.toString()); + } + else + { + table.addCell(currVal.toString()); + } + } + } + } + table.completeRow(); + document.add(table); + document.close(); + return genaratePdf; + } + + catch (Exception e) { + throw new PlatformDataIntegrityException( + "error.msg.exception.error", e.getMessage()); + } + + } + } +