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();
});
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);
}
}//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";
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
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.sqlite.util.StringUtils;
/**
*
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");
}
- 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);
return String.format("\"%s\"", bareStr.toString());
}
+ static boolean saveReportHTML(String filepath, String report_title,
+ String[] report_cols, ArrayList<Object> report_data) {
+ FileWriter htmlFile;
+ try {
+ htmlFile = new FileWriter(filepath);
+ htmlFile.append("<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<title>");
+ htmlFile.append(htmlEscape(report_title));
+ htmlFile.append("</title>\n</head>\n");
+ htmlFile.append ("<body>\n");
+ htmlFile.append("<h1>");
+ htmlFile.append(htmlEscape(report_title));
+ htmlFile.append("</h1>\n");
+ htmlFile.append ("<table>\n");
+ htmlFile.append ("\t<tr>\n");
+ for (int i = 0; i < report_cols.length; i ++) {
+ htmlFile.append ("\t\t<th>");
+ htmlFile.append (htmlEscape(report_cols[i]));
+ htmlFile.append("</th>\n");
+ }
+ htmlFile.append ("\t</tr>\n");
+ for (int r = 0; r < report_data.size(); r += report_cols.length) {
+ htmlFile.append("\t<tr>\n");
+ for (int c = 0; c < report_cols.length; c ++) {
+ htmlFile.append("\t\t<td>");
+ htmlFile.append(htmlEscape(report_data.get(r+c)));
+ htmlFile.append("</td>\n");
+ }
+ htmlFile.append ("\t</tr>\n");
+ }
+ htmlFile.append("</table>\n");
+ htmlFile.append("</body>\n");
+ htmlFile.append("</html>");
+ 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", "<br>");
+ return str;
+ }
+ else
+ return barestr.toString();
+ }
+
public Utility () {