From a06fb7f142dfea50acfdaf64e2fc7b3bfe1298ae Mon Sep 17 00:00:00 2001 From: Alex Ebadirad Date: Tue, 15 May 2012 00:53:04 -0700 Subject: [PATCH] report action UI changes, improvements using new service lookup --- .../autopsy/report/ReportAction.java | 103 +++++++++++++++-- .../autopsy/report/ReportFilter.form | 80 +++++-------- .../autopsy/report/ReportFilter.java | 91 ++++----------- .../sleuthkit/autopsy/report/ReportHTML.java | 11 +- .../autopsy/report/ReportModule.java | 8 ++ .../autopsy/report/ReportPanelAction.java | 1 - .../sleuthkit/autopsy/report/ReportXLS.java | 106 +++++++++--------- .../sleuthkit/autopsy/report/ReportXML.java | 72 ++++++------ .../org/sleuthkit/autopsy/report/layer.xml | 16 ++- 9 files changed, 271 insertions(+), 217 deletions(-) diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportAction.java b/Report/src/org/sleuthkit/autopsy/report/ReportAction.java index b8c40bdadb..848ffb6a92 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportAction.java +++ b/Report/src/org/sleuthkit/autopsy/report/ReportAction.java @@ -20,30 +20,31 @@ */ package org.sleuthkit.autopsy.report; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Toolkit; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; +import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JDialog; -import javax.swing.JFrame; +import javax.swing.*; +import javax.swing.border.Border; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; import org.openide.awt.ActionReferences; import org.openide.awt.ActionRegistration; import org.openide.util.HelpCtx; +import org.openide.util.Lookup; import org.openide.util.NbBundle.Messages; import org.openide.util.actions.CallableSystemAction; import org.openide.util.actions.Presenter; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Log; +import org.sleuthkit.datamodel.BlackboardArtifact; @ActionID(category = "Tools", id = "org.sleuthkit.autopsy.report.ReportAction") @@ -57,6 +58,10 @@ public final class ReportAction extends CallableSystemAction implements Presente private JButton toolbarButton = new JButton(); private static final String ACTION_NAME = "Generate Report"; static final Logger logger = Logger.getLogger(ReportAction.class.getName()); + private JPanel panel; + private ArrayList reportList = new ArrayList(); + private ArrayList configList = new ArrayList(); + public ReportAction() { setEnabled(false); @@ -106,6 +111,33 @@ public final class ReportAction extends CallableSystemAction implements Presente }); } + + private class reportListener implements ItemListener { + + @Override + public void itemStateChanged(ItemEvent e) { + Object source = e.getItem(); + JCheckBox comp = (JCheckBox)source; + String name = comp.getName(); + JRadioButton buttan = null; + Component[] comps = comp.getParent().getComponents(); + for(Component c : comps) + { + if(c.getName().equals(name+"p")) + { + buttan = (JRadioButton)c; + } + } + if(e.getStateChange() == ItemEvent.DESELECTED) + { + buttan.setEnabled(false); + } + if(e.getStateChange() == ItemEvent.SELECTED) + { + buttan.setEnabled(true); + } + } + }; @Override public void actionPerformed(ActionEvent e) { @@ -114,7 +146,7 @@ public final class ReportAction extends CallableSystemAction implements Presente // create the popUp window for it final JFrame frame = new JFrame(ACTION_NAME); final JDialog popUpWindow = new JDialog(frame, ACTION_NAME, true); // to make the popUp Window to be modal - + popUpWindow.setLayout(new GridLayout(0, 1)); // initialize panel with loaded settings final ReportFilter panel = new ReportFilter(); panel.setjButton2ActionListener(new ActionListener() { @@ -124,9 +156,60 @@ public final class ReportAction extends CallableSystemAction implements Presente popUpWindow.dispose(); } }); + final reportListener listener = new reportListener(); + final JPanel filterpanel = new JPanel(new GridLayout(0, 2, 5, 5)); + final JPanel artpanel = new JPanel(new GridLayout(0, 3, 5, 5)); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + + Border border = BorderFactory.createTitledBorder("Reporting Modules"); + filterpanel.setBorder(border); + filterpanel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); + filterpanel.setAlignmentY(Component.TOP_ALIGNMENT); + filterpanel.setAlignmentX(Component.LEFT_ALIGNMENT); + filterpanel.setSize(300, 100); + ButtonGroup previewGroup = new ButtonGroup(); + for (ReportModule m : Lookup.getDefault().lookupAll(ReportModule.class)) { + String name = m.getName(); + String desc = m.getReportTypeDescription(); + JCheckBox ch = new JCheckBox(); + ch.setAlignmentY(Component.TOP_ALIGNMENT); + ch.setText(name); + ch.setName(m.getClass().getName()); + ch.setToolTipText(desc); + ch.setSelected(true); + + JRadioButton cb = new JRadioButton("Preview"); + previewGroup.add(cb); + cb.setName(m.getClass().getName()+"p"); + filterpanel.add(cb, 0); + ch.addItemListener(listener); + filterpanel.add(ch, 0); + } + Border artborder = BorderFactory.createTitledBorder("Report Data"); + artpanel.setBorder(artborder); + artpanel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); + artpanel.setAlignmentY(Component.TOP_ALIGNMENT); + artpanel.setAlignmentX(Component.LEFT_ALIGNMENT); + artpanel.setSize(300, 100); + for (BlackboardArtifact.ARTIFACT_TYPE a : panel.config.config.keySet()) { + JCheckBox ce = new JCheckBox(); + ce.setText(a.getDisplayName()); + ce.setToolTipText(a.getDisplayName()); + ce.setName(a.getLabel()); + ce.setSelected(true); + artpanel.add(ce); + } + + } + }); + popUpWindow.add(filterpanel, 0); + popUpWindow.add(artpanel, 1); // add the panel to the popup window - popUpWindow.add(panel); + popUpWindow.add(panel, 2); + popUpWindow.pack(); popUpWindow.setResizable(false); @@ -145,7 +228,7 @@ public final class ReportAction extends CallableSystemAction implements Presente Log.get(ReportFilterAction.class).log(Level.WARNING, "Error displaying " + ACTION_NAME + " window.", ex); } } - + @Override public void performAction() { } diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportFilter.form b/Report/src/org/sleuthkit/autopsy/report/ReportFilter.form index 696ce472f9..83cfc136ca 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportFilter.form +++ b/Report/src/org/sleuthkit/autopsy/report/ReportFilter.form @@ -1,4 +1,4 @@ - +
@@ -18,7 +18,7 @@ - + @@ -36,53 +36,39 @@ - + - - - - - + + + + + + + + - + + - - - - - - - + + + - + - - - - - - - - - - - - - - @@ -97,6 +83,20 @@ + + + + + + + + + + + + + + @@ -111,23 +111,5 @@ - - - - - - - - - - - - - - - - - - diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportFilter.java b/Report/src/org/sleuthkit/autopsy/report/ReportFilter.java index 6749299855..e3d1b2fe4e 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportFilter.java +++ b/Report/src/org/sleuthkit/autopsy/report/ReportFilter.java @@ -56,8 +56,8 @@ public class ReportFilter extends javax.swing.JPanel { * Creates new form ReportFilter */ public ReportFilter() { + this.setLayout(new GridLayout(0,1)); initComponents(); - createReports(); cancel = false; try{ config.getAllTypes(); @@ -79,16 +79,22 @@ public class ReportFilter extends javax.swing.JPanel { private void initComponents() { jButton2 = new javax.swing.JButton(); - jButton1 = new javax.swing.JButton(); progBar = new javax.swing.JProgressBar(); + jButton1 = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); - filterpanel = new JPanel(new GridLayout(0, 1)); jButton2.setText(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.jButton2.text")); // NOI18N jButton2.setActionCommand(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.jButton2.actionCommand")); // NOI18N jButton2.setLabel(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.jButton2.label")); // NOI18N - setPreferredSize(new java.awt.Dimension(325, 200)); + setPreferredSize(new java.awt.Dimension(325, 75)); + + progBar.setDoubleBuffered(true); + progBar.setEnabled(false); + progBar.setName(""); // NOI18N + progBar.setPreferredSize(new java.awt.Dimension(146, 15)); + progBar.setString(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.progBar.string")); // NOI18N + progBar.setStringPainted(true); jButton1.setText(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.jButton1.text")); // NOI18N jButton1.addMouseListener(new java.awt.event.MouseAdapter() { @@ -102,13 +108,6 @@ public class ReportFilter extends javax.swing.JPanel { } }); - progBar.setDoubleBuffered(true); - progBar.setEnabled(false); - progBar.setName(""); // NOI18N - progBar.setPreferredSize(new java.awt.Dimension(146, 15)); - progBar.setString(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.progBar.string")); // NOI18N - progBar.setStringPainted(true); - cancelButton.setText(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.cancelButton.text")); // NOI18N cancelButton.setActionCommand(org.openide.util.NbBundle.getMessage(ReportFilter.class, "ReportFilter.cancelButton.actionCommand")); // NOI18N cancelButton.setEnabled(false); @@ -118,17 +117,6 @@ public class ReportFilter extends javax.swing.JPanel { } }); - javax.swing.GroupLayout filterpanelLayout = new javax.swing.GroupLayout(filterpanel); - filterpanel.setLayout(filterpanelLayout); - filterpanelLayout.setHorizontalGroup( - filterpanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 306, Short.MAX_VALUE) - ); - filterpanelLayout.setVerticalGroup( - filterpanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 100, Short.MAX_VALUE) - ); - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -136,26 +124,25 @@ public class ReportFilter extends javax.swing.JPanel { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(filterpanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jButton1) .addGroup(layout.createSequentialGroup() - .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, 231, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(cancelButton))) - .addContainerGap()) + .addComponent(jButton1) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(progBar, javax.swing.GroupLayout.DEFAULT_SIZE, 221, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cancelButton) + .addGap(24, 24, 24)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(filterpanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(19, 19, 19) + .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(progBar, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) - .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents @@ -225,36 +212,7 @@ private void jButton1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:e }); } - public void createReports() { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - Border border = BorderFactory.createTitledBorder("Reporting Modules"); - filterpanel.setBorder(border); - for (ReportModule m : Lookup.getDefault().lookupAll(ReportModule.class)) - { - String name = m.getName(); - String desc = m.getReportTypeDescription(); - - JCheckBox ch = new JCheckBox(); - ch.setText(name); - ch.setToolTipText(desc); - ch.setSelected(false); - filterpanel.add(ch); - } - - JCheckBox ch = new JCheckBox(); - ch.setText("133454"); - ch.setToolTipText("235325353"); - ch.setSelected(false); - filterpanel.add(ch); - filterpanel.revalidate(); - filterpanel.repaint(); - } - }); - } - + public void progBarDone() { int max = progBar.getMaximum(); progBar.setValue(max); @@ -299,7 +257,6 @@ private void jButton1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:e // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; - private javax.swing.JPanel filterpanel; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JProgressBar progBar; diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportHTML.java b/Report/src/org/sleuthkit/autopsy/report/ReportHTML.java index 0459148c87..c355d92fdc 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportHTML.java +++ b/Report/src/org/sleuthkit/autopsy/report/ReportHTML.java @@ -54,15 +54,15 @@ public class ReportHTML implements ReportModule{ private static StringBuilder formatted_header = new StringBuilder(); private static String htmlPath = ""; private ReportConfiguration config; - private static ReportRegisterService instance = null; + private static ReportHTML instance = null; ReportHTML(){ } - public static synchronized ReportRegisterService getDefault() { + public static synchronized ReportHTML getDefault() { if (instance == null) { - instance = new ReportRegisterService(); + instance = new ReportHTML(); } return instance; } @@ -475,6 +475,11 @@ public class ReportHTML implements ReportModule{ return desc; } + @Override + public void getPreview(String path) { + BrowserControl.openUrl(path); + } + } \ No newline at end of file diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportModule.java b/Report/src/org/sleuthkit/autopsy/report/ReportModule.java index c6ee6d21fe..a20a7dd810 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportModule.java +++ b/Report/src/org/sleuthkit/autopsy/report/ReportModule.java @@ -68,4 +68,12 @@ public interface ReportModule { * module generates */ public String getReportTypeDescription(); + + + /** + * Calls to the report module to execute a method to display the report that was generated. + *@param String the path to the file + * + */ + public void getPreview(String path); } \ No newline at end of file diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportPanelAction.java b/Report/src/org/sleuthkit/autopsy/report/ReportPanelAction.java index 713ad22f4d..6941b2d17e 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportPanelAction.java +++ b/Report/src/org/sleuthkit/autopsy/report/ReportPanelAction.java @@ -75,7 +75,6 @@ public class ReportPanelAction { ReportHTML htmlReport = new ReportHTML(); try{ String htmlpath = htmlReport.generateReport(reportconfig, rr); - BrowserControl.openUrl(htmlpath); } catch(ReportModuleException e){ Logger.getLogger(ReportHTML.class.getName()).log(Level.WARNING, "Exception occurred in generating the htmlReport", e); diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportXLS.java b/Report/src/org/sleuthkit/autopsy/report/ReportXLS.java index f9b5753632..894a17d68c 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportXLS.java +++ b/Report/src/org/sleuthkit/autopsy/report/ReportXLS.java @@ -20,6 +20,8 @@ */ package org.sleuthkit.autopsy.report; +import java.awt.Desktop; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.File; @@ -35,7 +37,6 @@ import java.util.logging.Logger; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.report.register.ReportRegisterService; import org.sleuthkit.datamodel.*; /** @@ -47,26 +48,26 @@ public class ReportXLS implements ReportModule { public static Workbook wb = new XSSFWorkbook(); private static String xlsPath = ""; private ReportConfiguration config; - private static ReportRegisterService instance = null; + private static ReportXLS instance = null; + public ReportXLS() { //Empty the workbook first - } - - public static synchronized ReportRegisterService getDefault() { + + public static synchronized ReportXLS getDefault() { if (instance == null) { - instance = new ReportRegisterService(); + instance = new ReportXLS(); } return instance; } - + @Override - public String generateReport(ReportConfiguration reportconfig, ReportFilter rr) throws ReportModuleException { - config = reportconfig; - ReportGen reportobj = new ReportGen(); - reportobj.populateReport(reportconfig); - HashMap> report = reportobj.Results; - Workbook wbtemp = new XSSFWorkbook(); + public String generateReport(ReportConfiguration reportconfig, ReportFilter rr) throws ReportModuleException { + config = reportconfig; + ReportGen reportobj = new ReportGen(); + reportobj.populateReport(reportconfig); + HashMap> report = reportobj.Results; + Workbook wbtemp = new XSSFWorkbook(); int countGen = 0; int countBookmark = 0; int countCookie = 0; @@ -132,7 +133,7 @@ public class ReportXLS implements ReportModule { //The first summary report page Sheet sheetSummary = wbtemp.createSheet("Summary"); - + //Generate a sheet per artifact type // Sheet sheetGen = wbtemp.createSheet(BlackboardArtifact.ARTIFACT_TYPE.TSK_GEN_INFO.getDisplayName()); Sheet sheetHash = wbtemp.createSheet(BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName()); @@ -154,7 +155,7 @@ public class ReportXLS implements ReportModule { font.setFontName("Arial"); font.setBoldweight((short) 2); style.setFont(font); - + //create 'default' style CellStyle defaultstyle = wbtemp.createCellStyle(); defaultstyle.setBorderBottom((short) 2); @@ -196,7 +197,7 @@ public class ReportXLS implements ReportModule { sheetHash.getRow(0).createCell(0).setCellValue("Name"); sheetHash.getRow(0).createCell(1).setCellValue("Size"); sheetHash.getRow(0).createCell(2).setCellValue("Hashset Name"); - + sheetDevice.setDefaultColumnStyle(1, defaultstyle); sheetDevice.createRow(0).setRowStyle(style); sheetDevice.getRow(0).createCell(0).setCellValue("Name"); @@ -393,54 +394,59 @@ public class ReportXLS implements ReportModule { //write out the report to the reports folder, set the wbtemp to the primary wb object - wb = wbtemp; - xlsPath = currentCase.getCaseDirectory() + File.separator + "Reports" + File.separator + caseName + "-" + datenotime + ".xlsx"; - this.save(xlsPath); + wb = wbtemp; + xlsPath = currentCase.getCaseDirectory() + File.separator + "Reports" + File.separator + caseName + "-" + datenotime + ".xlsx"; + this.save(xlsPath); } catch (Exception E) { String test = E.toString(); } - return xlsPath; + return xlsPath; } - - @Override - public void save(String path) - { - try{ - FileOutputStream fos = new FileOutputStream(path); - wb.write(fos); - fos.close(); - } - catch(IOException e){ - Logger.getLogger(ReportHTML.class.getName()).log(Level.SEVERE, "Could not write out XLS report!", e); - } - - } - - @Override - public String getName(){ - String name = "Excel"; - return name; - } - - @Override - public String getReportType(){ - String type = "XLS"; - return type; - } - @Override - public ReportConfiguration GetReportConfiguration(){ + public void save(String path) { + try { + FileOutputStream fos = new FileOutputStream(path); + wb.write(fos); + fos.close(); + } catch (IOException e) { + Logger.getLogger(ReportXLS.class.getName()).log(Level.SEVERE, "Could not write out XLS report!", e); + } + + } + + @Override + public String getName() { + String name = "Excel"; + return name; + } + + @Override + public String getReportType() { + String type = "XLS"; + return type; + } + + @Override + public ReportConfiguration GetReportConfiguration() { return config; } - @Override - public String getReportTypeDescription(){ + public String getReportTypeDescription() { String desc = "This is an xls formatted report that is meant to be viewed in Excel."; return desc; } + @Override + public void getPreview(String path) { + File file = new File(path); + try { + Desktop.getDesktop().open(file); + } catch (IOException e) { + Logger.getLogger(ReportXLS.class.getName()).log(Level.SEVERE, "Could not open XLS report! ", e); + } + } } diff --git a/Report/src/org/sleuthkit/autopsy/report/ReportXML.java b/Report/src/org/sleuthkit/autopsy/report/ReportXML.java index 341396d522..73760c1dea 100644 --- a/Report/src/org/sleuthkit/autopsy/report/ReportXML.java +++ b/Report/src/org/sleuthkit/autopsy/report/ReportXML.java @@ -47,22 +47,22 @@ public class ReportXML implements ReportModule { public static Document xmldoc = new Document(); private ReportConfiguration reportconfig; private String xmlPath; - private static ReportRegisterService instance = null; + private static ReportXML instance = null; public ReportXML() { } - - public static synchronized ReportRegisterService getDefault() { + + public static synchronized ReportXML getDefault() { if (instance == null) { - instance = new ReportRegisterService(); + instance = new ReportXML(); } return instance; } @Override - public String generateReport(ReportConfiguration reportconfig, ReportFilter rr) throws ReportModuleException{ - ReportGen reportobj = new ReportGen(); - reportobj.populateReport(reportconfig); + public String generateReport(ReportConfiguration reportconfig, ReportFilter rr) throws ReportModuleException { + ReportGen reportobj = new ReportGen(); + reportobj.populateReport(reportconfig); HashMap> report = reportobj.Results; try { Case currentCase = Case.getCurrentCase(); // get the most updated case @@ -115,13 +115,12 @@ public class ReportXML implements ReportModule { Long objId = entry.getKey().getObjectID(); Content cont = skCase.getContentById(objId); Long filesize = cont.getSize(); - try{ - artifact.setAttribute("ID", objId.toString()); - artifact.setAttribute("Name", cont.accept(new NameVisitor())); - artifact.setAttribute("Size", filesize.toString()); - } - catch(Exception e){ - Logger.getLogger(ReportXML.class.getName()).log(Level.WARNING, "Visitor content exception occurred:", e); + try { + artifact.setAttribute("ID", objId.toString()); + artifact.setAttribute("Name", cont.accept(new NameVisitor())); + artifact.setAttribute("Size", filesize.toString()); + } catch (Exception e) { + Logger.getLogger(ReportXML.class.getName()).log(Level.WARNING, "Visitor content exception occurred:", e); } // Get all the attributes for this guy for (BlackboardAttribute tempatt : entry.getValue()) { @@ -196,11 +195,11 @@ public class ReportXML implements ReportModule { root.addContent(nodeKeyword); root.addContent(nodeHash); root.addContent(nodeDevice); - - + + //Export it the first time - xmlPath = currentCase.getCaseDirectory() + File.separator + "Reports" + File.separator + caseName + "-" + datenotime + ".xml"; - this.save(xmlPath); + xmlPath = currentCase.getCaseDirectory() + File.separator + "Reports" + File.separator + caseName + "-" + datenotime + ".xml"; + this.save(xmlPath); } catch (Exception e) { Logger.getLogger(ReportXML.class.getName()).log(Level.WARNING, "Exception occurred", e); @@ -211,24 +210,24 @@ public class ReportXML implements ReportModule { @Override public void save(String path) { - + try { - - FileOutputStream out = new FileOutputStream(path); - XMLOutputter serializer = new XMLOutputter(); - serializer.output(xmldoc, out); - out.flush(); - out.close(); - } catch (IOException e) { - System.err.println(e); - } - + + FileOutputStream out = new FileOutputStream(path); + XMLOutputter serializer = new XMLOutputter(); + serializer.output(xmldoc, out); + out.flush(); + out.close(); + } catch (IOException e) { + System.err.println(e); + } + } - + @Override - public String getName(){ - String name = "Default XML"; - return name; + public String getName() { + String name = "Default XML"; + return name; } @Override @@ -243,6 +242,11 @@ public class ReportXML implements ReportModule { return config; } + @Override + public void getPreview(String path) { + BrowserControl.openUrl(path); + } + @Override public String getReportTypeDescription() { String desc = "This is an html formatted report that is meant to be viewed in a modern browser."; @@ -265,7 +269,7 @@ public class ReportXML implements ReportModule { public String visit(Image img) { return img.getName(); } - + //@Override public String visit(File file) { return file.getName(); diff --git a/Report/src/org/sleuthkit/autopsy/report/layer.xml b/Report/src/org/sleuthkit/autopsy/report/layer.xml index 2fd0ca927b..9722211874 100644 --- a/Report/src/org/sleuthkit/autopsy/report/layer.xml +++ b/Report/src/org/sleuthkit/autopsy/report/layer.xml @@ -12,9 +12,19 @@ - - - + + + + + + + + + + + + +