From 1e2e20a0dbc54a7395acba80a96bf5b41105af8e Mon Sep 17 00:00:00 2001 From: Harishankar Date: Fri, 3 Apr 2020 14:46:20 +0530 Subject: [PATCH] Reporting Functionality - added HTML export Added HTML export option to the report viewer. --- src/habeas/NoticesReportViewDialog.form | 9 ++++ src/habeas/NoticesReportViewDialog.java | 30 ++++++++++++ src/habeas/Utility.java | 65 +++++++++++++++++++++++-- 3 files changed, 100 insertions(+), 4 deletions(-) diff --git a/src/habeas/NoticesReportViewDialog.form b/src/habeas/NoticesReportViewDialog.form index 2503a57..18268cb 100644 --- a/src/habeas/NoticesReportViewDialog.form +++ b/src/habeas/NoticesReportViewDialog.form @@ -20,6 +20,15 @@ + + + + + + + + + diff --git a/src/habeas/NoticesReportViewDialog.java b/src/habeas/NoticesReportViewDialog.java index 8852409..4563f64 100644 --- a/src/habeas/NoticesReportViewDialog.java +++ b/src/habeas/NoticesReportViewDialog.java @@ -48,6 +48,7 @@ public class NoticesReportViewDialog extends javax.swing.JDialog { popMenu = new javax.swing.JPopupMenu(); menuExportCSV = new javax.swing.JMenuItem(); + menuExportHTML = new javax.swing.JMenuItem(); labelReportTitle = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); tableReport = new javax.swing.JTable(); @@ -66,6 +67,15 @@ public class NoticesReportViewDialog extends javax.swing.JDialog { }); popMenu.add(menuExportCSV); + menuExportHTML.setMnemonic('H'); + menuExportHTML.setText("Export as HTML..."); + menuExportHTML.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + menuExportHTMLActionPerformed(evt); + } + }); + popMenu.add(menuExportHTML); + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("View Report"); setLocationByPlatform(true); @@ -166,6 +176,25 @@ public class NoticesReportViewDialog extends javax.swing.JDialog { } }//GEN-LAST:event_buttonApplyActionPerformed + + private void menuExportHTMLActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuExportHTMLActionPerformed + // TODO add your handling code here: + JFileChooser chooser = new JFileChooser (); + FileNameExtensionFilter flt = new FileNameExtensionFilter("Hypertext Markup File (.html)", "html"); + chooser.setFileFilter(flt); + int rt = chooser.showSaveDialog(this); + if (rt == JFileChooser.APPROVE_OPTION) { + String filepath = chooser.getSelectedFile().getAbsolutePath(); + if (! (filepath.endsWith(".html") || filepath.endsWith(".htm")) ) + filepath = filepath.concat(".html"); + boolean ret= Utility.saveReportHTML (filepath, reportTitle, reportCols, reportData); + if (ret == false) + JOptionPane.showMessageDialog (this, ERROR_SAVING_REPORT); + else + JOptionPane.showMessageDialog(this, REPORT_SAVED_SUCCESSFULLY); + + } + }//GEN-LAST:event_menuExportHTMLActionPerformed private static final String REPORT_SAVED_SUCCESSFULLY = "Report saved successfully"; private static final String ERROR_SAVING_REPORT = "Error saving report"; @@ -218,6 +247,7 @@ public class NoticesReportViewDialog extends javax.swing.JDialog { private javax.swing.JScrollPane jScrollPane2; private javax.swing.JLabel labelReportTitle; private javax.swing.JMenuItem menuExportCSV; + private javax.swing.JMenuItem menuExportHTML; private javax.swing.JPopupMenu popMenu; private javax.swing.JTable tableReport; // End of variables declaration//GEN-END:variables diff --git a/src/habeas/Utility.java b/src/habeas/Utility.java index 8602583..192b113 100644 --- a/src/habeas/Utility.java +++ b/src/habeas/Utility.java @@ -17,6 +17,7 @@ import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.logging.Level; import java.util.logging.Logger; +import org.sqlite.util.StringUtils; /** * @@ -592,13 +593,13 @@ public class Utility { try { FileWriter f = new FileWriter (filePath); for (int i = 0; i < reportCols.length; i ++) { - f.append (escapeQuote(reportCols[i])); + f.append (escapeQuoteCSV(reportCols[i])); f.append (","); } f.append("\n"); for (int i = 0; i < reportData.size(); i += reportCols.length) { for (int j = 0; j < reportCols.length; j ++) { - f.append (escapeQuote(reportData.get(i+j))); + f.append (escapeQuoteCSV(reportData.get(i+j))); f.append (","); } f.append ("\n"); @@ -613,8 +614,10 @@ public class Utility { } - private static String escapeQuote(Object bareStr) { - if (bareStr.getClass() == String.class) { + private static String escapeQuoteCSV(Object bareStr) { + if (bareStr == null) + return ""; + else if (bareStr.getClass() == String.class) { String str = (String)bareStr; String escapedStr = str.replace ("\"", "\"\""); System.out.println(escapedStr); @@ -625,6 +628,60 @@ public class Utility { return String.format("\"%s\"", bareStr.toString()); } + static boolean saveReportHTML(String filepath, String report_title, + String[] report_cols, ArrayList report_data) { + FileWriter htmlFile; + try { + htmlFile = new FileWriter(filepath); + htmlFile.append("\n\n\n"); + htmlFile.append(htmlEscape(report_title)); + htmlFile.append("\n\n"); + htmlFile.append ("\n"); + htmlFile.append("

"); + htmlFile.append(htmlEscape(report_title)); + htmlFile.append("

\n"); + htmlFile.append ("\n"); + htmlFile.append ("\t\n"); + for (int i = 0; i < report_cols.length; i ++) { + htmlFile.append ("\t\t\n"); + } + htmlFile.append ("\t\n"); + for (int r = 0; r < report_data.size(); r += report_cols.length) { + htmlFile.append("\t\n"); + for (int c = 0; c < report_cols.length; c ++) { + htmlFile.append("\t\t\n"); + } + htmlFile.append ("\t\n"); + } + htmlFile.append("
"); + htmlFile.append (htmlEscape(report_cols[i])); + htmlFile.append("
"); + htmlFile.append(htmlEscape(report_data.get(r+c))); + htmlFile.append("
\n"); + htmlFile.append("\n"); + htmlFile.append(""); + htmlFile.flush(); + htmlFile.close(); + return true; + } catch (IOException ex) { + Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex); + return false; + } + } + + private static String htmlEscape(Object barestr) { + if (barestr == null) + return ""; + else if (barestr.getClass() == String.class) { + String barestrs = (String)barestr; + String str = barestrs.replace("&", "&").replace("<", "<"). + replace(">", ">").replace("\"", """).replace("\n", "
"); + return str; + } + else + return barestr.toString(); + } + public Utility () { -- 2.20.1