19 package org.sleuthkit.autopsy.report;
21 import java.io.BufferedWriter;
22 import java.io.FileNotFoundException;
23 import java.io.FileOutputStream;
24 import java.io.IOException;
25 import java.io.OutputStreamWriter;
26 import java.io.Writer;
27 import java.nio.charset.StandardCharsets;
28 import java.util.ArrayList;
29 import java.util.Iterator;
30 import java.util.List;
31 import java.util.logging.Level;
32 import javax.swing.JPanel;
35 import org.openide.util.NbBundle;
46 class FileReportText
implements FileReportModule {
48 private static final Logger logger = Logger.getLogger(FileReportText.class.getName());
49 private static final String FILE_NAME =
"file-report.txt";
50 private static FileReportText instance;
51 private String reportPath;
53 private ReportFileTextConfigurationPanel configPanel;
56 public static synchronized FileReportText getDefault() {
57 if (instance == null) {
58 instance =
new FileReportText();
64 public void startReport(String baseReportDir) {
65 this.reportPath = baseReportDir + FILE_NAME;
67 out =
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(this.reportPath), StandardCharsets.UTF_8));
69 }
catch (FileNotFoundException ex) {
70 logger.log(Level.WARNING,
"Failed to create report text file", ex);
71 }
catch (IOException ex) {
72 logger.log(Level.WARNING,
"Failed to write BOM to report text file", ex);
77 public void endReport() {
81 Case.getCurrentCaseThrows().addReport(reportPath, NbBundle.getMessage(
this.getClass(),
82 "FileReportText.getName.text"),
"");
83 }
catch (IOException ex) {
84 logger.log(Level.WARNING,
"Could not close output writer when ending report.", ex);
85 }
catch (TskCoreException ex) {
86 String errorMessage = String.format(
"Error adding %s to case as a report", reportPath);
87 logger.log(Level.SEVERE, errorMessage, ex);
88 }
catch (NoCurrentCaseException ex) {
89 logger.log(Level.SEVERE,
"Exception while getting open case.", ex);
94 private String getDelimitedList(List<String> list, String delimiter) {
96 output =
new StringBuilder();
97 Iterator<String> it = list.iterator();
98 while (it.hasNext()) {
99 output.append(
'"').append(it.next()).append(
'"').append((it.hasNext() ? delimiter : System.lineSeparator()));
101 return output.toString();
105 public void startTable(List<FileReportDataTypes> headers) {
106 List<String> titles =
new ArrayList<>();
107 for (FileReportDataTypes col : headers) {
108 titles.add(col.getName());
111 out.write(getDelimitedList(titles, configPanel.getDelimiter()));
112 }
catch (IOException ex) {
113 logger.log(Level.WARNING,
"Error when writing headers to report file: {0}", ex);
118 public void addRow(AbstractFile toAdd, List<FileReportDataTypes> columns) {
119 List<String> cells =
new ArrayList<>();
120 for (FileReportDataTypes type : columns) {
121 cells.add(type.getValue(toAdd));
124 out.write(getDelimitedList(cells, configPanel.getDelimiter()));
125 }
catch (IOException ex) {
126 logger.log(Level.WARNING,
"Error when writing row to report file: {0}", ex);
131 public void endTable() {
133 out.write(System.lineSeparator());
134 }
catch (IOException ex) {
135 logger.log(Level.WARNING,
"Error when closing table: {0}", ex);
140 public String getName() {
141 return NbBundle.getMessage(this.getClass(),
"FileReportText.getName.text");
145 public String getDescription() {
146 return NbBundle.getMessage(this.getClass(),
"FileReportText.getDesc.text");
150 public String getRelativeFilePath() {
155 public JPanel getConfigurationPanel() {
156 if (configPanel == null) {
157 configPanel =
new ReportFileTextConfigurationPanel();