From a047d537ab95c13dcde6343bf8b5bfe1cb446d60 Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Mon, 25 Jun 2012 10:26:50 +1000 Subject: [PATCH] add pentaho reporting (but disabled at the moment) --- .../ReadExtraDataAndReportingServiceImpl.java | 35 ++-- .../PlatformDataIntegrityExceptionMapper.java | 3 +- .../ApiJSONFormattingServiceImpl.java | 23 +-- .../PentahoReportingController.java | 167 ------------------ 4 files changed, 36 insertions(+), 192 deletions(-) delete mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/PentahoReportingController.java 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 46cc3bd1f..b8ee003cb 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java @@ -19,6 +19,7 @@ import javax.sql.DataSource; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; +import org.apache.commons.lang.StringUtils; import org.mifosng.platform.api.data.AdditionalFieldsSet; import org.mifosng.platform.api.data.GenericResultset; import org.mifosng.platform.api.data.ResultsetColumnHeader; @@ -50,13 +51,14 @@ public class ReadExtraDataAndReportingServiceImpl implements private final DataSource dataSource; private final String reportingMetaDataDB; + private Boolean noPentaho = false; @Autowired public ReadExtraDataAndReportingServiceImpl(final DataSource dataSource) { - //kick off pentaho reports server - ClassicEngineBoot.getInstance().start(); - - + // kick off pentaho reports server + // ClassicEngineBoot.getInstance().start(); + noPentaho = true; + try { this.dataSource = dataSource; Connection db_connection = dataSource.getConnection(); @@ -714,15 +716,28 @@ public class ReadExtraDataAndReportingServiceImpl implements e.getMessage(), "Error closing database connection"); } } - @Override - public Response processPentahoRequest(String reportName, - String outputType, Map queryParams) { + public Response processPentahoRequest(String reportName, String outputTypeParam, + Map queryParams) { + + String outputType = "HTML"; + if (StringUtils.isNotBlank(outputTypeParam)) outputType = outputTypeParam; + + if (!(outputType.equalsIgnoreCase("HTML") || outputType.equalsIgnoreCase("PDF") || outputType.equalsIgnoreCase("XLS") || outputType.equalsIgnoreCase("CSV"))) + throw new PlatformDataIntegrityException( + "error.msg.invalid.outputType", "No matching Output Type: " + + outputType); + + if (noPentaho) + throw new PlatformDataIntegrityException("error.msg.no.pentaho", + "Pentaho is not enabled", "Pentaho is not enabled"); + + //TODO - use pentaho location finder like Pawel does in Mifos String reportPath = "C:\\dev\\apache-tomcat-7.0.25\\webapps\\ROOT\\PentahoReports\\" + reportName + ".prpt"; // String reportPath = - // "/var/lib/tomcat6/webapps/ROOT/PentahoReports/" + // "/var/lib/tomcat7/webapps/ROOT/PentahoReports/" // + reportName + ".prpt"; logger.info("Report path: " + reportPath); @@ -770,7 +785,7 @@ public class ReadExtraDataAndReportingServiceImpl implements if ("HTML".equalsIgnoreCase(outputType)) { HtmlReportUtil.createStreamHTML(masterReport, baos); - return Response.ok().entity(baos.toByteArray()).build(); + return Response.ok().entity(baos.toByteArray()).type("text/html").build(); } } catch (ResourceException e) { throw new PlatformDataIntegrityException( @@ -788,5 +803,5 @@ public class ReadExtraDataAndReportingServiceImpl implements + outputType); } - + } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/PlatformDataIntegrityExceptionMapper.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/PlatformDataIntegrityExceptionMapper.java index 890a9a628..f4e6ba554 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/PlatformDataIntegrityExceptionMapper.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/errorhandling/PlatformDataIntegrityExceptionMapper.java @@ -1,5 +1,6 @@ package org.mifosng.platform.api.errorhandling; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.ext.ExceptionMapper; @@ -26,6 +27,6 @@ public class PlatformDataIntegrityExceptionMapper implements ExceptionMapper fullAssociationsSet = createSetFromString(associationFields); Set paramAssociationsSet = createSetFromString(param); @@ -130,15 +125,15 @@ public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { String selectedAssociationFields = createIncludedInStringList( paramAssociationsSet, fullAssociationsSet); - //logger.info("is Include - selected fields are :" - // + selectedAssociationFields); + // logger.info("is Include - selected fields are :" + // + selectedAssociationFields); return fieldList + "," + selectedAssociationFields; } String unSelectedAssociationFields = createNotIncludedInStringList( fullAssociationsSet, paramAssociationsSet); - //logger.info("is Exclude - unselected fields are :" - // + unSelectedAssociationFields); + // logger.info("is Exclude - unselected fields are :" + // + unSelectedAssociationFields); if (fieldList.equals("")) { return unSelectedAssociationFields; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/PentahoReportingController.java b/mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/PentahoReportingController.java deleted file mode 100644 index f68e6e560..000000000 --- a/mifosng-provider/src/main/java/org/mifosng/platform/infrastructure/PentahoReportingController.java +++ /dev/null @@ -1,167 +0,0 @@ -package org.mifosng.platform.infrastructure; - -import java.io.IOException; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; - -//@Controller -public class PentahoReportingController //implements ServletContextAware -{ - - // private int reportNum = 0; // used for building HTML reports - // private ServletContext myServletContext; - - //private final static Logger logger = LoggerFactory.getLogger(PentahoReportingController.class); - - public PentahoReportingController() { - -// JPW commented out for now ClassicEngineBoot.getInstance().start(); - } - - @RequestMapping(value = "/pentahoreport", method = RequestMethod.GET) - public void handlePentahoReport(final HttpServletRequest request, - HttpServletResponse response) throws IOException { -/* JPW commented out for now - try { - // load report definition - ResourceManager manager = new ResourceManager(); - manager.registerDefaults(); - - // various ways of pointing to the report directory - hardcoded here - // for testing so if you put the test.prpt in a directory - // c:\dev\PentahoTestReports it should find it - - // String reportPath = "file:" + - // this.getServletContext().getRealPath(request.getParameter("pentahoReportName")); - // String reportPath = "file:" + request.getServletPath(); - // String reportPath = - // "http://ec2-46-137-17-252.eu-west-1.compute.amazonaws.com:8080/PentahoReports/" - // + request.getParameter("pentahoReportName") + ".prpt"; - // String reportPath = "file:///C:/dev/mifosbiGithub/bi/reports/standardReports/prpts/" + request.getParameter("pentahoReportName") + ".prpt"; - - String reportPath = "file:///C:/dev/PentahoTestReports/" - + request.getParameter("pentahoReportName") + ".prpt"; - - logger.info("pentahoReportName: " - + request.getParameter("pentahoReportName")); - logger.info("Report path: " + reportPath); - - Resource res = manager.createDirectly(new URL(reportPath), - MasterReport.class); - MasterReport report = (MasterReport) res.getResource(); - ReportParameterValues rptParamValues = report.getParameterValues(); - - String name; - String value; - @SuppressWarnings("unchecked") - Enumeration parms = request.getParameterNames(); - while (parms.hasMoreElements()) { - // Get the name of the request parameter - name = (String) parms.nextElement(); - logger.info("parm name: " + name); - - if (!((name.equals("pentahoReportName")) || (name - .equals("output-type")))) { - // Get the value of the request parameter - value = request.getParameter(name); - rptParamValues.put(name, value); - logger.info("parm name: " + name + " parm value: " - + value); - } - - } - - String outputType = request.getParameter("output-type"); - - if ("PDF".equals(outputType)) { - response.setContentType("application/pdf"); - PdfReportUtil.createPDF(report, response.getOutputStream()); - } else if ("XLS".equals(outputType)) { - response.setContentType("application/vnd.ms-excel"); - try { - ExcelReportUtil.createXLS(report, - response.getOutputStream()); - } catch (ReportProcessingException e) { - e.printStackTrace(); - } - } else if ("HTML".equals(outputType)) { - String reportLoc = "report_" + reportNum++; - - logger.info("request context path: " + request.getContextPath()); - logger.info("request.getServletPath(): " - + request.getServletPath()); - - logger.info("hopoe: " - + myServletContext.getRealPath(request.getContextPath())); - String path = myServletContext - .getRealPath("../ROOT/PentahoHTMLReports/" + reportLoc); - logger.info("The path is: " + path); - - File folder = new File(path); - folder.mkdir(); - try { - HtmlReportUtil.createDirectoryHTML(report, path - + File.separator + "index.html"); - } catch (ReportProcessingException e) { - e.printStackTrace(); - } - - String redirectLink = "/PentahoHTMLReports/" + reportLoc - + "/index.html"; - logger.info(redirectLink); - response.sendRedirect(redirectLink); - } else { - response.setContentType("application/rtf"); - try { - RTFReportUtil.createRTF(report, response.getOutputStream()); - } catch (ReportProcessingException e) { - e.printStackTrace(); - } - } - } catch (ResourceException e) { - e.printStackTrace(); - }*/ - } - - /* jpw comment out - @Override - public void setServletContext(ServletContext servletContext) { - myServletContext = servletContext; - String pentahoHTMLFolderName = myServletContext - .getRealPath("../ROOT/PentahoHTMLReports"); - - if (pentahoHTMLFolderName == null) { - logger.info("pentaho HTML directory doesn't exist for non-Tomcat use"); - } else { - File pentahoHTMLFolder = new File(pentahoHTMLFolderName); - if (!(deleteDir(pentahoHTMLFolder))) - logger.info("Failed to delete folder: " - + pentahoHTMLFolder.getName()); - } - - }*/ - - // Deletes all files and subdirectories under dir. - // Returns true if all deletions were successful. - // If a deletion fails, the method stops attempting to delete and returns - // false. -// private static boolean deleteDir(File dir) { -// if (dir.isDirectory()) { -// String[] children = dir.list(); -// for (int i = 0; i < children.length; i++) { -// boolean success = deleteDir(new File(dir, children[i])); -// if (!success) { -// return false; -// } -// } -// } -// -// // The directory is now empty so delete it -// return dir.delete(); -// } - -} \ No newline at end of file