From d3e5dcc1d5bd0d8fa7ebdb72ce29acf34bd497ed Mon Sep 17 00:00:00 2001 From: Greg DiCristofaro Date: Sun, 14 Mar 2021 20:45:56 -0400 Subject: [PATCH] beginning to use with container panel --- .../datasourcesummary/ui/ContainerPanel.java | 40 ++++++++++++++--- .../uiutils/ExcelTableExport.java | 43 +++++++++++++++---- 2 files changed, 67 insertions(+), 16 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java index c19fd2198e..53af00adce 100644 --- a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java @@ -30,10 +30,16 @@ import javax.swing.table.DefaultTableModel; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.datasourcesummary.datamodel.ContainerSummary; +import org.sleuthkit.autopsy.datasourcesummary.datamodel.PastCasesSummary; +import static org.sleuthkit.autopsy.datasourcesummary.ui.BaseDataSourceSummaryPanel.getFetchResult; +import static org.sleuthkit.autopsy.datasourcesummary.ui.BaseDataSourceSummaryPanel.getTableExport; import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchResult.ResultType; import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchWorker.DataFetchComponents; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetcher; import org.sleuthkit.autopsy.datasourcesummary.uiutils.DefaultUpdateGovernor; import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelExport; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelSpecialFormatExport; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelSpecialFormatExport.KeyValueItemExportable; import org.sleuthkit.autopsy.datasourcesummary.uiutils.UpdateGovernor; import org.sleuthkit.datamodel.DataSource; import org.sleuthkit.datamodel.Image; @@ -42,6 +48,9 @@ import org.sleuthkit.datamodel.TskCoreException; /** * Panel to display additional details associated with a specific DataSource */ +@Messages({ + "ContainerPanel_tabName=Container" +}) class ContainerPanel extends BaseDataSourceSummaryPanel { /** @@ -103,6 +112,7 @@ class ContainerPanel extends BaseDataSourceSummaryPanel { private static final Logger logger = Logger.getLogger(ContainerPanel.class.getName()); private final List> dataFetchComponents; + private final DataFetcher containerDataFetcher; /** * Creates a new form ContainerPanel. @@ -117,14 +127,16 @@ class ContainerPanel extends BaseDataSourceSummaryPanel { ContainerPanel(ContainerSummary containerSummary) { super(containerSummary, CONTAINER_UPDATES); + containerDataFetcher = (dataSource) -> { + return new ContainerPanelData( + dataSource, + containerSummary.getSizeOfUnallocatedFiles(dataSource) + ); + }; + dataFetchComponents = Arrays.asList( new DataFetchComponents<>( - (dataSource) -> { - return new ContainerPanelData( - dataSource, - containerSummary.getSizeOfUnallocatedFiles(dataSource) - ); - }, + containerDataFetcher, (result) -> { if (result != null && result.getResultType() == ResultType.SUCCESS) { ContainerPanelData data = result.getData(); @@ -279,7 +291,21 @@ class ContainerPanel extends BaseDataSourceSummaryPanel { @Override List getExports(DataSource ds) { - return Collections.emptyList(); + ContainerPanelData result = getFetchResult(containerDataFetcher, "Container sheets", ds); + if (ds == null || result == null) { + return Collections.emptyList(); + } + + return Arrays.asList( + new ExcelSpecialFormatExport(Bundle.ContainerPanel_tabName(), Arrays.asList( + new KeyValueItemExportable(Bundle.ContainerPanel_export_displayName(), ds.getName()), + new KeyValueItemExportable(Bundle.ContainerPanel_export_originalName(), ds.getName()), + new KeyValueItemExportable(Bundle.ContainerPanel_export_deviceId(), ds.getDeviceId()), + new KeyValueItemExportable(Bundle.ContainerPanel_export_timeZone(), ds.getTimeZone()), + new KeyValueItemExportable(Bundle.ContainerPanel_export_acquisitionDetails(), null), + // ...acquisition details... + )) + ); } /** diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java index de1e3f684c..bdbd475de0 100644 --- a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java @@ -28,12 +28,14 @@ import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelExport.ExcelExportException; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelExport.ExcelSheetExport; +import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelSpecialFormatExport.ExcelItemExportable; import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelTableExport.ExcelCellModel; /** * An excel sheet export of table data. */ -public class ExcelTableExport implements ExcelExport.ExcelSheetExport { +public class ExcelTableExport implements ExcelSheetExport, ExcelItemExportable { /** * Basic interface for a cell model. @@ -50,6 +52,7 @@ public class ExcelTableExport implements ExcelExpor private final String sheetName; private final List> columns; private final List data; + private final int colStart; /** * Main constructor. @@ -60,9 +63,14 @@ public class ExcelTableExport implements ExcelExpor * @param data The data to export. */ public ExcelTableExport(String sheetName, List> columns, List data) { + this(sheetName, columns, data, 0); + } + + public ExcelTableExport(String sheetName, List> columns, List data, int colStart) { this.sheetName = sheetName; this.columns = columns; this.data = data; + this.colStart = colStart; } @Override @@ -72,11 +80,14 @@ public class ExcelTableExport implements ExcelExpor @Override public void renderSheet(Sheet sheet, ExcelExport.WorksheetEnv style) throws ExcelExport.ExcelExportException { - renderSheet(sheet, style, columns, data); - // Resize all columns to fit the content size - for (int i = 0; i < columns.size(); i++) { - sheet.autoSizeColumn(i); - } + renderSheet(sheet, style, 1, colStart, columns, data); + + } + + @Override + public int write(Sheet sheet, int rowStart, ExcelExport.WorksheetEnv env) throws ExcelExportException { + int rowsWritten = renderSheet(sheet, env, rowStart, colStart, columns, data); + return rowStart + rowsWritten - 1; } /** @@ -84,12 +95,19 @@ public class ExcelTableExport implements ExcelExpor * * @param sheet The sheet. * @param worksheetEnv The worksheet environment and preferences. + * @param rowStart The row to start in. + * @param colStart The column to start in. * @param columns The columns. * @param data The data. * @throws ExcelExportException + * @return The number of rows (including the header) written. */ - private static void renderSheet( - Sheet sheet, ExcelExport.WorksheetEnv worksheetEnv, List> columns, List data) + private static int renderSheet( + Sheet sheet, + ExcelExport.WorksheetEnv worksheetEnv, + int rowStart, + int colStart, + List> columns, List data) throws ExcelExport.ExcelExportException { List safeData = data == null ? Collections.emptyList() : data; @@ -115,8 +133,15 @@ public class ExcelTableExport implements ExcelExpor Optional cellStyle = (formatString == null) ? Optional.empty() : Optional.of(cellStyles.computeIfAbsent(formatString, k -> ExcelExport.createCellStyle(worksheetEnv.getParentWorkbook(), formatString))); - ExcelExport.createCell(row, colNum, cellModel, cellStyle); + ExcelExport.createCell(row, colNum + colStart, cellModel, cellStyle); } } + + // Resize all columns to fit the content size + for (int i = colStart; i < columns.size() + colStart; i++) { + sheet.autoSizeColumn(i); + } + + return safeData.size() + 1; } }