From 9fdfac8d5ae366989b4e6931f0701d63baf66eed Mon Sep 17 00:00:00 2001 From: Greg DiCristofaro Date: Mon, 15 Mar 2021 09:56:53 -0400 Subject: [PATCH] working through container tab --- .../datasourcesummary/ui/ContainerPanel.java | 46 ++++++++++++-- .../uiutils/ExcelSpecialFormatExport.java | 60 ++++++++++++++----- .../uiutils/ExcelTableExport.java | 10 +--- 3 files changed, 89 insertions(+), 27 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java index 53af00adce..df70262391 100644 --- a/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/ui/ContainerPanel.java @@ -25,21 +25,24 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.table.DefaultTableModel; +import org.apache.commons.lang.StringUtils; 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.DefaultCellModel; 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.ExcelSpecialFormatExport.TitledExportable; import org.sleuthkit.autopsy.datasourcesummary.uiutils.UpdateGovernor; import org.sleuthkit.datamodel.DataSource; import org.sleuthkit.datamodel.Image; @@ -289,6 +292,31 @@ class ContainerPanel extends BaseDataSourceSummaryPanel { ((DefaultTableModel) filePathsTable.getModel()).setRowCount(0); } + + private static List getAcquisitionDetails(String acquisitionDetails) { + if (StringUtils.isBlank(acquisitionDetails)) { + return Collections.emptyList(); + } else { + return Stream.of(acquisitionDetails.split("\\r?\\n")) + .map((line) -> { + if (StringUtils.isBlank(line)) { + return null; + } else { + int colonIdx = line.indexOf(':'); + if (colonIdx >= 0) { + return new KeyValueItemExportable(new DefaultCellModel<>(line.substring(0, colonIdx + 1).trim()), + new DefaultCellModel<>(line.substring(colonIdx + 1, line.length()).trim())); + } else { + return new KeyValueItemExportable(new DefaultCellModel<>(""), new DefaultCellModel<>(line)); + } + } + }) + .filter(item -> item != null) + .collect(Collectors.toList()); + } + } + + @Override List getExports(DataSource ds) { ContainerPanelData result = getFetchResult(containerDataFetcher, "Container sheets", ds); @@ -302,8 +330,18 @@ class ContainerPanel extends BaseDataSourceSummaryPanel { 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... + + new TitledExportable(Bundle.ContainerPanel_export_acquisitionDetails(), getAcquisitionDetails(ds.getAcquisitionDetails())), + + new KeyValueItemExportable() + imageTypeValue.setText(""); + sizeValue.setText(""); + sectorSizeValue.setText(""); + md5HashValue.setText(""); + sha1HashValue.setText(""); + sha256HashValue.setText(""); + unallocatedSizeValue.setText(""); + ((DefaultTableModel) filePathsTable.getModel()).setRowCount(0); )) ); } diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelSpecialFormatExport.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelSpecialFormatExport.java index 139bac48b4..f8c1a7a082 100644 --- a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelSpecialFormatExport.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelSpecialFormatExport.java @@ -18,7 +18,9 @@ import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelTableExport.ExcelCel * @author gregd */ public class ExcelSpecialFormatExport implements ExcelExport.ExcelSheetExport { + public static class ExcelItemResult { + private final int rowStart; private final int rowEnd; private final int colStart; @@ -47,13 +49,14 @@ public class ExcelSpecialFormatExport implements ExcelExport.ExcelSheetExport { return colEnd; } } - - + public interface ExcelItemExportable { - int write(Sheet sheet, int rowStart, ExcelExport.WorksheetEnv env) throws ExcelExportException; + + int write(Sheet sheet, int rowStart, int colStart, ExcelExport.WorksheetEnv env) throws ExcelExportException; } - + public static class KeyValueItemExportable implements ExcelItemExportable { + private final ExcelCellModel key; private final ExcelCellModel value; private final int colStart; @@ -61,23 +64,22 @@ public class ExcelSpecialFormatExport implements ExcelExport.ExcelSheetExport { public KeyValueItemExportable(ExcelCellModel key, ExcelCellModel value) { this(key, value, 1); } - + public KeyValueItemExportable(ExcelCellModel key, ExcelCellModel value, int colStart) { this.key = key; this.value = value; this.colStart = colStart; } - + @Override - public int write(Sheet sheet, int rowStart, ExcelExport.WorksheetEnv env) throws ExcelExportException { + public int write(Sheet sheet, int rowStart, int colStart, ExcelExport.WorksheetEnv env) throws ExcelExportException { Row row = sheet.getRow(rowStart); ExcelExport.createCell(row, colStart, key, Optional.of(env.getHeaderStyle())); ExcelExport.createCell(row, colStart + 1, value, Optional.empty()); return rowStart + 1; } - } - + private final String sheetName; private final List exports; @@ -85,9 +87,37 @@ public class ExcelSpecialFormatExport implements ExcelExport.ExcelSheetExport { this.sheetName = sheetName; this.exports = exports == null ? Collections.emptyList() : exports; } - - - + + public static class TitledExportable implements ExcelItemExportable { + + private static final int DEFAULT_INDENT = 1; + + private final String title; + private final List children; + + public TitledExportable(String title, List children) { + this.title = title; + this.children = children; + } + + @Override + public int write(Sheet sheet, int rowStart, int colStart, ExcelExport.WorksheetEnv env) throws ExcelExportException { + ExcelExport.createCell(sheet.getRow(rowStart), colStart, new DefaultCellModel<>(title), Optional.of(env.getHeaderStyle())); + int curRow = rowStart + 1; + for (ExcelItemExportable export : children) { + if (export == null) { + continue; + } + + int endRow = export.write(sheet, rowStart, colStart + DEFAULT_INDENT, env); + curRow = endRow + 1; + } + + return curRow; + } + + } + @Override public String getSheetName() { return sheetName; @@ -100,10 +130,10 @@ public class ExcelSpecialFormatExport implements ExcelExport.ExcelSheetExport { if (export == null) { continue; } - - int endRow = export.write(sheet, rowStart, env); + + int endRow = export.write(sheet, rowStart, 1, env); rowStart = endRow + 1; } } - + } diff --git a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java index bdbd475de0..6f108af9ae 100644 --- a/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java +++ b/Core/src/org/sleuthkit/autopsy/datasourcesummary/uiutils/ExcelTableExport.java @@ -52,7 +52,6 @@ public class ExcelTableExport implements ExcelSheet private final String sheetName; private final List> columns; private final List data; - private final int colStart; /** * Main constructor. @@ -63,14 +62,9 @@ public class ExcelTableExport implements ExcelSheet * @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 @@ -80,12 +74,12 @@ public class ExcelTableExport implements ExcelSheet @Override public void renderSheet(Sheet sheet, ExcelExport.WorksheetEnv style) throws ExcelExport.ExcelExportException { - renderSheet(sheet, style, 1, colStart, columns, data); + renderSheet(sheet, style, 1, 1, columns, data); } @Override - public int write(Sheet sheet, int rowStart, ExcelExport.WorksheetEnv env) throws ExcelExportException { + public int write(Sheet sheet, int rowStart, int colStart, ExcelExport.WorksheetEnv env) throws ExcelExportException { int rowsWritten = renderSheet(sheet, env, rowStart, colStart, columns, data); return rowStart + rowsWritten - 1; }