19package org.sleuthkit.autopsy.report.modules.datasourcesummaryexport;
22import java.io.IOException;
23import java.nio.file.Paths;
24import java.text.DateFormat;
25import java.text.SimpleDateFormat;
26import java.util.ArrayList;
29import java.util.logging.Level;
30import org.openide.util.NbBundle;
31import org.openide.util.NbBundle.Messages;
32import org.sleuthkit.autopsy.casemodule.Case;
33import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
34import org.sleuthkit.autopsy.coreutils.FileUtil;
35import org.sleuthkit.autopsy.coreutils.Logger;
36import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataFetcher;
37import org.sleuthkit.autopsy.report.ReportProgressPanel;
38import org.sleuthkit.autopsy.report.modules.datasourcesummaryexport.ExcelExport.ExcelExportException;
39import org.sleuthkit.autopsy.report.modules.datasourcesummaryexport.ExcelExport.ExcelSheetExport;
40import org.sleuthkit.datamodel.DataSource;
41import org.sleuthkit.datamodel.TskCoreException;
47 "ExcelExportAction_moduleName=Data Source Summary",})
48class ExcelExportAction {
69 "ExcelExportAction_getXLSXPath_directory=DataSourceSummary",})
70 File getXLSXPath(String dataSourceName, String baseReportDir) {
73 DateFormat dateFormat =
new SimpleDateFormat(
"MM-dd-yyyy-HH-mm-ss");
74 String fileName = String.format(
"%s-%s.xlsx", dataSourceName ==
null ?
"" :
FileUtil.
escapeFileName(dataSourceName), dateFormat.format(
new Date()));
75 File reportsDirFile = Paths.get(baseReportDir, Bundle.ExcelExportAction_getXLSXPath_directory()).toFile();
76 if (!reportsDirFile.exists()) {
77 reportsDirFile.mkdirs();
80 return Paths.get(reportsDirFile.getAbsolutePath(), fileName).toFile();
95 "ExcelExportAction_exportToXLSX_beginExport=Beginning Export...",
96 "ExcelExportAction_exportToXLSX_gatheringRecentActivityData=Fetching Recent Activity Data",
97 "ExcelExportAction_exportToXLSX_gatheringContainerData=Fetching Container & Image Data",
98 "ExcelExportAction_exportToXLSX_gatheringTimelineData=Fetching Timeline Data",
99 "ExcelExportAction_exportToXLSX_gatheringFileData=Fetching File and MIME Type Data",
100 "ExcelExportAction_exportToXLSX_gatheringAnalysisData=Fetching Analysis Data",
101 "ExcelExportAction_exportToXLSX_gatheringPastData=Fetching Historical Data",
102 "ExcelExportAction_exportToXLSX_gatheringUserData=Fetching User Activity Data",
103 "ExcelExportAction_exportToXLSX_gatheringGeoData=Fetching Geolocation Data",
104 "ExcelExportAction_exportToXLSX_gatheringIngestData=Fetching Ingest History Data",
105 "ExcelExportAction_exportToXLSX_writingToFile=Writing to File...",})
107 void exportToXLSX(
ReportProgressPanel progressPanel, DataSource dataSource, String baseReportDir)
108 throws IOException, ExcelExport.ExcelExportException {
110 File reportFile = getXLSXPath(dataSource.getName(), baseReportDir);
111 int totalWeight = 11;
113 progressPanel.setIndeterminate(
false);
114 progressPanel.setLabels(dataSource.getName(), reportFile.getPath());
115 progressPanel.setMaximumProgress(totalWeight);
116 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_beginExport());
117 List<ExcelExport.ExcelSheetExport> sheetExports =
new ArrayList<>();
120 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringFileData());
121 progressPanel.setProgress(step);
122 List<ExcelExport.ExcelSheetExport> exports =
new ExportTypes().getExports(dataSource);
123 if (exports !=
null) {
124 sheetExports.addAll(exports);
128 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringUserData());
129 progressPanel.setProgress(++step);
130 exports =
new ExportUserActivity().getExports(dataSource);
131 if (exports !=
null) {
132 sheetExports.addAll(exports);
136 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringRecentActivityData());
137 progressPanel.setProgress(++step);
138 exports =
new ExportRecentFiles().getExports(dataSource);
139 if (exports !=
null) {
140 sheetExports.addAll(exports);
144 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringAnalysisData());
145 progressPanel.setProgress(++step);
146 exports =
new ExportAnalysisResults().getExports(dataSource);
147 if (exports !=
null) {
148 sheetExports.addAll(exports);
152 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringPastData());
153 progressPanel.setProgress(++step);
154 exports =
new ExportPastCases().getExports(dataSource);
155 if (exports !=
null) {
156 sheetExports.addAll(exports);
160 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringGeoData());
161 progressPanel.setProgress(++step);
162 exports =
new ExportGeolocation().getExports(dataSource);
163 if (exports !=
null) {
164 sheetExports.addAll(exports);
168 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringTimelineData());
169 progressPanel.setProgress(++step);
170 exports =
new ExportTimeline().getExports(dataSource);
171 if (exports !=
null) {
172 sheetExports.addAll(exports);
176 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringIngestData());
177 progressPanel.setProgress(++step);
178 exports = ExportIngestHistory.getExports(dataSource);
179 if (exports !=
null) {
180 sheetExports.addAll(exports);
184 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_gatheringContainerData());
185 progressPanel.setProgress(++step);
186 exports =
new ExportContainerInfo().getExports(dataSource);
187 if (exports !=
null) {
188 sheetExports.addAll(exports);
191 progressPanel.updateStatusLabel(Bundle.ExcelExportAction_exportToXLSX_writingToFile());
192 progressPanel.setProgress(++step);
193 ExcelExport.writeExcel(sheetExports, reportFile);
198 curCase.
addReport(reportFile.getParent(),
199 Bundle.ExcelExportAction_moduleName(),
200 reportFile.getName(),
203 logger.log(Level.WARNING,
"There was an error attaching report to case.", ex);
234 protected static <T> T getFetchResult(
236 String sheetName, DataSource ds) {
240 }
catch (Exception ex) {
241 logger.log(Level.WARNING,
242 String.format(
"There was an error while acquiring data for exporting worksheet(s): '%s' for dataSource: %s",
243 sheetName ==
null ?
"<null>" : sheetName,
244 ds ==
null || ds.getName() ==
null ?
"<null>" : ds.getName()), ex);
260 protected static <T> ExcelSheetExport convertToExcel(ExcelExportFunction<T> excelConverter, T data, String sheetName) {
266 return excelConverter.convert(data);
267 }
catch (ExcelExportException ex) {
268 logger.log(Level.WARNING,
269 String.format(
"There was an error while preparing export of worksheet(s): '%s'",
270 sheetName ==
null ?
"<null>" : sheetName), ex);
287 protected static <T> ExcelSheetExport getExport(
288 DataFetcher<DataSource, T> dataFetcher, ExcelExportFunction<T> excelConverter,
289 String sheetName, DataSource ds) {
291 T data = getFetchResult(dataFetcher, sheetName, ds);
292 return convertToExcel(excelConverter, data, sheetName);
304 protected static <T, C extends CellModel>
ExcelSheetExport getTableExport(List<ColumnModel<T, C>> columnsModel,
305 String sheetName, List<T> data) {
307 return convertToExcel((dataList) ->
new ExcelTableExport<>(sheetName, columnsModel, dataList),
324 DataFetcher<DataSource, List<T>> dataFetcher, List<ColumnModel<T, C>> columnsModel,
325 String sheetName, DataSource ds) {
327 return getExport(dataFetcher,
328 (dataList) ->
new ExcelTableExport<>(sheetName, columnsModel, dataList),
static Case getCurrentCaseThrows()
void addReport(String localPath, String srcModuleName, String reportName)
static String escapeFileName(String fileName)
synchronized static Logger getLogger(String name)
ExcelSheetExport convert(T data)