From 98e216b6450ff8e342a3a5c918aeaad0db7ef91e Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Thu, 19 Jul 2012 18:23:56 +1000 Subject: [PATCH] wip - pentaho reports --- .../ReadExtraDataAndReportingServiceImpl.java | 47 ++++++++++++++++++- .../platform/api/ReportsApiResource.java | 14 +++--- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java index 7d09ff043..9227d5851 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java @@ -35,6 +35,9 @@ import org.pentaho.reporting.engine.classic.core.modules.output.pageable.pdf.Pdf import org.pentaho.reporting.engine.classic.core.modules.output.table.csv.CSVReportUtil; import org.pentaho.reporting.engine.classic.core.modules.output.table.html.HtmlReportUtil; import org.pentaho.reporting.engine.classic.core.modules.output.table.xls.ExcelReportUtil; +import org.pentaho.reporting.engine.classic.core.parameters.ParameterDefinitionEntry; +import org.pentaho.reporting.engine.classic.core.parameters.ReportParameterDefinition; +import org.pentaho.reporting.engine.classic.core.util.ReportParameterValues; import org.pentaho.reporting.libraries.resourceloader.Resource; import org.pentaho.reporting.libraries.resourceloader.ResourceException; import org.pentaho.reporting.libraries.resourceloader.ResourceManager; @@ -734,7 +737,9 @@ public class ReadExtraDataAndReportingServiceImpl implements logger.info("outputType: " + outputType); try { res = manager.createDirectly(reportPath, MasterReport.class); - MasterReport masterReport = (MasterReport) res.getResource(); + MasterReport masterReport = (MasterReport) res.getResource(); + + addParametersToReport(masterReport, queryParams); ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -790,4 +795,44 @@ public class ReadExtraDataAndReportingServiceImpl implements } + private void addParametersToReport(MasterReport report, + Map queryParams) { + + try { + ReportParameterValues rptParamValues = report.getParameterValues(); + ReportParameterDefinition paramsDefinition = report + .getParameterDefinition(); + + /* + * only allow integer and string parameter types and assume all + * mandatory - could go more detailed like Pawel did in Mifos later + * and could match incoming and pentaho parameters better... + * currently assuming they come in ok... and if not an error + */ + for (ParameterDefinitionEntry paramDefEntry : paramsDefinition + .getParameterDefinitions()) { + String paramName = paramDefEntry.getName(); + String pValue = queryParams.get(paramName); + if (StringUtils.isBlank(pValue)) + throw new PlatformDataIntegrityException( + "error.msg.reporting.error", "Pentaho Parameter: " + + paramName + " - not Provided"); + + Class clazz = paramDefEntry.getValueType(); + logger.info("addParametersToReport(" + paramName + " : " + + pValue + " : " + clazz.getCanonicalName() + ")"); + + if (clazz.getCanonicalName().equalsIgnoreCase( + "java.lang.Integer")) + rptParamValues.put(paramName, Integer.parseInt(pValue)); + else + rptParamValues.put(paramName, pValue); + } + + } catch (Exception e) { + throw new PlatformDataIntegrityException( + "error.msg.reporting.error", e.getMessage()); + } + } + } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/ReportsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/ReportsApiResource.java index b14738b5b..ed83b5aff 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/ReportsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/ReportsApiResource.java @@ -80,8 +80,6 @@ public class ReportsApiResource { MultivaluedMap queryParams = uriInfo .getQueryParameters(); - Map reportParams = getReportParams(queryParams); - String parameterType = queryParams.getFirst("parameterType"); if ((parameterType == null) || (!(parameterType.equalsIgnoreCase("true")))) { @@ -97,7 +95,7 @@ public class ReportsApiResource { return this.readExtraDataAndReportingService .processPentahoRequest(reportName, queryParams.getFirst("output-type"), - reportParams); + getReportParams(queryParams, true)); } } @@ -106,7 +104,7 @@ public class ReportsApiResource { // JSON GenericResultset result = this.readExtraDataAndReportingService .retrieveGenericResultset(reportName, parameterType, - reportParams); + getReportParams(queryParams, false)); String selectedFields = ""; String json = this.jsonFormattingService.convertRequest(result, @@ -118,7 +116,7 @@ public class ReportsApiResource { // CSV Export StreamingOutput result = this.readExtraDataAndReportingService - .retrieveReportCSV(reportName, parameterType, reportParams); + .retrieveReportCSV(reportName, parameterType, getReportParams(queryParams, false)); return Response .ok() .entity(result) @@ -129,7 +127,7 @@ public class ReportsApiResource { } private Map getReportParams( - MultivaluedMap queryParams) { + MultivaluedMap queryParams, Boolean isPentaho) { Map reportParams = new HashMap(); Set keys = queryParams.keySet(); @@ -138,7 +136,9 @@ public class ReportsApiResource { for (String k : keys) { if (k.startsWith("R_")) { - pKey = "${" + k.substring(2) + "}"; + if (isPentaho) pKey = k.substring(2); + else pKey = "${" + k.substring(2) + "}"; + pValue = queryParams.get(k).get(0); reportParams.put(pKey, pValue); }