19 package org.sleuthkit.autopsy.communications;
21 import com.google.common.collect.ImmutableSet;
22 import java.awt.event.ItemListener;
23 import java.beans.PropertyChangeListener;
24 import java.time.LocalDate;
25 import java.time.ZoneId;
26 import java.util.EnumSet;
27 import java.util.HashMap;
29 import java.util.Map.Entry;
30 import java.util.logging.Level;
31 import java.util.stream.Collectors;
32 import javax.swing.JCheckBox;
33 import javax.swing.JPanel;
34 import org.openide.util.NbBundle;
47 import org.
sleuthkit.datamodel.CommunicationsFilter.AccountTypeFilter;
48 import org.
sleuthkit.datamodel.CommunicationsFilter.DateRangeFilter;
49 import org.
sleuthkit.datamodel.CommunicationsFilter.DeviceFilter;
51 import static org.
sleuthkit.datamodel.Relationship.Type.CALL_LOG;
52 import static org.
sleuthkit.datamodel.Relationship.Type.MESSAGE;
60 @SuppressWarnings(
"PMD.SingularField")
63 private static final long serialVersionUID = 1L;
70 private final Map<Account.Type, JCheckBox> accountTypeMap = new HashMap<>();
76 private final Map<String, JCheckBox> devicesMap = new HashMap<>();
81 private final PropertyChangeListener ingestListener;
87 private
boolean needsRefresh;
94 private final ItemListener validationListener;
102 private
boolean deviceAccountTypeEnabled;
104 @NbBundle.Messages({
"refreshText=Refresh Results",
"applyText=Apply"})
107 deviceRequiredLabel.setVisible(
false);
108 accountTypeRequiredLabel.setVisible(
false);
109 startDatePicker.setDate(LocalDate.now().minusWeeks(3));
110 endDatePicker.setDateToToday();
111 startDatePicker.getSettings().setVetoPolicy(
113 startDate -> endCheckBox.isSelected() ==
false
114 || startDate.compareTo(endDatePicker.getDate()) <= 0
116 endDatePicker.getSettings().setVetoPolicy(
118 endDate -> startCheckBox.isSelected() ==
false
119 || endDate.compareTo(startDatePicker.getDate()) >= 0
123 validationListener = itemEvent -> validateFilters();
132 this.ingestListener = pce -> {
133 String eventType = pce.getPropertyName();
134 if (eventType.equals(DATA_ADDED.toString())) {
137 if (null != eventData
140 updateFilters(
false);
147 applyFiltersButton.addActionListener(e -> applyFilters());
148 refreshButton.addActionListener(e -> applyFilters());
158 boolean someDevice = devicesMap.values().stream().anyMatch(JCheckBox::isSelected);
159 boolean someAccountType = accountTypeMap.values().stream().anyMatch(JCheckBox::isSelected);
161 deviceRequiredLabel.setVisible(someDevice ==
false);
162 accountTypeRequiredLabel.setVisible(someAccountType ==
false);
164 applyFiltersButton.setEnabled(someDevice && someAccountType);
165 refreshButton.setEnabled(someDevice && someAccountType && needsRefresh);
166 needsRefreshLabel.setVisible(needsRefresh);
172 void updateAndApplyFilters(
boolean initialState) {
173 updateFilters(initialState);
178 dateRangeLabel.setText(
"Date Range ( " + Utils.getUserPreferredZoneId().toString() +
"):");
185 updateAccountTypeFilter();
186 updateDeviceFilter(initialState);
196 devicesPane.removeAll();
202 super.removeNotify();
216 Account.Type.PREDEFINED_ACCOUNT_TYPES.forEach(type -> {
217 if (type.equals(Account.Type.CREDIT_CARD)) {
220 accountTypeMap.computeIfAbsent(type, t -> {
221 final JCheckBox jCheckBox =
new JCheckBox(
222 "<html><table cellpadding=0><tr><td><img src=\""
223 +
FiltersPanel.class.getResource(Utils.getIconFilePath(type))
224 +
"\"/></td><td width=" + 3 +
"><td>" + type.getDisplayName() +
"</td></tr></table></html>",
227 jCheckBox.addItemListener(validationListener);
228 accountTypePane.add(jCheckBox);
229 if (t.equals(Account.Type.DEVICE)) {
231 jCheckBox.setEnabled(deviceAccountTypeEnabled);
246 for (DataSource dataSource : sleuthkitCase.getDataSources()) {
247 String dsName = sleuthkitCase.getContentById(dataSource.getId()).getName();
249 devicesMap.computeIfAbsent(dataSource.getDeviceId(), ds -> {
250 final JCheckBox jCheckBox =
new JCheckBox(dsName, initialState);
251 jCheckBox.addItemListener(validationListener);
252 devicesPane.add(jCheckBox);
257 logger.log(Level.INFO,
"Filter update cancelled. Case is closed.");
258 }
catch (TskCoreException tskCoreException) {
259 logger.log(Level.SEVERE,
"There was a error loading the datasources for the case.", tskCoreException);
268 @SuppressWarnings(
"unchecked")
270 private
void initComponents() {
272 applyFiltersButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/communications/images/tick.png")));
273 applyFiltersButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.applyFiltersButton.text"));
274 applyFiltersButton.setPreferredSize(null);
276 filtersTitleLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/communications/images/funnel.png")));
277 filtersTitleLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.filtersTitleLabel.text"));
279 unCheckAllAccountTypesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.unCheckAllAccountTypesButton.text"));
280 unCheckAllAccountTypesButton.addActionListener(
new java.awt.event.ActionListener() {
281 public void actionPerformed(java.awt.event.ActionEvent evt) {
282 unCheckAllAccountTypesButtonActionPerformed(evt);
286 accountTypesLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/accounts.png")));
287 accountTypesLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.accountTypesLabel.text"));
289 checkAllAccountTypesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.checkAllAccountTypesButton.text"));
290 checkAllAccountTypesButton.addActionListener(
new java.awt.event.ActionListener() {
291 public void actionPerformed(java.awt.event.ActionEvent evt) {
292 checkAllAccountTypesButtonActionPerformed(evt);
296 accountTypePane.setLayout(
new javax.swing.BoxLayout(accountTypePane, javax.swing.BoxLayout.Y_AXIS));
297 jScrollPane3.setViewportView(accountTypePane);
299 accountTypeRequiredLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/error-icon-16.png")));
300 accountTypeRequiredLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.accountTypeRequiredLabel.text"));
301 accountTypeRequiredLabel.setForeground(
new java.awt.Color(255, 0, 0));
302 accountTypeRequiredLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
304 javax.swing.GroupLayout jPanel2Layout =
new javax.swing.GroupLayout(jPanel2);
305 jPanel2.setLayout(jPanel2Layout);
306 jPanel2Layout.setHorizontalGroup(
307 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
308 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
309 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
310 .addGroup(jPanel2Layout.createSequentialGroup()
311 .addComponent(accountTypesLabel)
312 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
313 .addComponent(accountTypeRequiredLabel))
314 .addGroup(jPanel2Layout.createSequentialGroup()
316 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
317 .addComponent(jScrollPane3)
318 .addGroup(jPanel2Layout.createSequentialGroup()
319 .addGap(0, 0, Short.MAX_VALUE)
320 .addComponent(unCheckAllAccountTypesButton)
321 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
322 .addComponent(checkAllAccountTypesButton)))))
325 jPanel2Layout.setVerticalGroup(
326 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
327 .addGroup(jPanel2Layout.createSequentialGroup()
328 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
329 .addComponent(accountTypesLabel)
330 .addComponent(accountTypeRequiredLabel))
331 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
332 .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
333 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
334 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
335 .addComponent(checkAllAccountTypesButton)
336 .addComponent(unCheckAllAccountTypesButton)))
339 unCheckAllDevicesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.unCheckAllDevicesButton.text"));
340 unCheckAllDevicesButton.addActionListener(
new java.awt.event.ActionListener() {
341 public void actionPerformed(java.awt.event.ActionEvent evt) {
342 unCheckAllDevicesButtonActionPerformed(evt);
346 devicesLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/image.png")));
347 devicesLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.devicesLabel.text"));
349 checkAllDevicesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.checkAllDevicesButton.text"));
350 checkAllDevicesButton.addActionListener(
new java.awt.event.ActionListener() {
351 public void actionPerformed(java.awt.event.ActionEvent evt) {
352 checkAllDevicesButtonActionPerformed(evt);
356 jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
357 jScrollPane2.setMinimumSize(
new java.awt.Dimension(27, 75));
359 devicesPane.setMinimumSize(
new java.awt.Dimension(4, 100));
360 devicesPane.setLayout(
new javax.swing.BoxLayout(devicesPane, javax.swing.BoxLayout.Y_AXIS));
361 jScrollPane2.setViewportView(devicesPane);
363 deviceRequiredLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/error-icon-16.png")));
364 deviceRequiredLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.deviceRequiredLabel.text"));
365 deviceRequiredLabel.setForeground(
new java.awt.Color(255, 0, 0));
366 deviceRequiredLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
368 javax.swing.GroupLayout jPanel3Layout =
new javax.swing.GroupLayout(jPanel3);
369 jPanel3.setLayout(jPanel3Layout);
370 jPanel3Layout.setHorizontalGroup(
371 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
372 .addGroup(jPanel3Layout.createSequentialGroup()
373 .addComponent(devicesLabel)
374 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
375 .addComponent(deviceRequiredLabel))
376 .addGroup(jPanel3Layout.createSequentialGroup()
378 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
379 .addGroup(jPanel3Layout.createSequentialGroup()
380 .addGap(0, 0, Short.MAX_VALUE)
381 .addComponent(unCheckAllDevicesButton)
382 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
383 .addComponent(checkAllDevicesButton))
384 .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
386 jPanel3Layout.setVerticalGroup(
387 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
388 .addGroup(jPanel3Layout.createSequentialGroup()
389 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
390 .addComponent(devicesLabel)
391 .addComponent(deviceRequiredLabel))
392 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
393 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 94, Short.MAX_VALUE)
394 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
395 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
396 .addComponent(checkAllDevicesButton)
397 .addComponent(unCheckAllDevicesButton))
401 startDatePicker.setEnabled(
false);
403 dateRangeLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/calendar.png")));
404 dateRangeLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.dateRangeLabel.text"));
406 startCheckBox.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.startCheckBox.text"));
407 startCheckBox.addChangeListener(
new javax.swing.event.ChangeListener() {
408 public void stateChanged(javax.swing.event.ChangeEvent evt) {
409 startCheckBoxStateChanged(evt);
413 endCheckBox.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.endCheckBox.text"));
414 endCheckBox.addChangeListener(
new javax.swing.event.ChangeListener() {
415 public void stateChanged(javax.swing.event.ChangeEvent evt) {
416 endCheckBoxStateChanged(evt);
420 endDatePicker.setEnabled(
false);
422 javax.swing.GroupLayout jPanel4Layout =
new javax.swing.GroupLayout(jPanel4);
423 jPanel4.setLayout(jPanel4Layout);
424 jPanel4Layout.setHorizontalGroup(
425 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
426 .addGroup(jPanel4Layout.createSequentialGroup()
427 .addComponent(dateRangeLabel)
428 .addGap(0, 0, Short.MAX_VALUE))
429 .addGroup(jPanel4Layout.createSequentialGroup()
431 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
432 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
433 .addComponent(endCheckBox)
435 .addComponent(endDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
436 .addGroup(jPanel4Layout.createSequentialGroup()
437 .addComponent(startCheckBox)
439 .addComponent(startDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
442 jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {endCheckBox, startCheckBox});
444 jPanel4Layout.setVerticalGroup(
445 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
446 .addGroup(jPanel4Layout.createSequentialGroup()
447 .addComponent(dateRangeLabel)
449 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
450 .addComponent(startDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
451 .addComponent(startCheckBox))
452 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
453 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
454 .addComponent(endDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
455 .addComponent(endCheckBox)))
458 refreshButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/communications/images/arrow-circle-double-135.png")));
459 refreshButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.refreshButton.text"));
461 needsRefreshLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.needsRefreshLabel.text"));
462 needsRefreshLabel.setForeground(
new java.awt.Color(255, 0, 0));
464 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
465 this.setLayout(layout);
466 layout.setHorizontalGroup(
467 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
468 .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
469 .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
470 .addGroup(layout.createSequentialGroup()
471 .addComponent(filtersTitleLabel)
472 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
473 .addComponent(applyFiltersButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
474 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
475 .addComponent(refreshButton))
476 .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
477 .addGroup(layout.createSequentialGroup()
479 .addComponent(needsRefreshLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
481 layout.setVerticalGroup(
482 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
483 .addGroup(layout.createSequentialGroup()
485 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
486 .addComponent(filtersTitleLabel)
487 .addComponent(applyFiltersButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
488 .addComponent(refreshButton))
489 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
490 .addComponent(needsRefreshLabel)
492 .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
494 .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
496 .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
497 .addContainerGap(19, Short.MAX_VALUE))
505 CVTEvents.getCVTEventBus().post(
new CVTEvents.FilterChangeEvent(getFilter()));
506 needsRefresh =
false;
511 CommunicationsFilter commsFilter =
new CommunicationsFilter();
512 commsFilter.addAndFilter(getDeviceFilter());
513 commsFilter.addAndFilter(getAccountTypeFilter());
514 commsFilter.addAndFilter(getDateRangeFilter());
515 commsFilter.addAndFilter(
new CommunicationsFilter.RelationshipTypeFilter(
516 ImmutableSet.of(CALL_LOG, MESSAGE)));
526 DeviceFilter deviceFilter =
new DeviceFilter(
527 devicesMap.entrySet().stream()
528 .filter(entry -> entry.getValue().isSelected())
530 .collect(Collectors.toSet()));
540 AccountTypeFilter accountTypeFilter =
new AccountTypeFilter(
541 accountTypeMap.entrySet().stream()
542 .filter(entry -> entry.getValue().isSelected())
543 .map(entry -> entry.getKey())
544 .collect(Collectors.toSet()));
545 return accountTypeFilter;
554 ZoneId zone = Utils.getUserPreferredZoneId();
555 long start = startDatePicker.isEnabled() ? startDatePicker.getDate().atStartOfDay(zone).toEpochSecond() : 0;
556 long end = endDatePicker.isEnabled() ? endDatePicker.getDate().atStartOfDay(zone).toEpochSecond() : 0;
557 return new DateRangeFilter(start, end);
567 void setDeviceAccountTypeEnabled(
boolean enable) {
568 deviceAccountTypeEnabled = enable;
569 JCheckBox deviceCheckbox = accountTypeMap.get(Account.Type.DEVICE);
570 if (deviceCheckbox != null) {
571 deviceCheckbox.setEnabled(deviceAccountTypeEnabled);
580 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
581 private
void setAllAccountTypesSelected(
boolean selected) {
582 setAllSelected(accountTypeMap, selected);
591 private
void setAllDevicesSelected(
boolean selected) {
592 setAllSelected(devicesMap, selected);
603 private
void setAllSelected(Map<?, JCheckBox> map,
boolean selected) {
604 map.values().forEach(box -> box.setSelected(selected));
608 setAllAccountTypesSelected(
false);
612 setAllAccountTypesSelected(
true);
616 setAllDevicesSelected(
false);
620 setAllDevicesSelected(
true);
624 startDatePicker.setEnabled(startCheckBox.isSelected());
628 endDatePicker.setEnabled(endCheckBox.isSelected());
633 private final javax.swing.JPanel accountTypePane =
new javax.swing.JPanel();
634 private final javax.swing.JLabel accountTypeRequiredLabel =
new javax.swing.JLabel();
635 private final javax.swing.JLabel accountTypesLabel =
new javax.swing.JLabel();
636 private final javax.swing.JButton applyFiltersButton =
new javax.swing.JButton();
637 private final javax.swing.JButton checkAllAccountTypesButton =
new javax.swing.JButton();
638 private final javax.swing.JButton checkAllDevicesButton =
new javax.swing.JButton();
639 private final javax.swing.JLabel dateRangeLabel =
new javax.swing.JLabel();
640 private final javax.swing.JLabel deviceRequiredLabel =
new javax.swing.JLabel();
641 private final javax.swing.JLabel devicesLabel =
new javax.swing.JLabel();
642 private final javax.swing.JPanel devicesPane =
new javax.swing.JPanel();
643 private final javax.swing.JCheckBox endCheckBox =
new javax.swing.JCheckBox();
644 private final com.github.lgooddatepicker.components.DatePicker endDatePicker =
new com.github.lgooddatepicker.components.DatePicker();
645 private final javax.swing.JLabel filtersTitleLabel =
new javax.swing.JLabel();
646 private final javax.swing.JPanel jPanel2 =
new javax.swing.JPanel();
647 private final javax.swing.JPanel jPanel3 =
new javax.swing.JPanel();
648 private final javax.swing.JPanel jPanel4 =
new javax.swing.JPanel();
649 private final javax.swing.JScrollPane jScrollPane2 =
new javax.swing.JScrollPane();
650 private final javax.swing.JScrollPane jScrollPane3 =
new javax.swing.JScrollPane();
651 private final javax.swing.JLabel needsRefreshLabel =
new javax.swing.JLabel();
652 private final javax.swing.JButton refreshButton =
new javax.swing.JButton();
653 private final javax.swing.JCheckBox startCheckBox =
new javax.swing.JCheckBox();
654 private final com.github.lgooddatepicker.components.DatePicker startDatePicker =
new com.github.lgooddatepicker.components.DatePicker();
655 private final javax.swing.JButton unCheckAllAccountTypesButton =
new javax.swing.JButton();
656 private final javax.swing.JButton unCheckAllDevicesButton =
new javax.swing.JButton();
BlackboardArtifact.Type getBlackboardArtifactType()
void unCheckAllDevicesButtonActionPerformed(java.awt.event.ActionEvent evt)
void removeIngestModuleEventListener(final PropertyChangeListener listener)
static synchronized IngestManager getInstance()
void unCheckAllAccountTypesButtonActionPerformed(java.awt.event.ActionEvent evt)
void endCheckBoxStateChanged(javax.swing.event.ChangeEvent evt)
void updateFilters(boolean initialState)
void startCheckBoxStateChanged(javax.swing.event.ChangeEvent evt)
static final String DISPLAY_TIMES_IN_LOCAL_TIME
CommunicationsFilter getFilter()
SleuthkitCase getSleuthkitCase()
void checkAllAccountTypesButtonActionPerformed(java.awt.event.ActionEvent evt)
void updateDeviceFilter(boolean initialState)
void addIngestModuleEventListener(final PropertyChangeListener listener)
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
static void addChangeListener(PreferenceChangeListener listener)
void checkAllDevicesButtonActionPerformed(java.awt.event.ActionEvent evt)
DeviceFilter getDeviceFilter()
DateRangeFilter getDateRangeFilter()
AccountTypeFilter getAccountTypeFilter()
void updateAccountTypeFilter()