Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
UserActivityPanel.java
Go to the documentation of this file.
1/*
2 * Autopsy Forensic Browser
3 *
4 * Copyright 2020-2021 Basis Technology Corp.
5 * Contact: carrier <at> sleuthkit <dot> org
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19package org.sleuthkit.autopsy.datasourcesummary.ui;
20
21import java.awt.Component;
22import java.text.DateFormat;
23import java.text.SimpleDateFormat;
24import java.util.Arrays;
25import java.util.Date;
26import java.util.List;
27import java.util.Locale;
28import java.util.function.Function;
29import org.apache.commons.lang.StringUtils;
30import org.openide.util.NbBundle.Messages;
31import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary;
32import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.LastAccessedArtifact;
33import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopAccountResult;
34import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopDeviceAttachedResult;
35import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopDomainsResult;
36import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopProgramsResult;
37import org.sleuthkit.autopsy.datasourcesummary.datamodel.UserActivitySummary.TopWebSearchResult;
38import org.sleuthkit.autopsy.datasourcesummary.uiutils.ColumnModel;
39import org.sleuthkit.autopsy.datasourcesummary.uiutils.DataFetchWorker.DataFetchComponents;
40import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataFetcher;
41import org.sleuthkit.autopsy.datasourcesummary.uiutils.DefaultCellModel;
42import org.sleuthkit.autopsy.datasourcesummary.uiutils.GuiCellModel.MenuItem;
43import org.sleuthkit.autopsy.datasourcesummary.uiutils.IngestRunningLabel;
44import org.sleuthkit.autopsy.datasourcesummary.uiutils.JTablePanel;
45import org.sleuthkit.datamodel.DataSource;
46
50@Messages({
51 "UserActivityPanel_tab_title=User Activity",
52 "UserActivityPanel_TopProgramsTableModel_tabName=Recent Programs",
53 "UserActivityPanel_TopDomainsTableModel_tabName=Recent Domains",
54 "UserActivityPanel_TopWebSearchTableModel_tabName=Recent Web Searches",
55 "UserActivityPanel_TopDeviceAttachedTableModel_tabName=Recent Devices Attached",
56 "UserActivityPanel_TopAccountTableModel_tabName=Recent Account Types Used",
57 "UserActivityPanel_TopProgramsTableModel_name_header=Program",
58 "UserActivityPanel_TopProgramsTableModel_folder_header=Folder",
59 "UserActivityPanel_TopProgramsTableModel_count_header=Run Times",
60 "UserActivityPanel_TopProgramsTableModel_lastrun_header=Last Run",
61 "UserActivityPanel_TopDomainsTableModel_domain_header=Domain",
62 "UserActivityPanel_TopDomainsTableModel_count_header=Visits",
63 "UserActivityPanel_TopDomainsTableModel_lastAccess_header=Last Accessed",
64 "UserActivityPanel_TopWebSearchTableModel_searchString_header=Search String",
65 "UserActivityPanel_TopWebSearchTableModel_dateAccessed_header=Date Accessed",
66 "UserActivityPanel_TopWebSearchTableModel_translatedResult_header=Translated",
67 "UserActivityPanel_TopDeviceAttachedTableModel_deviceId_header=Device Id",
68 "UserActivityPanel_TopDeviceAttachedTableModel_makeModel_header=Make and Model",
69 "UserActivityPanel_TopDeviceAttachedTableModel_dateAccessed_header=Last Accessed",
70 "UserActivityPanel_TopAccountTableModel_accountType_header=Account Type",
71 "UserActivityPanel_TopAccountTableModel_lastAccess_header=Last Accessed",
72 "UserActivityPanel_noDataExists=No communication data exists"})
73public class UserActivityPanel extends BaseDataSourceSummaryPanel {
74
75 private static final long serialVersionUID = 1L;
76 private static final String DATETIME_FORMAT_STR = "yyyy/MM/dd HH:mm:ss";
77 private static final DateFormat DATETIME_FORMAT = new SimpleDateFormat(DATETIME_FORMAT_STR, Locale.getDefault());
78 private static final int TOP_PROGS_COUNT = 10;
79 private static final int TOP_DOMAINS_COUNT = 10;
80 private static final int TOP_SEARCHES_COUNT = 10;
81 private static final int TOP_ACCOUNTS_COUNT = 5;
82 private static final int TOP_DEVICES_COUNT = 10;
83
84 // set up recent programs table
85 private final List<ColumnModel<TopProgramsResult, DefaultCellModel<?>>> topProgramsTemplate = Arrays.asList(
86 // program name column
87 new ColumnModel<>(
88 Bundle.UserActivityPanel_TopProgramsTableModel_name_header(),
89 (prog) -> {
90 return new DefaultCellModel<>(prog.getProgramName())
91 .setTooltip(prog.getProgramPath())
92 .setPopupMenu(getPopup(prog));
93 },
94 250),
95 // program folder column
96 new ColumnModel<>(
97 Bundle.UserActivityPanel_TopProgramsTableModel_folder_header(),
98 (prog) -> {
99 return new DefaultCellModel<>(
100 getShortFolderName(
101 prog.getProgramPath(),
102 prog.getProgramName()))
103 .setTooltip(prog.getProgramPath())
104 .setPopupMenu(getPopup(prog));
105 },
106 150),
107 // run count column
108 new ColumnModel<>(
109 Bundle.UserActivityPanel_TopProgramsTableModel_count_header(),
110 (prog) -> {
111 return new DefaultCellModel<>(prog.getRunTimes(), (num) -> num == null ? "" : num.toString())
112 .setPopupMenu(getPopup(prog));
113 },
114 80),
115 // last run date column
116 new ColumnModel<>(
117 Bundle.UserActivityPanel_TopProgramsTableModel_lastrun_header(),
118 getDateFunct(),
119 150)
120 );
121
122 // set up recent domains table
123 private final List<ColumnModel<TopDomainsResult, DefaultCellModel<?>>> topDomainsTemplate = Arrays.asList(
124 // domain column
125 new ColumnModel<>(
126 Bundle.UserActivityPanel_TopDomainsTableModel_domain_header(),
127 (recentDomain) -> {
128 return new DefaultCellModel<>(recentDomain.getDomain())
129 .setPopupMenu(getPopup(recentDomain));
130 },
131 250),
132 // count column
133 new ColumnModel<>(
134 Bundle.UserActivityPanel_TopDomainsTableModel_count_header(),
135 (recentDomain) -> {
136 return new DefaultCellModel<>(recentDomain.getVisitTimes(), (num) -> num == null ? "" : num.toString())
137 .setPopupMenu(getPopup(recentDomain));
138 },
139 100),
140 // last accessed column
141 new ColumnModel<>(
142 Bundle.UserActivityPanel_TopDomainsTableModel_lastAccess_header(),
143 getDateFunct(),
144 150)
145 );
146
147 // top web searches table
148 private final List<ColumnModel<TopWebSearchResult, DefaultCellModel<?>>> topWebSearchesTemplate = Arrays.asList(
149 // search string column
150 new ColumnModel<>(
151 Bundle.UserActivityPanel_TopWebSearchTableModel_searchString_header(),
152 (webSearch) -> {
153 return new DefaultCellModel<>(webSearch.getSearchString())
154 .setPopupMenu(getPopup(webSearch));
155 },
156 250
157 ),
158 // last accessed
159 new ColumnModel<>(
160 Bundle.UserActivityPanel_TopWebSearchTableModel_dateAccessed_header(),
161 getDateFunct(),
162 150
163 ),
164 // translated value
165 new ColumnModel<>(
166 Bundle.UserActivityPanel_TopWebSearchTableModel_translatedResult_header(),
167 (webSearch) -> {
168 return new DefaultCellModel<>(webSearch.getTranslatedResult())
169 .setPopupMenu(getPopup(webSearch));
170 },
171 250
172 )
173 );
174
175 // top devices attached table
176 private final List<ColumnModel<TopDeviceAttachedResult, DefaultCellModel<?>>> topDevicesTemplate = Arrays.asList(
177 // device id column
178 new ColumnModel<>(
179 Bundle.UserActivityPanel_TopDeviceAttachedTableModel_deviceId_header(),
180 (device) -> {
181 return new DefaultCellModel<>(device.getDeviceId())
182 .setPopupMenu(getPopup(device));
183 },
184 250
185 ),
186 // last accessed
187 new ColumnModel<>(
188 Bundle.UserActivityPanel_TopDeviceAttachedTableModel_dateAccessed_header(),
189 getDateFunct(),
190 150
191 ),
192 // make and model
193 new ColumnModel<>(
194 Bundle.UserActivityPanel_TopDeviceAttachedTableModel_makeModel_header(),
195 (device) -> {
196 String make = StringUtils.isBlank(device.getDeviceMake()) ? "" : device.getDeviceMake().trim();
197 String model = StringUtils.isBlank(device.getDeviceModel()) ? "" : device.getDeviceModel().trim();
198 String makeModelString = (make.isEmpty() || model.isEmpty())
199 ? make + model
200 : String.format("%s - %s", make, model);
201 return new DefaultCellModel<>(makeModelString)
202 .setPopupMenu(getPopup(device));
203 },
204 250
205 )
206 );
207
208 // top accounts table
209 private final List<ColumnModel<TopAccountResult, DefaultCellModel<?>>> topAccountsTemplate = Arrays.asList(
210 // account type column
211 new ColumnModel<>(
212 Bundle.UserActivityPanel_TopAccountTableModel_accountType_header(),
213 (account) -> {
214 return new DefaultCellModel<>(account.getAccountType())
215 .setPopupMenu(getPopup(account));
216 },
217 250
218 ),
219 // last accessed
220 new ColumnModel<>(
221 Bundle.UserActivityPanel_TopAccountTableModel_lastAccess_header(),
222 getDateFunct(),
223 150
224 )
225 );
226
227 // set up recent programs table
229 .setKeyFunction((prog) -> prog.getProgramPath() + ":" + prog.getProgramName());
230
231 // set up recent domains table
233 .setKeyFunction((domain) -> domain.getDomain());
234
235 // top web searches table
237 .setKeyFunction((query) -> query.getSearchString());
238
239 // top devices attached table
241 .setKeyFunction((topDevice) -> topDevice.getDeviceId());
242
243 // top accounts table
245 .setKeyFunction((topAccount) -> topAccount.getAccountType());
246
252
253 private final List<JTablePanel<?>> tables = Arrays.asList(
259 );
260
262
263 private final List<DataFetchComponents<DataSource, ?>> dataFetchComponents;
265
270 this(new UserActivitySummaryGetter());
271 }
272
280 super(userActivityData);
281 this.userActivityData = userActivityData;
282
283 this.topProgramsFetcher = (dataSource) -> userActivityData.getTopPrograms(dataSource, TOP_PROGS_COUNT);
284 this.topDomainsFetcher = (dataSource) -> userActivityData.getRecentDomains(dataSource, TOP_DOMAINS_COUNT);
285 this.topWebSearchesFetcher = (dataSource) -> userActivityData.getMostRecentWebSearches(dataSource, TOP_SEARCHES_COUNT);
286 this.topDevicesAttachedFetcher = (dataSource) -> userActivityData.getRecentDevices(dataSource, TOP_DEVICES_COUNT);
287 this.topAccountsFetcher = (dataSource) -> userActivityData.getRecentAccounts(dataSource, TOP_ACCOUNTS_COUNT);
288
289 // set up data acquisition methods
290 this.dataFetchComponents = Arrays.asList(
291 // top programs query
292 new DataFetchComponents<DataSource, List<TopProgramsResult>>(
294 (result) -> topProgramsTable.showDataFetchResult(result)),
295 // top domains query
296 new DataFetchComponents<DataSource, List<TopDomainsResult>>(
298 (result) -> recentDomainsTable.showDataFetchResult(result)),
299 // top web searches query
300 new DataFetchComponents<DataSource, List<TopWebSearchResult>>(
302 (result) -> topWebSearchesTable.showDataFetchResult(result)),
303 // top devices query
304 new DataFetchComponents<DataSource, List<TopDeviceAttachedResult>>(
306 (result) -> topDevicesAttachedTable.showDataFetchResult(result)),
307 // top accounts query
308 new DataFetchComponents<DataSource, List<TopAccountResult>>(
310 (result) -> topAccountsTable.showDataFetchResult(result))
311 );
312
314 }
315
316 private <T extends LastAccessedArtifact> Function<T, DefaultCellModel<?>> getDateFunct() {
317 return (T lastAccessed) -> {
318 Function<Date, String> dateParser = (dt) -> dt == null ? "" : DATETIME_FORMAT.format(dt);
319 return new DefaultCellModel<>(lastAccessed.getLastAccessed(), dateParser)
320 .setPopupMenu(getPopup(lastAccessed));
321 };
322 }
323
334 private List<MenuItem> getPopup(LastAccessedArtifact record) {
335 return record == null ? null : Arrays.asList(getArtifactNavigateItem(record.getArtifact()));
336 }
337
346 private static String getShortFolderName(String path, String appName) {
347 return UserActivitySummary.getShortFolderName(path, appName);
348 }
349
350 @Override
351 protected void fetchInformation(DataSource dataSource) {
353 }
354
355 @Override
356 protected void onNewDataSource(DataSource dataSource) {
358 }
359
360 @Override
361 public void close() {
362 ingestRunningLabel.unregister();
363 super.close();
364 }
365
371 @SuppressWarnings("unchecked")
372 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
373 private void initComponents() {
374
375 javax.swing.JScrollPane contentScrollPane = new javax.swing.JScrollPane();
376 javax.swing.JPanel contentPanel = new javax.swing.JPanel();
377 javax.swing.JPanel ingestRunningPanel = ingestRunningLabel;
378 javax.swing.JLabel programsRunLabel = new javax.swing.JLabel();
379 javax.swing.Box.Filler filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2));
380 javax.swing.JPanel topProgramsTablePanel = topProgramsTable;
381 javax.swing.JLabel rightClickForMoreOptions1 = new javax.swing.JLabel();
382 javax.swing.Box.Filler filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20));
383 javax.swing.JLabel recentDomainsLabel = new javax.swing.JLabel();
384 javax.swing.Box.Filler filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2));
385 javax.swing.JPanel recentDomainsTablePanel = recentDomainsTable;
386 javax.swing.JLabel rightClickForMoreOptions2 = new javax.swing.JLabel();
387 javax.swing.Box.Filler filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20));
388 javax.swing.JLabel topWebSearchLabel = new javax.swing.JLabel();
389 javax.swing.Box.Filler filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2));
390 javax.swing.JPanel topWebSearches = topWebSearchesTable;
391 javax.swing.JLabel rightClickForMoreOptions3 = new javax.swing.JLabel();
392 javax.swing.Box.Filler filler6 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20));
393 javax.swing.JLabel topDevicesAttachedLabel = new javax.swing.JLabel();
394 javax.swing.Box.Filler filler7 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2));
395 javax.swing.JPanel recentDevicesAttached = topDevicesAttachedTable;
396 javax.swing.JLabel rightClickForMoreOptions4 = new javax.swing.JLabel();
397 javax.swing.Box.Filler filler8 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20));
398 javax.swing.JLabel recentAccountsLabel = new javax.swing.JLabel();
399 javax.swing.Box.Filler filler9 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2));
400 javax.swing.JPanel topAccounts = topAccountsTable;
401 javax.swing.JLabel rightClickForMoreOptions5 = new javax.swing.JLabel();
402
403 setLayout(new java.awt.BorderLayout());
404
405 contentScrollPane.setMaximumSize(null);
406 contentScrollPane.setMinimumSize(null);
407
408 contentPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
409 contentPanel.setMaximumSize(new java.awt.Dimension(32767, 450));
410 contentPanel.setMinimumSize(new java.awt.Dimension(10, 450));
411 contentPanel.setLayout(new javax.swing.BoxLayout(contentPanel, javax.swing.BoxLayout.PAGE_AXIS));
412
413 ingestRunningPanel.setAlignmentX(0.0F);
414 ingestRunningPanel.setMaximumSize(new java.awt.Dimension(32767, 25));
415 ingestRunningPanel.setMinimumSize(new java.awt.Dimension(10, 25));
416 ingestRunningPanel.setPreferredSize(new java.awt.Dimension(10, 25));
417 contentPanel.add(ingestRunningPanel);
418
419 programsRunLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
420 org.openide.awt.Mnemonics.setLocalizedText(programsRunLabel, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.programsRunLabel.text")); // NOI18N
421 programsRunLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
422 contentPanel.add(programsRunLabel);
423 contentPanel.add(filler1);
424
425 topProgramsTablePanel.setAlignmentX(0.0F);
426 topProgramsTablePanel.setMaximumSize(new java.awt.Dimension(32767, 106));
427 topProgramsTablePanel.setMinimumSize(new java.awt.Dimension(10, 106));
428 topProgramsTablePanel.setPreferredSize(new java.awt.Dimension(10, 106));
429 contentPanel.add(topProgramsTablePanel);
430
431 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions1, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.rightClickForMoreOptions1.text")); // NOI18N
432 contentPanel.add(rightClickForMoreOptions1);
433 contentPanel.add(filler3);
434
435 recentDomainsLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
436 org.openide.awt.Mnemonics.setLocalizedText(recentDomainsLabel, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.recentDomainsLabel.text")); // NOI18N
437 contentPanel.add(recentDomainsLabel);
438 contentPanel.add(filler2);
439
440 recentDomainsTablePanel.setAlignmentX(0.0F);
441 recentDomainsTablePanel.setMaximumSize(new java.awt.Dimension(32767, 106));
442 recentDomainsTablePanel.setMinimumSize(new java.awt.Dimension(10, 106));
443 recentDomainsTablePanel.setPreferredSize(new java.awt.Dimension(10, 106));
444 contentPanel.add(recentDomainsTablePanel);
445
446 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions2, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.rightClickForMoreOptions2.text")); // NOI18N
447 contentPanel.add(rightClickForMoreOptions2);
448 contentPanel.add(filler4);
449
450 topWebSearchLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
451 org.openide.awt.Mnemonics.setLocalizedText(topWebSearchLabel, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.topWebSearchLabel.text")); // NOI18N
452 contentPanel.add(topWebSearchLabel);
453 contentPanel.add(filler5);
454
455 topWebSearches.setAlignmentX(0.0F);
456 topWebSearches.setMaximumSize(new java.awt.Dimension(32767, 106));
457 topWebSearches.setMinimumSize(new java.awt.Dimension(10, 106));
458 topWebSearches.setPreferredSize(new java.awt.Dimension(10, 106));
459 contentPanel.add(topWebSearches);
460
461 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions3, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.rightClickForMoreOptions3.text")); // NOI18N
462 contentPanel.add(rightClickForMoreOptions3);
463 contentPanel.add(filler6);
464
465 topDevicesAttachedLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
466 org.openide.awt.Mnemonics.setLocalizedText(topDevicesAttachedLabel, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.topDevicesAttachedLabel.text")); // NOI18N
467 contentPanel.add(topDevicesAttachedLabel);
468 contentPanel.add(filler7);
469
470 recentDevicesAttached.setAlignmentX(0.0F);
471 recentDevicesAttached.setMaximumSize(new java.awt.Dimension(32767, 106));
472 recentDevicesAttached.setMinimumSize(new java.awt.Dimension(10, 106));
473 recentDevicesAttached.setPreferredSize(new java.awt.Dimension(10, 106));
474 contentPanel.add(recentDevicesAttached);
475
476 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions4, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.rightClickForMoreOptions4.text")); // NOI18N
477 contentPanel.add(rightClickForMoreOptions4);
478 contentPanel.add(filler8);
479
480 recentAccountsLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
481 org.openide.awt.Mnemonics.setLocalizedText(recentAccountsLabel, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.recentAccountsLabel.text")); // NOI18N
482 contentPanel.add(recentAccountsLabel);
483 contentPanel.add(filler9);
484
485 topAccounts.setAlignmentX(0.0F);
486 topAccounts.setMaximumSize(new java.awt.Dimension(32767, 106));
487 topAccounts.setMinimumSize(new java.awt.Dimension(10, 106));
488 topAccounts.setPreferredSize(new java.awt.Dimension(10, 106));
489 contentPanel.add(topAccounts);
490
491 org.openide.awt.Mnemonics.setLocalizedText(rightClickForMoreOptions5, org.openide.util.NbBundle.getMessage(UserActivityPanel.class, "UserActivityPanel.rightClickForMoreOptions5.text")); // NOI18N
492 contentPanel.add(rightClickForMoreOptions5);
493
494 contentScrollPane.setViewportView(contentPanel);
495
496 add(contentScrollPane, java.awt.BorderLayout.CENTER);
497 }// </editor-fold>//GEN-END:initComponents
498
499 // Variables declaration - do not modify//GEN-BEGIN:variables
500 // End of variables declaration//GEN-END:variables
501}
static String getShortFolderName(String strPath, String applicationName)
final List< DataFetchComponents< DataSource, ?> > dataFetchComponents
List< MenuItem > getPopup(LastAccessedArtifact record)
final List< ColumnModel< TopAccountResult, DefaultCellModel<?> > > topAccountsTemplate
UserActivityPanel(UserActivitySummaryGetter userActivityData)
final DataFetcher< DataSource, List< TopDeviceAttachedResult > > topDevicesAttachedFetcher
static String getShortFolderName(String path, String appName)
final List< ColumnModel< TopDomainsResult, DefaultCellModel<?> > > topDomainsTemplate
final DataFetcher< DataSource, List< TopProgramsResult > > topProgramsFetcher
final List< ColumnModel< TopWebSearchResult, DefaultCellModel<?> > > topWebSearchesTemplate
final JTablePanel< TopDeviceAttachedResult > topDevicesAttachedTable
final List< ColumnModel< TopDeviceAttachedResult, DefaultCellModel<?> > > topDevicesTemplate
final DataFetcher< DataSource, List< TopWebSearchResult > > topWebSearchesFetcher
final DataFetcher< DataSource, List< TopAccountResult > > topAccountsFetcher
final DataFetcher< DataSource, List< TopDomainsResult > > topDomainsFetcher
final List< ColumnModel< TopProgramsResult, DefaultCellModel<?> > > topProgramsTemplate
DefaultCellModel< T > setPopupMenu(List< MenuItem > popupMenu)
static< T, C extends GuiCellModel > JTablePanel< T > getJTablePanel(List< ColumnModel< T, C > > columns)

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.