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();
133 this.ingestListener = pce -> {
134 String eventType = pce.getPropertyName();
135 if (eventType.equals(DATA_ADDED.toString())) {
138 if (null != eventData
141 updateFilters(
false);
148 applyFiltersButton.addActionListener(e -> applyFilters());
149 refreshButton.addActionListener(e -> applyFilters());
159 boolean someDevice = devicesMap.values().stream().anyMatch(JCheckBox::isSelected);
160 boolean someAccountType = accountTypeMap.values().stream().anyMatch(JCheckBox::isSelected);
162 deviceRequiredLabel.setVisible(someDevice ==
false);
163 accountTypeRequiredLabel.setVisible(someAccountType ==
false);
165 applyFiltersButton.setEnabled(someDevice && someAccountType);
166 refreshButton.setEnabled(someDevice && someAccountType && needsRefresh);
167 needsRefreshLabel.setVisible(needsRefresh);
173 void updateAndApplyFilters(
boolean initialState) {
174 updateFilters(initialState);
179 dateRangeLabel.setText(
"Date Range (" + Utils.getUserPreferredZoneId().toString() +
"):");
186 updateAccountTypeFilter();
187 updateDeviceFilter(initialState);
197 devicesPane.removeAll();
203 super.removeNotify();
217 Account.Type.PREDEFINED_ACCOUNT_TYPES.forEach(type -> {
218 if (type.equals(Account.Type.CREDIT_CARD)) {
221 accountTypeMap.computeIfAbsent(type, t -> {
222 final JCheckBox jCheckBox =
new JCheckBox(
223 "<html><table cellpadding=0><tr><td><img src=\""
224 +
FiltersPanel.class.getResource(Utils.getIconFilePath(type))
225 +
"\"/></td><td width=" + 3 +
"><td>" + type.getDisplayName() +
"</td></tr></table></html>",
228 jCheckBox.addItemListener(validationListener);
229 accountTypePane.add(jCheckBox);
230 if (t.equals(Account.Type.DEVICE)) {
232 jCheckBox.setEnabled(deviceAccountTypeEnabled);
247 for (DataSource dataSource : sleuthkitCase.getDataSources()) {
248 String dsName = sleuthkitCase.getContentById(dataSource.getId()).getName();
250 devicesMap.computeIfAbsent(dataSource.getDeviceId(), ds -> {
251 final JCheckBox jCheckBox =
new JCheckBox(dsName, initialState);
252 jCheckBox.addItemListener(validationListener);
253 devicesPane.add(jCheckBox);
258 logger.log(Level.INFO,
"Filter update cancelled. Case is closed.");
259 }
catch (TskCoreException tskCoreException) {
260 logger.log(Level.SEVERE,
"There was a error loading the datasources for the case.", tskCoreException);
269 @SuppressWarnings(
"unchecked")
271 private
void initComponents() {
273 applyFiltersButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/communications/images/tick.png")));
274 applyFiltersButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.applyFiltersButton.text"));
275 applyFiltersButton.setPreferredSize(null);
277 filtersTitleLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/communications/images/funnel.png")));
278 filtersTitleLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.filtersTitleLabel.text"));
280 unCheckAllAccountTypesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.unCheckAllAccountTypesButton.text"));
281 unCheckAllAccountTypesButton.addActionListener(
new java.awt.event.ActionListener() {
282 public void actionPerformed(java.awt.event.ActionEvent evt) {
283 unCheckAllAccountTypesButtonActionPerformed(evt);
287 accountTypesLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/accounts.png")));
288 accountTypesLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.accountTypesLabel.text"));
290 checkAllAccountTypesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.checkAllAccountTypesButton.text"));
291 checkAllAccountTypesButton.addActionListener(
new java.awt.event.ActionListener() {
292 public void actionPerformed(java.awt.event.ActionEvent evt) {
293 checkAllAccountTypesButtonActionPerformed(evt);
297 accountTypePane.setLayout(
new javax.swing.BoxLayout(accountTypePane, javax.swing.BoxLayout.Y_AXIS));
298 jScrollPane3.setViewportView(accountTypePane);
300 accountTypeRequiredLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/error-icon-16.png")));
301 accountTypeRequiredLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.accountTypeRequiredLabel.text"));
302 accountTypeRequiredLabel.setForeground(
new java.awt.Color(255, 0, 0));
303 accountTypeRequiredLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
305 javax.swing.GroupLayout jPanel2Layout =
new javax.swing.GroupLayout(jPanel2);
306 jPanel2.setLayout(jPanel2Layout);
307 jPanel2Layout.setHorizontalGroup(
308 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
309 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
310 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
311 .addGroup(jPanel2Layout.createSequentialGroup()
312 .addComponent(accountTypesLabel)
313 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
314 .addComponent(accountTypeRequiredLabel))
315 .addGroup(jPanel2Layout.createSequentialGroup()
317 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
318 .addComponent(jScrollPane3)
319 .addGroup(jPanel2Layout.createSequentialGroup()
320 .addGap(0, 0, Short.MAX_VALUE)
321 .addComponent(unCheckAllAccountTypesButton)
322 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
323 .addComponent(checkAllAccountTypesButton)))))
326 jPanel2Layout.setVerticalGroup(
327 jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
328 .addGroup(jPanel2Layout.createSequentialGroup()
329 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
330 .addComponent(accountTypesLabel)
331 .addComponent(accountTypeRequiredLabel))
332 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
333 .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
334 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
335 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
336 .addComponent(checkAllAccountTypesButton)
337 .addComponent(unCheckAllAccountTypesButton)))
340 unCheckAllDevicesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.unCheckAllDevicesButton.text"));
341 unCheckAllDevicesButton.addActionListener(
new java.awt.event.ActionListener() {
342 public void actionPerformed(java.awt.event.ActionEvent evt) {
343 unCheckAllDevicesButtonActionPerformed(evt);
347 devicesLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/image.png")));
348 devicesLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.devicesLabel.text"));
350 checkAllDevicesButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.checkAllDevicesButton.text"));
351 checkAllDevicesButton.addActionListener(
new java.awt.event.ActionListener() {
352 public void actionPerformed(java.awt.event.ActionEvent evt) {
353 checkAllDevicesButtonActionPerformed(evt);
357 jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
358 jScrollPane2.setMinimumSize(
new java.awt.Dimension(27, 75));
360 devicesPane.setMinimumSize(
new java.awt.Dimension(4, 100));
361 devicesPane.setLayout(
new javax.swing.BoxLayout(devicesPane, javax.swing.BoxLayout.Y_AXIS));
362 jScrollPane2.setViewportView(devicesPane);
364 deviceRequiredLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/error-icon-16.png")));
365 deviceRequiredLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.deviceRequiredLabel.text"));
366 deviceRequiredLabel.setForeground(
new java.awt.Color(255, 0, 0));
367 deviceRequiredLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
369 javax.swing.GroupLayout jPanel3Layout =
new javax.swing.GroupLayout(jPanel3);
370 jPanel3.setLayout(jPanel3Layout);
371 jPanel3Layout.setHorizontalGroup(
372 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
373 .addGroup(jPanel3Layout.createSequentialGroup()
374 .addComponent(devicesLabel)
375 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
376 .addComponent(deviceRequiredLabel))
377 .addGroup(jPanel3Layout.createSequentialGroup()
379 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
380 .addGroup(jPanel3Layout.createSequentialGroup()
381 .addGap(0, 0, Short.MAX_VALUE)
382 .addComponent(unCheckAllDevicesButton)
383 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
384 .addComponent(checkAllDevicesButton))
385 .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
387 jPanel3Layout.setVerticalGroup(
388 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
389 .addGroup(jPanel3Layout.createSequentialGroup()
390 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
391 .addComponent(devicesLabel)
392 .addComponent(deviceRequiredLabel))
393 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
394 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 94, Short.MAX_VALUE)
395 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
396 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
397 .addComponent(checkAllDevicesButton)
398 .addComponent(unCheckAllDevicesButton))
402 startDatePicker.setEnabled(
false);
404 dateRangeLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/calendar.png")));
405 dateRangeLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.dateRangeLabel.text"));
407 startCheckBox.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.startCheckBox.text"));
408 startCheckBox.addChangeListener(
new javax.swing.event.ChangeListener() {
409 public void stateChanged(javax.swing.event.ChangeEvent evt) {
410 startCheckBoxStateChanged(evt);
414 endCheckBox.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.endCheckBox.text"));
415 endCheckBox.addChangeListener(
new javax.swing.event.ChangeListener() {
416 public void stateChanged(javax.swing.event.ChangeEvent evt) {
417 endCheckBoxStateChanged(evt);
421 endDatePicker.setEnabled(
false);
423 javax.swing.GroupLayout jPanel4Layout =
new javax.swing.GroupLayout(jPanel4);
424 jPanel4.setLayout(jPanel4Layout);
425 jPanel4Layout.setHorizontalGroup(
426 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
427 .addGroup(jPanel4Layout.createSequentialGroup()
428 .addComponent(dateRangeLabel)
429 .addGap(0, 0, Short.MAX_VALUE))
430 .addGroup(jPanel4Layout.createSequentialGroup()
432 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
433 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
434 .addComponent(endCheckBox)
436 .addComponent(endDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
437 .addGroup(jPanel4Layout.createSequentialGroup()
438 .addComponent(startCheckBox)
440 .addComponent(startDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
443 jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {endCheckBox, startCheckBox});
445 jPanel4Layout.setVerticalGroup(
446 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
447 .addGroup(jPanel4Layout.createSequentialGroup()
448 .addComponent(dateRangeLabel)
450 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
451 .addComponent(startDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
452 .addComponent(startCheckBox))
453 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
454 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
455 .addComponent(endDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
456 .addComponent(endCheckBox)))
459 refreshButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/communications/images/arrow-circle-double-135.png")));
460 refreshButton.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.refreshButton.text"));
462 needsRefreshLabel.setText(
org.openide.util.NbBundle.getMessage(
FiltersPanel.class,
"FiltersPanel.needsRefreshLabel.text"));
463 needsRefreshLabel.setForeground(
new java.awt.Color(255, 0, 0));
465 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
466 this.setLayout(layout);
467 layout.setHorizontalGroup(
468 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
469 .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
470 .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
471 .addGroup(layout.createSequentialGroup()
472 .addComponent(filtersTitleLabel)
473 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
474 .addComponent(applyFiltersButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
475 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
476 .addComponent(refreshButton))
477 .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
478 .addGroup(layout.createSequentialGroup()
480 .addComponent(needsRefreshLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
482 layout.setVerticalGroup(
483 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
484 .addGroup(layout.createSequentialGroup()
486 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
487 .addComponent(filtersTitleLabel)
488 .addComponent(applyFiltersButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
489 .addComponent(refreshButton))
490 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
491 .addComponent(needsRefreshLabel)
493 .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
495 .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
497 .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
498 .addContainerGap(19, Short.MAX_VALUE))
506 CVTEvents.getCVTEventBus().post(
new CVTEvents.FilterChangeEvent(getFilter()));
507 needsRefresh =
false;
512 CommunicationsFilter commsFilter =
new CommunicationsFilter();
513 commsFilter.addAndFilter(getDeviceFilter());
514 commsFilter.addAndFilter(getAccountTypeFilter());
515 commsFilter.addAndFilter(getDateRangeFilter());
516 commsFilter.addAndFilter(
new CommunicationsFilter.RelationshipTypeFilter(
517 ImmutableSet.of(CALL_LOG, MESSAGE)));
527 DeviceFilter deviceFilter =
new DeviceFilter(
528 devicesMap.entrySet().stream()
529 .filter(entry -> entry.getValue().isSelected())
531 .collect(Collectors.toSet()));
541 AccountTypeFilter accountTypeFilter =
new AccountTypeFilter(
542 accountTypeMap.entrySet().stream()
543 .filter(entry -> entry.getValue().isSelected())
544 .map(entry -> entry.getKey())
545 .collect(Collectors.toSet()));
546 return accountTypeFilter;
555 ZoneId zone = Utils.getUserPreferredZoneId();
556 long start = startDatePicker.isEnabled() ? startDatePicker.getDate().atStartOfDay(zone).toEpochSecond() : 0;
557 long end = endDatePicker.isEnabled() ? endDatePicker.getDate().atStartOfDay(zone).toEpochSecond() : 0;
558 return new DateRangeFilter(start, end);
568 void setDeviceAccountTypeEnabled(
boolean enable) {
569 deviceAccountTypeEnabled = enable;
570 JCheckBox deviceCheckbox = accountTypeMap.get(Account.Type.DEVICE);
571 if (deviceCheckbox != null) {
572 deviceCheckbox.setEnabled(deviceAccountTypeEnabled);
581 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
582 private
void setAllAccountTypesSelected(
boolean selected) {
583 setAllSelected(accountTypeMap, selected);
592 private
void setAllDevicesSelected(
boolean selected) {
593 setAllSelected(devicesMap, selected);
604 private
void setAllSelected(Map<?, JCheckBox> map,
boolean selected) {
605 map.values().forEach(box -> box.setSelected(selected));
609 setAllAccountTypesSelected(
false);
613 setAllAccountTypesSelected(
true);
617 setAllDevicesSelected(
false);
621 setAllDevicesSelected(
true);
625 startDatePicker.setEnabled(startCheckBox.isSelected());
629 endDatePicker.setEnabled(endCheckBox.isSelected());
634 private final javax.swing.JPanel accountTypePane =
new javax.swing.JPanel();
635 private final javax.swing.JLabel accountTypeRequiredLabel =
new javax.swing.JLabel();
636 private final javax.swing.JLabel accountTypesLabel =
new javax.swing.JLabel();
637 private final javax.swing.JButton applyFiltersButton =
new javax.swing.JButton();
638 private final javax.swing.JButton checkAllAccountTypesButton =
new javax.swing.JButton();
639 private final javax.swing.JButton checkAllDevicesButton =
new javax.swing.JButton();
640 private final javax.swing.JLabel dateRangeLabel =
new javax.swing.JLabel();
641 private final javax.swing.JLabel deviceRequiredLabel =
new javax.swing.JLabel();
642 private final javax.swing.JLabel devicesLabel =
new javax.swing.JLabel();
643 private final javax.swing.JPanel devicesPane =
new javax.swing.JPanel();
644 private final javax.swing.JCheckBox endCheckBox =
new javax.swing.JCheckBox();
645 private final com.github.lgooddatepicker.components.DatePicker endDatePicker =
new com.github.lgooddatepicker.components.DatePicker();
646 private final javax.swing.JLabel filtersTitleLabel =
new javax.swing.JLabel();
647 private final javax.swing.JPanel jPanel2 =
new javax.swing.JPanel();
648 private final javax.swing.JPanel jPanel3 =
new javax.swing.JPanel();
649 private final javax.swing.JPanel jPanel4 =
new javax.swing.JPanel();
650 private final javax.swing.JScrollPane jScrollPane2 =
new javax.swing.JScrollPane();
651 private final javax.swing.JScrollPane jScrollPane3 =
new javax.swing.JScrollPane();
652 private final javax.swing.JLabel needsRefreshLabel =
new javax.swing.JLabel();
653 private final javax.swing.JButton refreshButton =
new javax.swing.JButton();
654 private final javax.swing.JCheckBox startCheckBox =
new javax.swing.JCheckBox();
655 private final com.github.lgooddatepicker.components.DatePicker startDatePicker =
new com.github.lgooddatepicker.components.DatePicker();
656 private final javax.swing.JButton unCheckAllAccountTypesButton =
new javax.swing.JButton();
657 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()
static final String TIME_ZONE_FOR_DISPLAYS