Autopsy  4.19.3
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  */
19 package org.sleuthkit.autopsy.datasourcesummary.ui;
20 
21 import java.awt.Component;
22 import java.text.DateFormat;
23 import java.text.SimpleDateFormat;
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 org.apache.commons.lang.StringUtils;
30 import org.openide.util.NbBundle.Messages;
45 import 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"})
73 public 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
228  private final JTablePanel<TopProgramsResult> topProgramsTable = JTablePanel.getJTablePanel(topProgramsTemplate)
229  .setKeyFunction((prog) -> prog.getProgramPath() + ":" + prog.getProgramName());
230 
231  // set up recent domains table
232  private final JTablePanel<TopDomainsResult> recentDomainsTable = JTablePanel.getJTablePanel(topDomainsTemplate)
233  .setKeyFunction((domain) -> domain.getDomain());
234 
235  // top web searches table
236  private final JTablePanel<TopWebSearchResult> topWebSearchesTable = JTablePanel.getJTablePanel(topWebSearchesTemplate)
237  .setKeyFunction((query) -> query.getSearchString());
238 
239  // top devices attached table
240  private final JTablePanel<TopDeviceAttachedResult> topDevicesAttachedTable = JTablePanel.getJTablePanel(topDevicesTemplate)
241  .setKeyFunction((topDevice) -> topDevice.getDeviceId());
242 
243  // top accounts table
244  private final JTablePanel<TopAccountResult> topAccountsTable = JTablePanel.getJTablePanel(topAccountsTemplate)
245  .setKeyFunction((topAccount) -> topAccount.getAccountType());
246 
252 
253  private final List<JTablePanel<?>> tables = Arrays.asList(
254  topProgramsTable,
255  recentDomainsTable,
256  topWebSearchesTable,
257  topDevicesAttachedTable,
258  topAccountsTable
259  );
260 
261  private final IngestRunningLabel ingestRunningLabel = new IngestRunningLabel();
262 
263  private final List<DataFetchComponents<DataSource, ?>> dataFetchComponents;
265 
269  public UserActivityPanel() {
270  this(new UserActivitySummaryGetter());
271  }
272 
279  public UserActivityPanel(UserActivitySummaryGetter userActivityData) {
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>>(
293  topProgramsFetcher,
294  (result) -> topProgramsTable.showDataFetchResult(result)),
295  // top domains query
296  new DataFetchComponents<DataSource, List<TopDomainsResult>>(
297  topDomainsFetcher,
298  (result) -> recentDomainsTable.showDataFetchResult(result)),
299  // top web searches query
300  new DataFetchComponents<DataSource, List<TopWebSearchResult>>(
301  topWebSearchesFetcher,
302  (result) -> topWebSearchesTable.showDataFetchResult(result)),
303  // top devices query
304  new DataFetchComponents<DataSource, List<TopDeviceAttachedResult>>(
305  topDevicesAttachedFetcher,
306  (result) -> topDevicesAttachedTable.showDataFetchResult(result)),
307  // top accounts query
308  new DataFetchComponents<DataSource, List<TopAccountResult>>(
309  topAccountsFetcher,
310  (result) -> topAccountsTable.showDataFetchResult(result))
311  );
312 
313  initComponents();
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) {
352  fetchInformation(dataFetchComponents, dataSource);
353  }
354 
355  @Override
356  protected void onNewDataSource(DataSource dataSource) {
357  onNewDataSource(dataFetchComponents, tables, 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 }
List< TopProgramsResult > getTopPrograms(DataSource dataSource, int count)
final List< DataFetchComponents< DataSource,?> > dataFetchComponents
final DataFetcher< DataSource, List< TopDeviceAttachedResult > > topDevicesAttachedFetcher
List< MenuItem > getPopup(LastAccessedArtifact record)
final DataFetcher< DataSource, List< TopWebSearchResult > > topWebSearchesFetcher
final DataFetcher< DataSource, List< TopDomainsResult > > topDomainsFetcher
final DataFetcher< DataSource, List< TopProgramsResult > > topProgramsFetcher
void showDataFetchResult(DataFetchResult< T > result, String errorMessage, String noResultsMessage)
final DataFetcher< DataSource, List< TopAccountResult > > topAccountsFetcher
static< T, CextendsGuiCellModel > JTablePanel< T > getJTablePanel(List< ColumnModel< T, C >> columns)
List< TopAccountResult > getRecentAccounts(DataSource dataSource, int count)
List< TopWebSearchResult > getMostRecentWebSearches(DataSource dataSource, int count)
List< TopDeviceAttachedResult > getRecentDevices(DataSource dataSource, int count)
UserActivityPanel(UserActivitySummaryGetter userActivityData)
static String getShortFolderName(String path, String appName)
static String getShortFolderName(String strPath, String applicationName)
List< TopDomainsResult > getRecentDomains(DataSource dataSource, int count)

Copyright © 2012-2022 Basis Technology. Generated on: Thu Sep 29 2022
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.