19 package org.sleuthkit.autopsy.datasourcesummary.ui;
21 import java.text.DateFormat;
22 import java.text.SimpleDateFormat;
23 import java.util.ArrayList;
24 import java.util.Arrays;
25 import java.util.Date;
26 import java.util.List;
27 import java.util.Locale;
28 import java.util.function.Function;
29 import java.util.function.Supplier;
30 import java.util.stream.Collectors;
31 import java.util.stream.Stream;
32 import org.openide.util.NbBundle.Messages;
54 "RecentFilesPanel_docsTable_tabName=Recently Opened Documents",
55 "RecentFilesPanel_downloadsTable_tabName=Recently Downloads",
56 "RecentFilesPanel_attachmentsTable_tabName=Recent Attachments",})
59 private static final long serialVersionUID = 1L;
60 private static final String DATETIME_FORMAT_STR =
"yyyy/MM/dd HH:mm:ss";
61 private static final DateFormat DATETIME_FORMAT =
new SimpleDateFormat(DATETIME_FORMAT_STR, Locale.getDefault());
63 private final List<JTablePanel<?>> tablePanelList =
new ArrayList<>();
72 private final List<ColumnModel<RecentFileDetails, DefaultCellModel<?>>> docsTemplate = Arrays.asList(
76 .setPopupMenuRetriever(getPopupFunct(prog));
82 private final List<ColumnModel<RecentDownloadDetails, DefaultCellModel<?>>> downloadsTemplate = Arrays.asList(
86 .setPopupMenuRetriever(getPopupFunct(prog));
91 .setPopupMenuRetriever(getPopupFunct(prog));
93 new ColumnModel<>(Bundle.RecentFilesPanel_col_head_date(),
97 private final List<ColumnModel<RecentAttachmentDetails, DefaultCellModel<?>>> attachmentsTemplate = Arrays.asList(
101 .setPopupMenuRetriever(getPopupFunct(prog));
106 new ColumnModel<>(Bundle.RecentFilePanel_col_header_sender(),
109 .setPopupMenuRetriever(getPopupFunct(prog));
116 "RecentFilesPanel_col_head_date=Date",
117 "RecentFilePanel_col_header_domain=Domain",
118 "RecentFilePanel_col_header_path=Path",
119 "RecentFilePanel_col_header_sender=Sender",
120 "RecentFilePanel_emailParserModuleName=Email Parser"
145 private <T extends RecentFileDetails> Function<T, DefaultCellModel<?>> getDateFunct() {
146 return (T lastAccessed) -> {
147 Function<Date, String> dateParser = (dt) -> dt == null ?
"" : DATETIME_FORMAT.format(dt);
148 return new DefaultCellModel<>(
new Date(lastAccessed.getDateAsLong() * 1000), dateParser, DATETIME_FORMAT_STR)
164 if (record == null) {
168 List<MenuItem> toRet =
new ArrayList<>();
171 if (fileNav != null) {
176 toRet.add(getArtifactNavigateItem(record.
getArtifact()));
179 return (toRet.size() > 0) ? toRet : null;
185 fetchInformation(dataFetchComponents, dataSource);
190 onNewDataSource(dataFetchComponents, tablePanelList, dataSource);
196 getTableExport(docsFetcher, docsTemplate, Bundle.RecentFilesPanel_docsTable_tabName(), dataSource),
197 getTableExport(downloadsFetcher, downloadsTemplate, Bundle.RecentFilesPanel_downloadsTable_tabName(), dataSource),
198 getTableExport(attachmentsFetcher, attachmentsTemplate, Bundle.RecentFilesPanel_attachmentsTable_tabName(), dataSource))
199 .filter(sheet -> sheet != null)
200 .collect(Collectors.toList());
213 initalizeOpenDocsTable();
214 initalizeDownloadTable();
215 initalizeAttchementsTable();
219 "RecentFilePanel_no_open_documents=No recently open documents found."
224 @SuppressWarnings(
"unchecked")
225 private
void initalizeOpenDocsTable() {
233 tablePanelList.add(pane);
240 dataFetchComponents.add(worker);
246 @SuppressWarnings(
"unchecked")
247 private
void initalizeDownloadTable() {
255 tablePanelList.add(pane);
262 dataFetchComponents.add(worker);
268 @SuppressWarnings(
"unchecked")
269 private
void initalizeAttchementsTable() {
277 tablePanelList.add(pane);
285 dataFetchComponents.add(worker);
293 @SuppressWarnings(
"unchecked")
295 private
void initComponents() {
296 java.awt.GridBagConstraints gridBagConstraints;
298 javax.swing.JScrollPane scrollPane =
new javax.swing.JScrollPane();
299 javax.swing.JPanel tablePanel =
new javax.swing.JPanel();
300 javax.swing.JPanel ingestRunningPanel = ingestRunningLabel;
304 javax.swing.JLabel openDocsLabel =
new javax.swing.JLabel();
305 javax.swing.JLabel downloadLabel =
new javax.swing.JLabel();
306 javax.swing.JLabel attachmentLabel =
new javax.swing.JLabel();
307 javax.swing.JLabel rightClickForMoreOptions1 =
new javax.swing.JLabel();
308 javax.swing.JLabel rightClickForMoreOptions2 =
new javax.swing.JLabel();
309 javax.swing.JLabel rightClickForMoreOptions3 =
new javax.swing.JLabel();
311 setLayout(
new java.awt.BorderLayout());
313 tablePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
314 tablePanel.setMinimumSize(
new java.awt.Dimension(400, 400));
315 tablePanel.setPreferredSize(
new java.awt.Dimension(600, 400));
316 tablePanel.setLayout(
new java.awt.GridBagLayout());
318 ingestRunningPanel.setAlignmentX(0.0F);
319 ingestRunningPanel.setMaximumSize(
new java.awt.Dimension(32767, 25));
320 ingestRunningPanel.setMinimumSize(
new java.awt.Dimension(10, 25));
321 ingestRunningPanel.setPreferredSize(
new java.awt.Dimension(10, 25));
322 gridBagConstraints =
new java.awt.GridBagConstraints();
323 gridBagConstraints.gridx = 0;
324 gridBagConstraints.gridy = 0;
325 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
326 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
327 tablePanel.add(ingestRunningPanel, gridBagConstraints);
328 gridBagConstraints =
new java.awt.GridBagConstraints();
329 gridBagConstraints.gridx = 0;
330 gridBagConstraints.gridy = 2;
331 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
332 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
333 gridBagConstraints.weightx = 1.0;
334 gridBagConstraints.weighty = 1.0;
335 gridBagConstraints.insets =
new java.awt.Insets(2, 0, 0, 0);
336 tablePanel.add(openedDocPane, gridBagConstraints);
337 gridBagConstraints =
new java.awt.GridBagConstraints();
338 gridBagConstraints.gridx = 0;
339 gridBagConstraints.gridy = 5;
340 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
341 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
342 gridBagConstraints.weightx = 1.0;
343 gridBagConstraints.weighty = 1.0;
344 gridBagConstraints.insets =
new java.awt.Insets(2, 0, 0, 0);
345 tablePanel.add(downloadsPane, gridBagConstraints);
346 gridBagConstraints =
new java.awt.GridBagConstraints();
347 gridBagConstraints.gridx = 0;
348 gridBagConstraints.gridy = 8;
349 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
350 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
351 gridBagConstraints.weightx = 1.0;
352 gridBagConstraints.weighty = 1.0;
353 gridBagConstraints.insets =
new java.awt.Insets(2, 0, 0, 0);
354 tablePanel.add(attachmentsPane, gridBagConstraints);
356 org.openide.awt.Mnemonics.setLocalizedText(openDocsLabel,
org.openide.util.NbBundle.getMessage(
RecentFilesPanel.class,
"RecentFilesPanel.openDocsLabel.text"));
357 gridBagConstraints =
new java.awt.GridBagConstraints();
358 gridBagConstraints.gridx = 0;
359 gridBagConstraints.gridy = 1;
360 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
361 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
362 tablePanel.add(openDocsLabel, gridBagConstraints);
364 org.openide.awt.Mnemonics.setLocalizedText(downloadLabel,
org.openide.util.NbBundle.getMessage(
RecentFilesPanel.class,
"RecentFilesPanel.downloadLabel.text"));
365 gridBagConstraints =
new java.awt.GridBagConstraints();
366 gridBagConstraints.gridx = 0;
367 gridBagConstraints.gridy = 4;
368 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
369 gridBagConstraints.insets =
new java.awt.Insets(20, 0, 0, 0);
370 tablePanel.add(downloadLabel, gridBagConstraints);
372 org.openide.awt.Mnemonics.setLocalizedText(attachmentLabel,
org.openide.util.NbBundle.getMessage(
RecentFilesPanel.class,
"RecentFilesPanel.attachmentLabel.text"));
373 gridBagConstraints =
new java.awt.GridBagConstraints();
374 gridBagConstraints.gridx = 0;
375 gridBagConstraints.gridy = 7;
376 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
377 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
378 gridBagConstraints.insets =
new java.awt.Insets(20, 0, 0, 0);
379 tablePanel.add(attachmentLabel, gridBagConstraints);
381 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions1,
org.openide.util.NbBundle.getMessage(
RecentFilesPanel.class,
"RecentFilesPanel.rightClickForMoreOptions1.text"));
382 gridBagConstraints =
new java.awt.GridBagConstraints();
383 gridBagConstraints.gridx = 0;
384 gridBagConstraints.gridy = 3;
385 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
386 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
387 tablePanel.add(rightClickForMoreOptions1, gridBagConstraints);
389 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions2,
org.openide.util.NbBundle.getMessage(
RecentFilesPanel.class,
"RecentFilesPanel.rightClickForMoreOptions2.text"));
390 gridBagConstraints =
new java.awt.GridBagConstraints();
391 gridBagConstraints.gridx = 0;
392 gridBagConstraints.gridy = 6;
393 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
394 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
395 tablePanel.add(rightClickForMoreOptions2, gridBagConstraints);
397 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions3,
org.openide.util.NbBundle.getMessage(
RecentFilesPanel.class,
"RecentFilesPanel.rightClickForMoreOptions3.text"));
398 gridBagConstraints =
new java.awt.GridBagConstraints();
399 gridBagConstraints.gridx = 0;
400 gridBagConstraints.gridy = 9;
401 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
402 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
403 tablePanel.add(rightClickForMoreOptions3, gridBagConstraints);
405 scrollPane.setViewportView(tablePanel);
407 add(scrollPane, java.awt.BorderLayout.CENTER);
JTablePanel< T > setColumnModel(TableColumnModel columnModel)
static< T, CextendsGuiCellModel > TableColumnModel getTableColumnModel(List< ColumnModel< T, C >> columns)
final DataFetcher< DataSource, List< RecentAttachmentDetails > > attachmentsFetcher
List< RecentFileDetails > getRecentlyOpenedDocuments(DataSource dataSource, int maxCount)
DefaultCellModel< T > setPopupMenuRetriever(Supplier< List< MenuItem >> menuItemSupplier)
javax.swing.JPanel openedDocPane
Supplier< List< MenuItem > > getPopupFunct(RecentFileDetails record)
void showDataFetchResult(DataFetchResult< T > result, String errorMessage, String noResultsMessage)
BlackboardArtifact getArtifact()
javax.swing.JPanel downloadsPane
static< T, CextendsGuiCellModel > ListTableModel< T > getTableModel(List< ColumnModel< T, C >> columns)
List< RecentDownloadDetails > getRecentDownloads(DataSource dataSource, int maxCount)
final DataFetcher< DataSource, List< RecentFileDetails > > docsFetcher
JTablePanel< T > setCellListener(CellMouseListener cellListener)
final DataFetcher< DataSource, List< RecentDownloadDetails > > downloadsFetcher
void fetchInformation(DataSource dataSource)
javax.swing.JPanel attachmentsPane
List< RecentAttachmentDetails > getRecentAttachments(DataSource dataSource, int maxCount)
void onNewDataSource(DataSource dataSource)
static CellMouseListener getMouseListener()
RecentFilesPanel(RecentFilesSummary dataHandler)
final JTablePanel< T > setModel(ListTableModel< T > tableModel)
JTablePanel< T > setKeyFunction(Function< T,?extends Object > keyFunction)