beginning to use with container panel

This commit is contained in:
Greg DiCristofaro 2021-03-14 20:45:56 -04:00
parent cacd846888
commit d3e5dcc1d5
2 changed files with 67 additions and 16 deletions

View File

@ -30,10 +30,16 @@ import javax.swing.table.DefaultTableModel;
import org.openide.util.NbBundle.Messages; import org.openide.util.NbBundle.Messages;
import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.datasourcesummary.datamodel.ContainerSummary; 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.DataFetchResult.ResultType;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchWorker.DataFetchComponents; 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.DefaultUpdateGovernor;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelExport; 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.autopsy.datasourcesummary.uiutils.UpdateGovernor;
import org.sleuthkit.datamodel.DataSource; import org.sleuthkit.datamodel.DataSource;
import org.sleuthkit.datamodel.Image; import org.sleuthkit.datamodel.Image;
@ -42,6 +48,9 @@ import org.sleuthkit.datamodel.TskCoreException;
/** /**
* Panel to display additional details associated with a specific DataSource * Panel to display additional details associated with a specific DataSource
*/ */
@Messages({
"ContainerPanel_tabName=Container"
})
class ContainerPanel extends BaseDataSourceSummaryPanel { class ContainerPanel extends BaseDataSourceSummaryPanel {
/** /**
@ -103,6 +112,7 @@ class ContainerPanel extends BaseDataSourceSummaryPanel {
private static final Logger logger = Logger.getLogger(ContainerPanel.class.getName()); private static final Logger logger = Logger.getLogger(ContainerPanel.class.getName());
private final List<DataFetchComponents<DataSource, ?>> dataFetchComponents; private final List<DataFetchComponents<DataSource, ?>> dataFetchComponents;
private final DataFetcher<DataSource, ContainerPanelData> containerDataFetcher;
/** /**
* Creates a new form ContainerPanel. * Creates a new form ContainerPanel.
@ -117,14 +127,16 @@ class ContainerPanel extends BaseDataSourceSummaryPanel {
ContainerPanel(ContainerSummary containerSummary) { ContainerPanel(ContainerSummary containerSummary) {
super(containerSummary, CONTAINER_UPDATES); super(containerSummary, CONTAINER_UPDATES);
containerDataFetcher = (dataSource) -> {
return new ContainerPanelData(
dataSource,
containerSummary.getSizeOfUnallocatedFiles(dataSource)
);
};
dataFetchComponents = Arrays.asList( dataFetchComponents = Arrays.asList(
new DataFetchComponents<>( new DataFetchComponents<>(
(dataSource) -> { containerDataFetcher,
return new ContainerPanelData(
dataSource,
containerSummary.getSizeOfUnallocatedFiles(dataSource)
);
},
(result) -> { (result) -> {
if (result != null && result.getResultType() == ResultType.SUCCESS) { if (result != null && result.getResultType() == ResultType.SUCCESS) {
ContainerPanelData data = result.getData(); ContainerPanelData data = result.getData();
@ -279,7 +291,21 @@ class ContainerPanel extends BaseDataSourceSummaryPanel {
@Override @Override
List<ExcelExport.ExcelSheetExport> getExports(DataSource ds) { List<ExcelExport.ExcelSheetExport> 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...
))
);
} }
/** /**

View File

@ -28,12 +28,14 @@ import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelExport.ExcelExportException; 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; import org.sleuthkit.autopsy.datasourcesummary.uiutils.ExcelTableExport.ExcelCellModel;
/** /**
* An excel sheet export of table data. * An excel sheet export of table data.
*/ */
public class ExcelTableExport<T, C extends ExcelCellModel> implements ExcelExport.ExcelSheetExport { public class ExcelTableExport<T, C extends ExcelCellModel> implements ExcelSheetExport, ExcelItemExportable {
/** /**
* Basic interface for a cell model. * Basic interface for a cell model.
@ -50,6 +52,7 @@ public class ExcelTableExport<T, C extends ExcelCellModel> implements ExcelExpor
private final String sheetName; private final String sheetName;
private final List<ColumnModel<T, C>> columns; private final List<ColumnModel<T, C>> columns;
private final List<T> data; private final List<T> data;
private final int colStart;
/** /**
* Main constructor. * Main constructor.
@ -60,9 +63,14 @@ public class ExcelTableExport<T, C extends ExcelCellModel> implements ExcelExpor
* @param data The data to export. * @param data The data to export.
*/ */
public ExcelTableExport(String sheetName, List<ColumnModel<T, C>> columns, List<T> data) { public ExcelTableExport(String sheetName, List<ColumnModel<T, C>> columns, List<T> data) {
this(sheetName, columns, data, 0);
}
public ExcelTableExport(String sheetName, List<ColumnModel<T, C>> columns, List<T> data, int colStart) {
this.sheetName = sheetName; this.sheetName = sheetName;
this.columns = columns; this.columns = columns;
this.data = data; this.data = data;
this.colStart = colStart;
} }
@Override @Override
@ -72,11 +80,14 @@ public class ExcelTableExport<T, C extends ExcelCellModel> implements ExcelExpor
@Override @Override
public void renderSheet(Sheet sheet, ExcelExport.WorksheetEnv style) throws ExcelExport.ExcelExportException { public void renderSheet(Sheet sheet, ExcelExport.WorksheetEnv style) throws ExcelExport.ExcelExportException {
renderSheet(sheet, style, columns, data); renderSheet(sheet, style, 1, colStart, columns, data);
// Resize all columns to fit the content size
for (int i = 0; i < columns.size(); i++) { }
sheet.autoSizeColumn(i);
} @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<T, C extends ExcelCellModel> implements ExcelExpor
* *
* @param sheet The sheet. * @param sheet The sheet.
* @param worksheetEnv The worksheet environment and preferences. * @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 columns The columns.
* @param data The data. * @param data The data.
* @throws ExcelExportException * @throws ExcelExportException
* @return The number of rows (including the header) written.
*/ */
private static <T, C extends ExcelCellModel> void renderSheet( private static <T, C extends ExcelCellModel> int renderSheet(
Sheet sheet, ExcelExport.WorksheetEnv worksheetEnv, List<ColumnModel<T, C>> columns, List<T> data) Sheet sheet,
ExcelExport.WorksheetEnv worksheetEnv,
int rowStart,
int colStart,
List<ColumnModel<T, C>> columns, List<T> data)
throws ExcelExport.ExcelExportException { throws ExcelExport.ExcelExportException {
List<T> safeData = data == null ? Collections.emptyList() : data; List<T> safeData = data == null ? Collections.emptyList() : data;
@ -115,8 +133,15 @@ public class ExcelTableExport<T, C extends ExcelCellModel> implements ExcelExpor
Optional<CellStyle> cellStyle = (formatString == null) Optional<CellStyle> cellStyle = (formatString == null)
? Optional.empty() ? Optional.empty()
: Optional.of(cellStyles.computeIfAbsent(formatString, k -> ExcelExport.createCellStyle(worksheetEnv.getParentWorkbook(), formatString))); : 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;
} }
} }