From 47453a5b899bf20be577dcd8517c729a843d1dbb Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 3 Sep 2020 09:55:02 -0400 Subject: [PATCH 01/27] 6714 fix listener, validation, and enabling of filters --- .../discovery/ui/ArtifactTypeFilterPanel.form | 5 +- .../discovery/ui/ArtifactTypeFilterPanel.java | 29 +++++++-- .../autopsy/discovery/ui/Bundle.properties | 2 +- .../discovery/ui/Bundle.properties-MERGED | 2 +- .../autopsy/discovery/ui/DateFilterPanel.form | 16 +++-- .../autopsy/discovery/ui/DateFilterPanel.java | 59 ++++++++++++++----- .../autopsy/discovery/ui/DiscoveryDialog.java | 10 ++-- 7 files changed, 89 insertions(+), 34 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.form index d269dc7d15..e0d00591cc 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.form @@ -8,6 +8,9 @@ + + + @@ -49,7 +52,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java index eba7fbe1f1..aca79c056c 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java @@ -47,7 +47,7 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { */ private void setUpArtifactTypeFilter() { int count = 0; - DefaultListModel artifactTypeModel = (DefaultListModel) jList1.getModel(); + DefaultListModel artifactTypeModel = (DefaultListModel) artifactList.getModel(); artifactTypeModel.removeAllElements(); for (BlackboardArtifact.ARTIFACT_TYPE artifactType : SearchData.Type.DOMAIN.getArtifactTypes()) { artifactTypeModel.add(count, new ArtifactTypeItem(artifactType)); @@ -66,17 +66,22 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { artifactTypeCheckbox = new javax.swing.JCheckBox(); artifactTypeScrollPane = new javax.swing.JScrollPane(); - jList1 = new javax.swing.JList<>(); + artifactList = new javax.swing.JList<>(); org.openide.awt.Mnemonics.setLocalizedText(artifactTypeCheckbox, org.openide.util.NbBundle.getMessage(ArtifactTypeFilterPanel.class, "ArtifactTypeFilterPanel.artifactTypeCheckbox.text")); // NOI18N + artifactTypeCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + artifactTypeCheckboxActionPerformed(evt); + } + }); setPreferredSize(new java.awt.Dimension(27, 27)); artifactTypeScrollPane.setPreferredSize(new java.awt.Dimension(27, 27)); - jList1.setModel(new DefaultListModel()); - jList1.setEnabled(false); - artifactTypeScrollPane.setViewportView(jList1); + artifactList.setModel(new DefaultListModel()); + artifactList.setEnabled(false); + artifactTypeScrollPane.setViewportView(artifactList); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -90,9 +95,21 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { ); }// //GEN-END:initComponents + private void artifactTypeCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_artifactTypeCheckboxActionPerformed + artifactTypeScrollPane.setEnabled(artifactTypeCheckbox.isSelected()); + artifactList.setEnabled(artifactTypeCheckbox.isSelected()); + }//GEN-LAST:event_artifactTypeCheckboxActionPerformed + @Override void configurePanel(boolean selected, int[] indicesSelected) { artifactTypeCheckbox.setSelected(selected); + if (artifactTypeCheckbox.isEnabled() && artifactTypeCheckbox.isSelected()) { + artifactTypeScrollPane.setEnabled(true); + artifactList.setEnabled(true); + } else { + artifactTypeScrollPane.setEnabled(false); + artifactList.setEnabled(false); + } } @Override @@ -153,8 +170,8 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { } // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JList artifactList; private javax.swing.JCheckBox artifactTypeCheckbox; private javax.swing.JScrollPane artifactTypeScrollPane; - private javax.swing.JList jList1; // End of variables declaration//GEN-END:variables } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties index faa0025da5..6e0553c5ea 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties @@ -39,7 +39,6 @@ SizeFilterPanel.sizeCheckbox.text=File Size: DateFilterPanel.dateFilterCheckbox.text=Date Filter: DateFilterPanel.endCheckBox.text=End: DateFilterPanel.startCheckBox.text=Start: -DateFilterPanel.mostRecentButton.text=Only last: DateFilterPanel.daysLabel.text=days of activity ImageThumbnailPanel.isDeletedLabel.toolTipText= ResultsPanel.pageControlsLabel.text=Pages: @@ -54,3 +53,4 @@ PastOccurrencesFilterPanel.pastOccurrencesCheckbox.text=Past Occurrences: DocumentFilterPanel.documentsFiltersSplitPane.border.title=Step 2: Filter which documents to show ObjectDetectedFilterPanel.text=Object Detected: DetailsPanel.instancesList.border.title=Instances +DateFilterPanel.mostRecentRadioButton.text=Only last: diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED index 1e9224cf9b..1c202fbc4a 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED @@ -93,7 +93,6 @@ SizeFilterPanel.sizeCheckbox.text=File Size: DateFilterPanel.dateFilterCheckbox.text=Date Filter: DateFilterPanel.endCheckBox.text=End: DateFilterPanel.startCheckBox.text=Start: -DateFilterPanel.mostRecentButton.text=Only last: DateFilterPanel.daysLabel.text=days of activity ImageThumbnailPanel.isDeletedLabel.toolTipText= ResultsPanel.pageControlsLabel.text=Pages: @@ -108,6 +107,7 @@ PastOccurrencesFilterPanel.pastOccurrencesCheckbox.text=Past Occurrences: DocumentFilterPanel.documentsFiltersSplitPane.border.title=Step 2: Filter which documents to show ObjectDetectedFilterPanel.text=Object Detected: DetailsPanel.instancesList.border.title=Instances +DateFilterPanel.mostRecentRadioButton.text=Only last: VideoThumbnailPanel.bytes.text=bytes VideoThumbnailPanel.deleted.text=All instances of file are deleted. VideoThumbnailPanel.gigaBytes.text=GB diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form index 6801b3f579..2728d1a822 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form @@ -10,6 +10,9 @@ + + + @@ -51,7 +54,7 @@ - + @@ -76,7 +79,7 @@ - + @@ -104,6 +107,9 @@ + + + @@ -117,18 +123,18 @@ - + - + - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index cf78c5fe7d..ca8b9ca96d 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -60,7 +60,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { jPanel1 = new javax.swing.JPanel(); daysSpinner = new javax.swing.JSpinner(numberModel); daysLabel = new javax.swing.JLabel(); - mostRecentButton = new javax.swing.JRadioButton(); + mostRecentRadioButton = new javax.swing.JRadioButton(); startCheckBox = new javax.swing.JCheckBox(); startDatePicker = new com.github.lgooddatepicker.components.DatePicker(); endDatePicker = new com.github.lgooddatepicker.components.DatePicker(); @@ -68,19 +68,25 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { rangeRadioButton = new javax.swing.JRadioButton(); org.openide.awt.Mnemonics.setLocalizedText(dateFilterCheckbox, org.openide.util.NbBundle.getMessage(DateFilterPanel.class, "DateFilterPanel.dateFilterCheckbox.text")); // NOI18N + dateFilterCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + dateFilterCheckboxActionPerformed(evt); + } + }); daysSpinner.setEnabled(false); daysSpinner.setPreferredSize(new java.awt.Dimension(75, 26)); + daysSpinner.setValue(7); org.openide.awt.Mnemonics.setLocalizedText(daysLabel, org.openide.util.NbBundle.getMessage(DateFilterPanel.class, "DateFilterPanel.daysLabel.text")); // NOI18N daysLabel.setEnabled(false); - buttonGroup1.add(mostRecentButton); - org.openide.awt.Mnemonics.setLocalizedText(mostRecentButton, org.openide.util.NbBundle.getMessage(DateFilterPanel.class, "DateFilterPanel.mostRecentButton.text")); // NOI18N - mostRecentButton.setEnabled(false); - mostRecentButton.addActionListener(new java.awt.event.ActionListener() { + buttonGroup1.add(mostRecentRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(mostRecentRadioButton, org.openide.util.NbBundle.getMessage(DateFilterPanel.class, "DateFilterPanel.mostRecentRadioButton.text")); // NOI18N + mostRecentRadioButton.setEnabled(false); + mostRecentRadioButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - mostRecentButtonActionPerformed(evt); + mostRecentRadioButtonActionPerformed(evt); } }); @@ -121,7 +127,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(mostRecentButton, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(mostRecentRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(daysSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -141,7 +147,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(mostRecentButton) + .addComponent(mostRecentRadioButton) .addComponent(daysSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(daysLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) @@ -177,25 +183,48 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { private void startCheckBoxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_startCheckBoxStateChanged startDatePicker.setEnabled(startCheckBox.isSelected()); -// validateFilters(); //TODO JIRA-6714 when search will begin doing something }//GEN-LAST:event_startCheckBoxStateChanged private void endCheckBoxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_endCheckBoxStateChanged endDatePicker.setEnabled(endCheckBox.isSelected()); -// validateFilters(); //TODO JIRA-6714 when search will begin doing something }//GEN-LAST:event_endCheckBoxStateChanged - private void mostRecentButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mostRecentButtonActionPerformed - - }//GEN-LAST:event_mostRecentButtonActionPerformed + private void mostRecentRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mostRecentRadioButtonActionPerformed + startCheckBox.setEnabled(false); + endCheckBox.setEnabled(false); + daysSpinner.setEnabled(true); + daysLabel.setEnabled(true); + }//GEN-LAST:event_mostRecentRadioButtonActionPerformed private void rangeRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rangeRadioButtonActionPerformed - // TODO add your handling code here: + startCheckBox.setEnabled(true); + endCheckBox.setEnabled(true); + daysSpinner.setEnabled(false); + daysLabel.setEnabled(false); }//GEN-LAST:event_rangeRadioButtonActionPerformed + private void dateFilterCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dateFilterCheckboxActionPerformed + mostRecentRadioButton.setEnabled(dateFilterCheckbox.isSelected()); + rangeRadioButton.setEnabled(dateFilterCheckbox.isSelected()); + }//GEN-LAST:event_dateFilterCheckboxActionPerformed + @Override void configurePanel(boolean selected, int[] indicesSelected) { dateFilterCheckbox.setSelected(selected); + if (dateFilterCheckbox.isEnabled() && dateFilterCheckbox.isSelected()) { + mostRecentRadioButton.setEnabled(true); + rangeRadioButton.setEnabled(true); + mostRecentRadioButton.setSelected(true); + } else { + mostRecentRadioButton.setEnabled(false); + rangeRadioButton.setEnabled(false); + daysLabel.setEnabled(false); + daysSpinner.setEnabled(false); + startCheckBox.setEnabled(false); + endCheckBox.setEnabled(false); + startDatePicker.setEnabled(false); + endDatePicker.setEnabled(false); + } } @Override @@ -232,7 +261,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { private javax.swing.JCheckBox endCheckBox; private com.github.lgooddatepicker.components.DatePicker endDatePicker; private javax.swing.JPanel jPanel1; - private javax.swing.JRadioButton mostRecentButton; + private javax.swing.JRadioButton mostRecentRadioButton; private javax.swing.JRadioButton rangeRadioButton; private javax.swing.JCheckBox startCheckBox; private com.github.lgooddatepicker.components.DatePicker startDatePicker; diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index e76e202eb3..94e41c8cf2 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -512,6 +512,10 @@ final class DiscoveryDialog extends javax.swing.JDialog { remove(imageFilterPanel); imageFilterPanel.removePropertyChangeListener(listener); } + if (domainFilterPanel != null) { + remove(domainFilterPanel); + domainFilterPanel.removePropertyChangeListener(listener); + } if (documentFilterPanel != null) { remove(documentFilterPanel); documentFilterPanel.removePropertyChangeListener(listener); @@ -520,10 +524,6 @@ final class DiscoveryDialog extends javax.swing.JDialog { remove(videoFilterPanel); videoFilterPanel.removePropertyChangeListener(listener); } - if (domainFilterPanel != null) { - remove(domainFilterPanel); - domainFilterPanel.removePropertyChangeListener(listener); - } } private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed @@ -584,7 +584,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { domainsButton.setBackground(SELECTED_COLOR); domainsButton.setForeground(Color.BLACK); type = SearchData.Type.DOMAIN; - documentFilterPanel.addPropertyChangeListener(listener); + domainFilterPanel.addPropertyChangeListener(listener); validateDialog(); pack(); repaint(); From 93691e3979572a252e1cdd6860af2e921ee0ba3a Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 9 Sep 2020 06:54:41 -0400 Subject: [PATCH 02/27] 6714 fix more bugs with UI use --- .../discovery/ui/ArtifactTypeFilterPanel.java | 10 ++- .../autopsy/discovery/ui/Bundle.properties | 2 +- .../autopsy/discovery/ui/DateFilterPanel.form | 8 ++- .../autopsy/discovery/ui/DateFilterPanel.java | 72 ++++++++++--------- 4 files changed, 54 insertions(+), 38 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java index aca79c056c..4d80b68e2b 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java @@ -106,6 +106,9 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { if (artifactTypeCheckbox.isEnabled() && artifactTypeCheckbox.isSelected()) { artifactTypeScrollPane.setEnabled(true); artifactList.setEnabled(true); + if (indicesSelected != null) { + artifactList.setSelectedIndices(indicesSelected); + } } else { artifactTypeScrollPane.setEnabled(false); artifactList.setEnabled(false); @@ -119,7 +122,7 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { @Override JList getList() { - return null; + return artifactList; } @Override @@ -129,7 +132,10 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { @Override String checkForError() { - return "Domain search is not implemented."; + if (artifactTypeCheckbox.isSelected() && artifactList.getSelectedValuesList().isEmpty()) { + return "At least one Result type must be selected."; + } + return ""; } @Override diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties index 6e0553c5ea..90bf2dd504 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties @@ -29,7 +29,7 @@ ResultsSplitPaneDivider.showButton.text= ResultsSplitPaneDivider.hideButton.text= ImageFilterPanel.imageFiltersSplitPane.toolTipText= ImageFilterPanel.imageFiltersSplitPane.border.title=Step 2: Filter which images to show -ArtifactTypeFilterPanel.artifactTypeCheckbox.text=Artifact Type: +ArtifactTypeFilterPanel.artifactTypeCheckbox.text=Result Type: InterestingItemsFilterPanel.interestingItemsCheckbox.text=Interesting Item: DocumentPanel.fileSizeLabel.toolTipText= DocumentPanel.isDeletedLabel.toolTipText= diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form index 2728d1a822..1d5d166863 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form @@ -103,6 +103,9 @@ + + + @@ -128,13 +131,14 @@ + - + @@ -189,7 +193,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index ca8b9ca96d..d19535fc85 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -17,7 +17,6 @@ * limitations under the License. */ package org.sleuthkit.autopsy.discovery.ui; - import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import javax.swing.JCheckBox; import javax.swing.JLabel; @@ -74,6 +73,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } }); + daysSpinner.setModel(new javax.swing.SpinnerNumberModel(1, 1, null, 1)); daysSpinner.setEnabled(false); daysSpinner.setPreferredSize(new java.awt.Dimension(75, 26)); daysSpinner.setValue(7); @@ -82,11 +82,12 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { daysLabel.setEnabled(false); buttonGroup1.add(mostRecentRadioButton); + mostRecentRadioButton.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(mostRecentRadioButton, org.openide.util.NbBundle.getMessage(DateFilterPanel.class, "DateFilterPanel.mostRecentRadioButton.text")); // NOI18N mostRecentRadioButton.setEnabled(false); - mostRecentRadioButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - mostRecentRadioButtonActionPerformed(evt); + mostRecentRadioButton.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + mostRecentRadioButtonStateChanged(evt); } }); @@ -116,9 +117,9 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { buttonGroup1.add(rangeRadioButton); rangeRadioButton.setEnabled(false); - rangeRadioButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - rangeRadioButtonActionPerformed(evt); + rangeRadioButton.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + rangeRadioButtonStateChanged(evt); } }); @@ -182,32 +183,32 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { }// //GEN-END:initComponents private void startCheckBoxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_startCheckBoxStateChanged - startDatePicker.setEnabled(startCheckBox.isSelected()); + startDatePicker.setEnabled(startCheckBox.isEnabled() && startCheckBox.isSelected()); }//GEN-LAST:event_startCheckBoxStateChanged private void endCheckBoxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_endCheckBoxStateChanged - endDatePicker.setEnabled(endCheckBox.isSelected()); + endDatePicker.setEnabled(endCheckBox.isEnabled() && endCheckBox.isSelected()); }//GEN-LAST:event_endCheckBoxStateChanged - private void mostRecentRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mostRecentRadioButtonActionPerformed - startCheckBox.setEnabled(false); - endCheckBox.setEnabled(false); - daysSpinner.setEnabled(true); - daysLabel.setEnabled(true); - }//GEN-LAST:event_mostRecentRadioButtonActionPerformed - - private void rangeRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rangeRadioButtonActionPerformed - startCheckBox.setEnabled(true); - endCheckBox.setEnabled(true); - daysSpinner.setEnabled(false); - daysLabel.setEnabled(false); - }//GEN-LAST:event_rangeRadioButtonActionPerformed - private void dateFilterCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dateFilterCheckboxActionPerformed - mostRecentRadioButton.setEnabled(dateFilterCheckbox.isSelected()); rangeRadioButton.setEnabled(dateFilterCheckbox.isSelected()); + mostRecentRadioButton.setEnabled(dateFilterCheckbox.isSelected()); + rangeRadioButton.firePropertyChange("DateFilterChange", true, false); + mostRecentRadioButton.firePropertyChange("DateFilterChange", true, false); }//GEN-LAST:event_dateFilterCheckboxActionPerformed + private void mostRecentRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_mostRecentRadioButtonStateChanged + daysSpinner.setEnabled(mostRecentRadioButton.isSelected()); + daysLabel.setEnabled(mostRecentRadioButton.isSelected()); + }//GEN-LAST:event_mostRecentRadioButtonStateChanged + + private void rangeRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_rangeRadioButtonStateChanged + startCheckBox.setEnabled(rangeRadioButton.isEnabled() && rangeRadioButton.isSelected()); + endCheckBox.setEnabled(rangeRadioButton.isEnabled() &&rangeRadioButton.isSelected()); + endCheckBoxStateChanged(evt); + startCheckBoxStateChanged(evt); + }//GEN-LAST:event_rangeRadioButtonStateChanged + @Override void configurePanel(boolean selected, int[] indicesSelected) { dateFilterCheckbox.setSelected(selected); @@ -218,12 +219,6 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } else { mostRecentRadioButton.setEnabled(false); rangeRadioButton.setEnabled(false); - daysLabel.setEnabled(false); - daysSpinner.setEnabled(false); - startCheckBox.setEnabled(false); - endCheckBox.setEnabled(false); - startDatePicker.setEnabled(false); - endDatePicker.setEnabled(false); } } @@ -244,15 +239,26 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { @Override String checkForError() { - return "Domain search is not implemented."; + if (dateFilterCheckbox.isSelected()) { + if (!(rangeRadioButton.isSelected() || mostRecentRadioButton.isSelected())) { + return "Range or Only Last must be selected"; + } else if (rangeRadioButton.isSelected()) { + if (!startCheckBox.isSelected() && !endCheckBox.isSelected()) { + return "A start or end date must be specified to use the range filter"; + } else if (startCheckBox.isSelected() && startDatePicker.getDate() == null) { + return "A start date must be specified to use the start date option of the range filter"; + } else if (endCheckBox.isSelected() && endDatePicker.getDate() == null) { + return "An end date must be specified to use the end date option of the range filter"; + } + } + } + return ""; } @Override AbstractFilter getFilter() { return null; } - - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JCheckBox dateFilterCheckbox; From 144878b4c46d85c58809437ddbe36350bc410539 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 9 Sep 2020 08:06:43 -0400 Subject: [PATCH 03/27] 6714 return daterangefilter for UI use --- .../discovery/search/Bundle.properties-MERGED | 1 + .../discovery/ui/AbstractFiltersPanel.java | 7 +---- .../discovery/ui/Bundle.properties-MERGED | 2 +- .../autopsy/discovery/ui/DateFilterPanel.java | 27 ++++++++++++++++++- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED index fbb3240018..b31ec5db26 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED @@ -34,6 +34,7 @@ FileSearchFiltering.TagsFilter.desc=Tagged {0} FileSearchFiltering.TagsFilter.or=, FileSearchFiltering.UserCreatedFilter.desc=that contain EXIF data FileSorter.SortingMethod.datasource.displayName=Data Source +FileSorter.SortingMethod.domain.displayName=Domain FileSorter.SortingMethod.filename.displayName=File Name FileSorter.SortingMethod.filesize.displayName=File Size FileSorter.SortingMethod.filetype.displayName=File Type diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java index 4b4673475c..87dfe5d431 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java @@ -248,12 +248,7 @@ abstract class AbstractFiltersPanel extends JPanel implements ActionListener, Li synchronized List getFilters() { List filtersToUse = new ArrayList<>(); - if (getType().equals(SearchData.Type.DOMAIN)) { - - } else { - filtersToUse.add(new SearchFiltering.FileTypeFilter(getType())); - } - + filtersToUse.add(new SearchFiltering.FileTypeFilter(getType())); for (AbstractDiscoveryFilterPanel filterPanel : filters) { if (filterPanel.getCheckbox().isSelected()) { AbstractFilter filter = filterPanel.getFilter(); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED index 1c202fbc4a..8f9b2055cd 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED @@ -83,7 +83,7 @@ ResultsSplitPaneDivider.showButton.text= ResultsSplitPaneDivider.hideButton.text= ImageFilterPanel.imageFiltersSplitPane.toolTipText= ImageFilterPanel.imageFiltersSplitPane.border.title=Step 2: Filter which images to show -ArtifactTypeFilterPanel.artifactTypeCheckbox.text=Artifact Type: +ArtifactTypeFilterPanel.artifactTypeCheckbox.text=Result Type: InterestingItemsFilterPanel.interestingItemsCheckbox.text=Interesting Item: DocumentPanel.fileSizeLabel.toolTipText= DocumentPanel.isDeletedLabel.toolTipText= diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index d19535fc85..d7a94a30c7 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -17,6 +17,11 @@ * limitations under the License. */ package org.sleuthkit.autopsy.discovery.ui; + +import java.time.Duration; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.TemporalUnit; import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import javax.swing.JCheckBox; import javax.swing.JLabel; @@ -24,6 +29,7 @@ import javax.swing.JList; import javax.swing.SpinnerNumberModel; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.communications.Utils; +import org.sleuthkit.autopsy.discovery.search.SearchFiltering; /** * Filter panel for allowing the user to filter on date. @@ -32,6 +38,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; private final SpinnerNumberModel numberModel; + private static final long SECS_PER_DAY = 86400; /** * Creates new form DateFilterPanel. @@ -204,7 +211,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { private void rangeRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_rangeRadioButtonStateChanged startCheckBox.setEnabled(rangeRadioButton.isEnabled() && rangeRadioButton.isSelected()); - endCheckBox.setEnabled(rangeRadioButton.isEnabled() &&rangeRadioButton.isSelected()); + endCheckBox.setEnabled(rangeRadioButton.isEnabled() && rangeRadioButton.isSelected()); endCheckBoxStateChanged(evt); startCheckBoxStateChanged(evt); }//GEN-LAST:event_rangeRadioButtonStateChanged @@ -257,6 +264,24 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { @Override AbstractFilter getFilter() { + + if (dateFilterCheckbox.isSelected()) { + LocalDate startDate = LocalDate.MIN; + LocalDate endDate = LocalDate.MAX; + ZoneId zone = Utils.getUserPreferredZoneId(); + if (rangeRadioButton.isSelected()) { + if (startCheckBox.isSelected() && startDatePicker.getDate() != null) { + startDate = startDatePicker.getDate(); + } + if (endCheckBox.isSelected() && endDatePicker.getDate() != null) { + endDate = endDatePicker.getDate(); + } + } else if (dateFilterCheckbox.isSelected() && mostRecentRadioButton.isSelected()) { + endDate = LocalDate.now(); + startDate = LocalDate.now().minus(Duration.ofDays((long)daysSpinner.getValue())); + } + return new SearchFiltering.ArtifactDateRangeFilter(startDate.atStartOfDay(zone).toEpochSecond(), endDate.atStartOfDay(zone).toEpochSecond() + SECS_PER_DAY);//to insure end date is inclusive + } return null; } // Variables declaration - do not modify//GEN-BEGIN:variables From d8f0c4cc72768fb4d424359a7105bccc66f55539 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 9 Sep 2020 08:14:25 -0400 Subject: [PATCH 04/27] 6714 return artifactType filter for UI --- .../discovery/ui/ArtifactTypeFilterPanel.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java index 4d80b68e2b..00f3eff06d 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java @@ -18,12 +18,15 @@ */ package org.sleuthkit.autopsy.discovery.ui; +import java.util.ArrayList; +import java.util.List; import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import javax.swing.DefaultListModel; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JList; import org.sleuthkit.autopsy.discovery.search.SearchData; +import org.sleuthkit.autopsy.discovery.search.SearchFiltering.ArtifactTypeFilter; import org.sleuthkit.datamodel.BlackboardArtifact; /** @@ -106,7 +109,7 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { if (artifactTypeCheckbox.isEnabled() && artifactTypeCheckbox.isSelected()) { artifactTypeScrollPane.setEnabled(true); artifactList.setEnabled(true); - if (indicesSelected != null) { + if (indicesSelected != null) { artifactList.setSelectedIndices(indicesSelected); } } else { @@ -133,13 +136,20 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { @Override String checkForError() { if (artifactTypeCheckbox.isSelected() && artifactList.getSelectedValuesList().isEmpty()) { - return "At least one Result type must be selected."; + return "At least one Result type must be selected."; } return ""; } @Override AbstractFilter getFilter() { + if (artifactTypeCheckbox.isSelected() && !artifactList.getSelectedValuesList().isEmpty()) { + List artifactTypeList = new ArrayList<>(); + for (ArtifactTypeItem item : artifactList.getSelectedValuesList()) { + artifactTypeList.add(item.getArtifactType()); + } + return new ArtifactTypeFilter(artifactTypeList); + } return null; } From f8a9ad319c489276e69dbb29460e95ee33992b73 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 10 Sep 2020 10:39:34 -0400 Subject: [PATCH 05/27] 6714 new date grouping attributes --- .../discovery/search/Bundle.properties-MERGED | 12 +- .../discovery/search/DiscoveryAttributes.java | 32 ++- .../discovery/search/DiscoveryKeyUtils.java | 207 ++++++++++++++++-- .../discovery/search/DomainSearchCache.java | 2 +- .../search/DomainSearchCacheLoader.java | 1 + .../discovery/search/SearchResults.java | 3 +- .../discovery/ui/AbstractFiltersPanel.java | 4 +- .../autopsy/discovery/ui/GroupListPanel.java | 2 + 8 files changed, 231 insertions(+), 32 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED index b31ec5db26..102aaf6890 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/Bundle.properties-MERGED @@ -1,9 +1,11 @@ DiscoveryAttributes.GroupingAttributeType.datasource.displayName=Data Source DiscoveryAttributes.GroupingAttributeType.fileType.displayName=File Type +DiscoveryAttributes.GroupingAttributeType.firstDate.displayName=First Activity Date DiscoveryAttributes.GroupingAttributeType.frequency.displayName=Past Occurrences DiscoveryAttributes.GroupingAttributeType.hash.displayName=Hash Set DiscoveryAttributes.GroupingAttributeType.interestingItem.displayName=Interesting Item DiscoveryAttributes.GroupingAttributeType.keywordList.displayName=Keyword +DiscoveryAttributes.GroupingAttributeType.mostRecentDate.displayName=Most Recent Activity Date DiscoveryAttributes.GroupingAttributeType.none.displayName=None DiscoveryAttributes.GroupingAttributeType.object.displayName=Object Detected DiscoveryAttributes.GroupingAttributeType.parent.displayName=Parent Folder @@ -15,15 +17,17 @@ DiscoveryKeyUtils.DataSourceGroupKey.datasourceAndID={0}(ID: {1}) # {0} - Data source ID DiscoveryKeyUtils.DataSourceGroupKey.idOnly=Data source (ID: {0}) DiscoveryKeyUtils.FileTagGroupKey.noSets=None +DiscoveryKeyUtils.FirstActivityDateGroupKey.noDate=No Date Available +DiscoveryKeyUtils.HashHitsGroupKey.noHashHits=None +DiscoveryKeyUtils.InterestingItemGroupKey.noSets=None +DiscoveryKeyUtils.KeywordListGroupKey.noKeywords=None +DiscoveryKeyUtils.MostRecentActivityDateGroupKey.noDate=No Date Available DiscoveryKeyUtils.NoGroupingGroupKey.allFiles=All Files +DiscoveryKeyUtils.ObjectDetectedGroupKey.noSets=None FileGroup.groupSortingAlgorithm.groupName.text=Group Name FileGroup.groupSortingAlgorithm.groupSize.text=Group Size FileSearch.documentSummary.noBytes=No bytes read for document, unable to display preview. FileSearch.documentSummary.noPreview=No preview available. -FileSearch.HashHitsGroupKey.noHashHits=None -FileSearch.InterestingItemGroupKey.noSets=None -FileSearch.KeywordListGroupKey.noKeywords=None -FileSearch.ObjectDetectedGroupKey.noSets=None FileSearchFiltering.concatenateSetNamesForDisplay.comma=, # {0} - filters FileSearchFiltering.HashSetFilter.desc=Hash set hits in set(s): {0} diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java index 178530e072..751b47e849 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java @@ -252,7 +252,7 @@ public class DiscoveryAttributes { CentralRepository centralRepoDb) throws DiscoveryException { List currentFiles = new ArrayList<>(); Set hashesToLookUp = new HashSet<>(); - + for (Result result : results) { if (result.getKnown() == TskData.FileKnown.KNOWN) { result.setFrequency(SearchData.Frequency.KNOWN); @@ -268,8 +268,8 @@ public class DiscoveryAttributes { } else { ResultDomain domain = (ResultDomain) result; try { - CorrelationAttributeInstance.Type domainAttributeType = - centralRepoDb.getCorrelationTypeById(CorrelationAttributeInstance.DOMAIN_TYPE_ID); + CorrelationAttributeInstance.Type domainAttributeType + = centralRepoDb.getCorrelationTypeById(CorrelationAttributeInstance.DOMAIN_TYPE_ID); Long count = centralRepoDb.getCountArtifactInstancesByTypeValue(domainAttributeType, domain.getDomain()); domain.setFrequency(SearchData.Frequency.fromCount(count)); } catch (CentralRepoException ex) { @@ -278,7 +278,7 @@ public class DiscoveryAttributes { logger.log(Level.INFO, "Domain [%s] could not be normalized for central repository querying, skipping...", domain.getDomain()); } } - + if (hashesToLookUp.size() >= BATCH_SIZE) { computeFrequency(hashesToLookUp, currentFiles, centralRepoDb); @@ -483,6 +483,24 @@ public class DiscoveryAttributes { } } + static class MostRecentActivityDateAttribute extends AttributeType { + + @Override + public DiscoveryKeyUtils.GroupKey getGroupKey(Result result) { + return new DiscoveryKeyUtils.MostRecentActivityDateGroupKey(result); + } + + } + + static class FirstActivityDateAttribute extends AttributeType { + + @Override + public DiscoveryKeyUtils.GroupKey getGroupKey(Result result) { + return new DiscoveryKeyUtils.FirstActivityDateGroupKey(result); + } + + } + /** * Attribute for grouping/sorting by objects detected */ @@ -605,6 +623,8 @@ public class DiscoveryAttributes { "DiscoveryAttributes.GroupingAttributeType.interestingItem.displayName=Interesting Item", "DiscoveryAttributes.GroupingAttributeType.tag.displayName=Tag", "DiscoveryAttributes.GroupingAttributeType.object.displayName=Object Detected", + "DiscoveryAttributes.GroupingAttributeType.mostRecentDate.displayName=Most Recent Activity Date", + "DiscoveryAttributes.GroupingAttributeType.firstDate.displayName=First Activity Date", "DiscoveryAttributes.GroupingAttributeType.none.displayName=None"}) public enum GroupingAttributeType { FILE_SIZE(new FileSizeAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_size_displayName()), @@ -616,6 +636,8 @@ public class DiscoveryAttributes { INTERESTING_ITEM_SET(new InterestingItemAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_interestingItem_displayName()), FILE_TAG(new FileTagAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_tag_displayName()), OBJECT_DETECTED(new ObjectDetectedAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_object_displayName()), + MOST_RECENT_DATE(new MostRecentActivityDateAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_mostRecentDate_displayName()), + FIRST_DATE(new MostRecentActivityDateAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_firstDate_displayName()), NO_GROUPING(new NoGroupingAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_none_displayName()); private final AttributeType attributeType; @@ -641,7 +663,7 @@ public class DiscoveryAttributes { * @return enums that can be used to group images */ public static List getOptionsForGrouping() { - return Arrays.asList(FILE_SIZE, FREQUENCY, PARENT_PATH, OBJECT_DETECTED, HASH_LIST_NAME, INTERESTING_ITEM_SET); + return Arrays.asList(FILE_SIZE, FREQUENCY, PARENT_PATH, OBJECT_DETECTED, HASH_LIST_NAME, INTERESTING_ITEM_SET, FIRST_DATE, MOST_RECENT_DATE); } } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java index 0bcbc20b61..de8df18f8d 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java @@ -18,7 +18,9 @@ */ package org.sleuthkit.autopsy.discovery.search; +import java.text.SimpleDateFormat; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Objects; import java.util.logging.Level; @@ -64,13 +66,13 @@ public class DiscoveryKeyUtils { SearchKey(String userName, List filters, DiscoveryAttributes.AttributeType groupAttributeType, Group.GroupSortingAlgorithm groupSortingType, - ResultsSorter.SortingMethod fileSortingMethod, + ResultsSorter.SortingMethod fileSortingMethod, SleuthkitCase sleuthkitCase, CentralRepository centralRepository) { this.groupAttributeType = groupAttributeType; this.groupSortingType = groupSortingType; this.fileSortingMethod = fileSortingMethod; this.filters = filters; - + StringBuilder searchStringBuilder = new StringBuilder(); searchStringBuilder.append(userName); for (AbstractFilter filter : filters) { @@ -81,15 +83,16 @@ public class DiscoveryKeyUtils { this.sleuthkitCase = sleuthkitCase; this.centralRepository = centralRepository; } - + /** - * Construct a SearchKey without a SleuthkitCase or CentralRepositry instance. + * Construct a SearchKey without a SleuthkitCase or CentralRepositry + * instance. */ SearchKey(String userName, List filters, DiscoveryAttributes.AttributeType groupAttributeType, Group.GroupSortingAlgorithm groupSortingType, ResultsSorter.SortingMethod fileSortingMethod) { - this(userName, filters, groupAttributeType, groupSortingType, + this(userName, filters, groupAttributeType, groupSortingType, fileSortingMethod, null, null); } @@ -109,11 +112,11 @@ public class DiscoveryKeyUtils { } SearchKey otherSearchKey = (SearchKey) otherKey; - if (this.sleuthkitCase != otherSearchKey.getSleuthkitCase() || - this.centralRepository != otherSearchKey.getCentralRepository()) { + if (this.sleuthkitCase != otherSearchKey.getSleuthkitCase() + || this.centralRepository != otherSearchKey.getCentralRepository()) { return false; } - + return getKeyString().equals(otherSearchKey.getKeyString()); } @@ -130,11 +133,11 @@ public class DiscoveryKeyUtils { String getKeyString() { return keyString; } - + List getFilters() { return Collections.unmodifiableList(this.filters); } - + Group.GroupSortingAlgorithm getGroupSortingType() { return groupSortingType; } @@ -146,11 +149,11 @@ public class DiscoveryKeyUtils { ResultsSorter.SortingMethod getFileSortingMethod() { return fileSortingMethod; } - + SleuthkitCase getSleuthkitCase() { return this.sleuthkitCase; } - + CentralRepository getCentralRepository() { return this.centralRepository; } @@ -326,12 +329,12 @@ public class DiscoveryKeyUtils { private final String keywordListNamesString; @NbBundle.Messages({ - "FileSearch.KeywordListGroupKey.noKeywords=None"}) + "DiscoveryKeyUtils.KeywordListGroupKey.noKeywords=None"}) KeywordListGroupKey(ResultFile file) { keywordListNames = file.getKeywordListNames(); if (keywordListNames.isEmpty()) { - keywordListNamesString = Bundle.FileSearch_KeywordListGroupKey_noKeywords(); + keywordListNamesString = Bundle.DiscoveryKeyUtils_KeywordListGroupKey_noKeywords(); } else { keywordListNamesString = String.join(",", keywordListNames); // NON-NLS } @@ -760,12 +763,12 @@ public class DiscoveryKeyUtils { private final String hashSetNamesString; @NbBundle.Messages({ - "FileSearch.HashHitsGroupKey.noHashHits=None"}) + "DiscoveryKeyUtils.HashHitsGroupKey.noHashHits=None"}) HashHitsGroupKey(ResultFile file) { hashSetNames = file.getHashSetNames(); if (hashSetNames.isEmpty()) { - hashSetNamesString = Bundle.FileSearch_HashHitsGroupKey_noHashHits(); + hashSetNamesString = Bundle.DiscoveryKeyUtils_HashHitsGroupKey_noHashHits(); } else { hashSetNamesString = String.join(",", hashSetNames); // NON-NLS } @@ -841,12 +844,12 @@ public class DiscoveryKeyUtils { private final String interestingItemSetNamesString; @NbBundle.Messages({ - "FileSearch.InterestingItemGroupKey.noSets=None"}) + "DiscoveryKeyUtils.InterestingItemGroupKey.noSets=None"}) InterestingItemGroupKey(ResultFile file) { interestingItemSetNames = file.getInterestingSetNames(); if (interestingItemSetNames.isEmpty()) { - interestingItemSetNamesString = Bundle.FileSearch_InterestingItemGroupKey_noSets(); + interestingItemSetNamesString = Bundle.DiscoveryKeyUtils_InterestingItemGroupKey_noSets(); } else { interestingItemSetNamesString = String.join(",", interestingItemSetNames); // NON-NLS } @@ -913,6 +916,170 @@ public class DiscoveryKeyUtils { } } + static class MostRecentActivityDateGroupKey extends GroupKey { + + private final Long epochDate; + private final String dateNameString; + + @NbBundle.Messages({ + "DiscoveryKeyUtils.MostRecentActivityDateGroupKey.noDate=No Date Available"}) + MostRecentActivityDateGroupKey(Result result) { + if (result instanceof ResultDomain) { + epochDate = ((ResultDomain) result).getActivityEnd(); + dateNameString = new SimpleDateFormat("yyyy/MM/dd").format(new Date(epochDate*1000)); + } else { + epochDate = Long.MAX_VALUE; + dateNameString = Bundle.DiscoveryKeyUtils_MostRecentActivityDateGroupKey_noDate(); + } + } + + @Override + String getDisplayName() { + return getDateNameString(); + } + + @Override + public boolean equals(Object otherKey) { + if (otherKey == this) { + return true; + } + + if (!(otherKey instanceof MostRecentActivityDateGroupKey)) { + return false; + } + + MostRecentActivityDateGroupKey dateGroupKey = (MostRecentActivityDateGroupKey) otherKey; + return getDateNameString().equals(dateGroupKey.getDateNameString()); + } + + @Override + public int hashCode() { + return Objects.hash(getDateNameString()); + } + + @Override + public int compareTo(GroupKey otherGroupKey) { + if (otherGroupKey instanceof MostRecentActivityDateGroupKey) { + MostRecentActivityDateGroupKey otherDateGroupKey = (MostRecentActivityDateGroupKey) otherGroupKey; + + // Put the empty list at the end + if (this.getEpochDate().equals(Long.MAX_VALUE)) { + if (otherDateGroupKey.getEpochDate().equals(Long.MAX_VALUE)) { + return 0; + } else { + return 1; + } + } else if (otherDateGroupKey.getEpochDate().equals(Long.MAX_VALUE)) { + return -1; + } + + return getDateNameString().compareTo(otherDateGroupKey.getDateNameString()); + } else { + return compareClassNames(otherGroupKey); + } + } + + /** + * Get the date this group is for as a Long. + * + * @return The date. + */ + Long getEpochDate() { + return epochDate; + } + + /** + * Get the name which identifies this group. + * + * @return The dateNameString + */ + String getDateNameString() { + return dateNameString; + } + } + + static class FirstActivityDateGroupKey extends GroupKey { + + private final Long epochDate; + private final String dateNameString; + + @NbBundle.Messages({ + "DiscoveryKeyUtils.FirstActivityDateGroupKey.noDate=No Date Available"}) + FirstActivityDateGroupKey(Result result) { + if (result instanceof ResultDomain) { + epochDate = ((ResultDomain) result).getActivityStart(); + dateNameString = new SimpleDateFormat("yyyy/MM/dd").format(new Date(epochDate*1000)); + } else { + epochDate = Long.MAX_VALUE; + dateNameString = Bundle.DiscoveryKeyUtils_FirstActivityDateGroupKey_noDate(); + } + } + + @Override + String getDisplayName() { + return getDateNameString(); + } + + @Override + public boolean equals(Object otherKey) { + if (otherKey == this) { + return true; + } + + if (!(otherKey instanceof FirstActivityDateGroupKey)) { + return false; + } + + FirstActivityDateGroupKey dateGroupKey = (FirstActivityDateGroupKey) otherKey; + return getDateNameString().equals(dateGroupKey.getDateNameString()); + } + + @Override + public int hashCode() { + return Objects.hash(getDateNameString()); + } + + @Override + public int compareTo(GroupKey otherGroupKey) { + if (otherGroupKey instanceof FirstActivityDateGroupKey) { + FirstActivityDateGroupKey otherDateGroupKey = (FirstActivityDateGroupKey) otherGroupKey; + + // Put the empty list at the end + if (this.getEpochDate().equals(Long.MAX_VALUE)) { + if (otherDateGroupKey.getEpochDate().equals(Long.MAX_VALUE)) { + return 0; + } else { + return 1; + } + } else if (otherDateGroupKey.getEpochDate().equals(Long.MAX_VALUE)) { + return -1; + } + + return getDateNameString().compareTo(otherDateGroupKey.getDateNameString()); + } else { + return compareClassNames(otherGroupKey); + } + } + + /** + * Get the date this group is for as a Long. + * + * @return The date. + */ + Long getEpochDate() { + return epochDate; + } + + /** + * Get the name which identifies this group. + * + * @return The dateNameString + */ + String getDateNameString() { + return dateNameString; + } + } + /** * Key representing an object detected group */ @@ -922,12 +1089,12 @@ public class DiscoveryKeyUtils { private final String objectDetectedNamesString; @NbBundle.Messages({ - "FileSearch.ObjectDetectedGroupKey.noSets=None"}) + "DiscoveryKeyUtils.ObjectDetectedGroupKey.noSets=None"}) ObjectDetectedGroupKey(ResultFile file) { objectDetectedNames = file.getObjectDetectedNames(); if (objectDetectedNames.isEmpty()) { - objectDetectedNamesString = Bundle.FileSearch_ObjectDetectedGroupKey_noSets(); + objectDetectedNamesString = Bundle.DiscoveryKeyUtils_ObjectDetectedGroupKey_noSets(); } else { objectDetectedNamesString = String.join(",", objectDetectedNames); // NON-NLS } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java index fb29e41078..2a253399a5 100755 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java @@ -64,7 +64,7 @@ class DomainSearchCache { groupSortingType, domainSortingMethod, caseDb, centralRepoDb); return cache.get(searchKey); - } catch (ExecutionException ex) { + } catch (Throwable ex) { throw new DiscoveryException("Error fetching results from cache", ex.getCause()); } } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java index 59c47429c4..994e99267a 100755 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java @@ -155,6 +155,7 @@ class DomainSearchCacheLoader extends CacheLoader results) { + System.out.println("RESULT SIZE: "+ results.size()); for (Result result : results) { // Add the file to the appropriate group, creating it if necessary GroupKey groupKey = attrType.getGroupKey(result); - + if (!groupMap.containsKey(groupKey)) { groupMap.put(groupKey, new Group(groupSortingType, groupKey)); } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java index 87dfe5d431..dfa283735c 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java @@ -248,7 +248,9 @@ abstract class AbstractFiltersPanel extends JPanel implements ActionListener, Li synchronized List getFilters() { List filtersToUse = new ArrayList<>(); - filtersToUse.add(new SearchFiltering.FileTypeFilter(getType())); + if (getType() != SearchData.Type.DOMAIN) { //Domain type does not have a file type + filtersToUse.add(new SearchFiltering.FileTypeFilter(getType())); + } for (AbstractDiscoveryFilterPanel filterPanel : filters) { if (filterPanel.getCheckbox().isSelected()) { AbstractFilter filter = filterPanel.getFilter(); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java index 6a185b70ab..80f85575c0 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java @@ -82,6 +82,7 @@ final class GroupListPanel extends javax.swing.JPanel { */ @Subscribe void handleSearchCompleteEvent(DiscoveryEventUtils.SearchCompleteEvent searchCompleteEvent) { + System.out.println("SEARCH COMPLETE EVENT"); groupMap = searchCompleteEvent.getGroupMap(); searchfilters = searchCompleteEvent.getFilters(); groupingAttribute = searchCompleteEvent.getGroupingAttr(); @@ -108,6 +109,7 @@ final class GroupListPanel extends javax.swing.JPanel { */ @Subscribe void handleSearchCancelledEvent(DiscoveryEventUtils.SearchCancelledEvent searchCancelledEvent) { + System.out.println("SEARCH CANCELLED EVENT"); SwingUtilities.invokeLater(() -> { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); }); From ed558cafa0f4ec3ad57091a40210e0cbf7cd6b20 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 07:47:56 -0400 Subject: [PATCH 06/27] 6714 add default date to pickers --- .../org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form | 6 ++++++ .../org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java | 5 +++-- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form index 1d5d166863..d7a5c8e1cc 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form @@ -154,6 +154,9 @@ + + + @@ -165,6 +168,9 @@ + + + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index d7a94a30c7..4758549cdb 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -21,7 +21,6 @@ package org.sleuthkit.autopsy.discovery.ui; import java.time.Duration; import java.time.LocalDate; import java.time.ZoneId; -import java.time.temporal.TemporalUnit; import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import javax.swing.JCheckBox; import javax.swing.JLabel; @@ -106,10 +105,12 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } }); + startDatePicker.setDate(LocalDate.now()); startDatePicker.setEnabled(false); startDatePicker.setMinimumSize(new java.awt.Dimension(60, 22)); startDatePicker.setPreferredSize(new java.awt.Dimension(110, 22)); + endDatePicker.setDate(LocalDate.now()); endDatePicker.setEnabled(false); endDatePicker.setMinimumSize(new java.awt.Dimension(60, 22)); endDatePicker.setPreferredSize(new java.awt.Dimension(110, 22)); @@ -270,7 +271,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { LocalDate endDate = LocalDate.MAX; ZoneId zone = Utils.getUserPreferredZoneId(); if (rangeRadioButton.isSelected()) { - if (startCheckBox.isSelected() && startDatePicker.getDate() != null) { + if (startCheckBox.isSelected() && startDatePicker.getDate().equals(startDate)) { startDate = startDatePicker.getDate(); } if (endCheckBox.isSelected() && endDatePicker.getDate() != null) { diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 94e41c8cf2..474b766910 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -149,8 +149,8 @@ final class DiscoveryDialog extends javax.swing.JDialog { * Set the type buttons to a default state where none are selected. */ private void unselectAllButtons() { - imagesButton.setSelected(false); - imagesButton.setEnabled(true); + imagesButton.setSelected(false); + imagesButton.setEnabled(true); imagesButton.setBackground(UNSELECTED_COLOR); videosButton.setSelected(false); videosButton.setEnabled(true); From b32aa710fe5bfbf6520c6cffd9122b91eabf5f43 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 08:21:49 -0400 Subject: [PATCH 07/27] 6714 fix listeners for date range --- .../autopsy/discovery/ui/Bundle.properties | 2 +- .../autopsy/discovery/ui/DateFilterPanel.form | 6 +- .../autopsy/discovery/ui/DateFilterPanel.java | 70 ++++++++++++------- .../autopsy/discovery/ui/GroupListPanel.java | 2 - 4 files changed, 47 insertions(+), 33 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties index 90bf2dd504..baffc3ee43 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties @@ -36,7 +36,6 @@ DocumentPanel.isDeletedLabel.toolTipText= DomainFilterPanel.domainFiltersSplitPane.toolTipText= DomainFilterPanel.domainFiltersSplitPane.border.title=Step 2: Filter which domains to show SizeFilterPanel.sizeCheckbox.text=File Size: -DateFilterPanel.dateFilterCheckbox.text=Date Filter: DateFilterPanel.endCheckBox.text=End: DateFilterPanel.startCheckBox.text=Start: DateFilterPanel.daysLabel.text=days of activity @@ -54,3 +53,4 @@ DocumentFilterPanel.documentsFiltersSplitPane.border.title=Step 2: Filter which ObjectDetectedFilterPanel.text=Object Detected: DetailsPanel.instancesList.border.title=Instances DateFilterPanel.mostRecentRadioButton.text=Only last: +DateFilterPanel.dateFilterCheckBox.text=Date Filter: diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form index d7a5c8e1cc..8ecca7e27b 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form @@ -4,14 +4,14 @@ - + - + - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index 4758549cdb..efb5e03370 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.discovery.ui; +import java.awt.event.ActionListener; import java.time.Duration; import java.time.LocalDate; import java.time.ZoneId; @@ -26,6 +27,7 @@ import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.SpinnerNumberModel; +import javax.swing.event.ListSelectionListener; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.communications.Utils; import org.sleuthkit.autopsy.discovery.search.SearchFiltering; @@ -61,7 +63,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); - dateFilterCheckbox = new javax.swing.JCheckBox(); + dateFilterCheckBox = new javax.swing.JCheckBox(); jPanel1 = new javax.swing.JPanel(); daysSpinner = new javax.swing.JSpinner(numberModel); daysLabel = new javax.swing.JLabel(); @@ -72,10 +74,10 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { endCheckBox = new javax.swing.JCheckBox(); rangeRadioButton = new javax.swing.JRadioButton(); - org.openide.awt.Mnemonics.setLocalizedText(dateFilterCheckbox, org.openide.util.NbBundle.getMessage(DateFilterPanel.class, "DateFilterPanel.dateFilterCheckbox.text")); // NOI18N - dateFilterCheckbox.addActionListener(new java.awt.event.ActionListener() { + org.openide.awt.Mnemonics.setLocalizedText(dateFilterCheckBox, org.openide.util.NbBundle.getMessage(DateFilterPanel.class, "DateFilterPanel.dateFilterCheckBox.text")); // NOI18N + dateFilterCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - dateFilterCheckboxActionPerformed(evt); + dateFilterCheckBoxActionPerformed(evt); } }); @@ -198,12 +200,12 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { endDatePicker.setEnabled(endCheckBox.isEnabled() && endCheckBox.isSelected()); }//GEN-LAST:event_endCheckBoxStateChanged - private void dateFilterCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dateFilterCheckboxActionPerformed - rangeRadioButton.setEnabled(dateFilterCheckbox.isSelected()); - mostRecentRadioButton.setEnabled(dateFilterCheckbox.isSelected()); - rangeRadioButton.firePropertyChange("DateFilterChange", true, false); - mostRecentRadioButton.firePropertyChange("DateFilterChange", true, false); - }//GEN-LAST:event_dateFilterCheckboxActionPerformed + private void dateFilterCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dateFilterCheckBoxActionPerformed + rangeRadioButton.setEnabled(dateFilterCheckBox.isSelected()); + mostRecentRadioButton.setEnabled(dateFilterCheckBox.isSelected()); + rangeRadioButton.firePropertyChange("DateFilterChange", !rangeRadioButton.isEnabled(), rangeRadioButton.isEnabled()); + mostRecentRadioButton.firePropertyChange("DateFilterChange", !mostRecentRadioButton.isEnabled(), mostRecentRadioButton.isEnabled()); + }//GEN-LAST:event_dateFilterCheckBoxActionPerformed private void mostRecentRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_mostRecentRadioButtonStateChanged daysSpinner.setEnabled(mostRecentRadioButton.isSelected()); @@ -219,8 +221,8 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { @Override void configurePanel(boolean selected, int[] indicesSelected) { - dateFilterCheckbox.setSelected(selected); - if (dateFilterCheckbox.isEnabled() && dateFilterCheckbox.isSelected()) { + dateFilterCheckBox.setSelected(selected); + if (dateFilterCheckBox.isEnabled() && dateFilterCheckBox.isSelected()) { mostRecentRadioButton.setEnabled(true); rangeRadioButton.setEnabled(true); mostRecentRadioButton.setSelected(true); @@ -232,7 +234,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { @Override JCheckBox getCheckbox() { - return dateFilterCheckbox; + return dateFilterCheckBox; } @Override @@ -245,19 +247,33 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { return null; } + @Override + void addListeners(ActionListener actionListener, ListSelectionListener listListener) { + dateFilterCheckBox.addActionListener(actionListener); + startCheckBox.addActionListener(actionListener); + endCheckBox.addActionListener(actionListener); + } + + @Override + void removeListeners() { + for (ActionListener listener : dateFilterCheckBox.getActionListeners()) { + dateFilterCheckBox.removeActionListener(listener); + } + for (ActionListener listener : startCheckBox.getActionListeners()) { + startCheckBox.removeActionListener(listener); + } + for (ActionListener listener : endCheckBox.getActionListeners()) { + endCheckBox.removeActionListener(listener); + } + } + @Override String checkForError() { - if (dateFilterCheckbox.isSelected()) { + if (dateFilterCheckBox.isSelected()) { if (!(rangeRadioButton.isSelected() || mostRecentRadioButton.isSelected())) { return "Range or Only Last must be selected"; - } else if (rangeRadioButton.isSelected()) { - if (!startCheckBox.isSelected() && !endCheckBox.isSelected()) { - return "A start or end date must be specified to use the range filter"; - } else if (startCheckBox.isSelected() && startDatePicker.getDate() == null) { - return "A start date must be specified to use the start date option of the range filter"; - } else if (endCheckBox.isSelected() && endDatePicker.getDate() == null) { - return "An end date must be specified to use the end date option of the range filter"; - } + } else if (rangeRadioButton.isSelected() && !(startCheckBox.isSelected() || endCheckBox.isSelected())) { + return "A start or end date must be specified to use the range filter"; } } return ""; @@ -266,20 +282,20 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { @Override AbstractFilter getFilter() { - if (dateFilterCheckbox.isSelected()) { + if (dateFilterCheckBox.isSelected()) { LocalDate startDate = LocalDate.MIN; LocalDate endDate = LocalDate.MAX; ZoneId zone = Utils.getUserPreferredZoneId(); - if (rangeRadioButton.isSelected()) { + if (rangeRadioButton.isSelected() && (startCheckBox.isSelected() || endCheckBox.isSelected())) { if (startCheckBox.isSelected() && startDatePicker.getDate().equals(startDate)) { startDate = startDatePicker.getDate(); } if (endCheckBox.isSelected() && endDatePicker.getDate() != null) { endDate = endDatePicker.getDate(); } - } else if (dateFilterCheckbox.isSelected() && mostRecentRadioButton.isSelected()) { + } else if (dateFilterCheckBox.isSelected() && mostRecentRadioButton.isSelected()) { endDate = LocalDate.now(); - startDate = LocalDate.now().minus(Duration.ofDays((long)daysSpinner.getValue())); + startDate = LocalDate.now().minus(Duration.ofDays((long) daysSpinner.getValue())); } return new SearchFiltering.ArtifactDateRangeFilter(startDate.atStartOfDay(zone).toEpochSecond(), endDate.atStartOfDay(zone).toEpochSecond() + SECS_PER_DAY);//to insure end date is inclusive } @@ -287,7 +303,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JCheckBox dateFilterCheckbox; + private javax.swing.JCheckBox dateFilterCheckBox; private javax.swing.JLabel daysLabel; private javax.swing.JSpinner daysSpinner; private javax.swing.JCheckBox endCheckBox; diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java index 80f85575c0..6a185b70ab 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/GroupListPanel.java @@ -82,7 +82,6 @@ final class GroupListPanel extends javax.swing.JPanel { */ @Subscribe void handleSearchCompleteEvent(DiscoveryEventUtils.SearchCompleteEvent searchCompleteEvent) { - System.out.println("SEARCH COMPLETE EVENT"); groupMap = searchCompleteEvent.getGroupMap(); searchfilters = searchCompleteEvent.getFilters(); groupingAttribute = searchCompleteEvent.getGroupingAttr(); @@ -109,7 +108,6 @@ final class GroupListPanel extends javax.swing.JPanel { */ @Subscribe void handleSearchCancelledEvent(DiscoveryEventUtils.SearchCancelledEvent searchCancelledEvent) { - System.out.println("SEARCH CANCELLED EVENT"); SwingUtilities.invokeLater(() -> { setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); }); From 560724ba20a59965b93d04ab806bb5c34bec72a1 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 09:38:43 -0400 Subject: [PATCH 08/27] 6714 remove souts and fix listener again --- .../discovery/search/DiscoveryKeyUtils.java | 5 +++-- .../discovery/search/DomainSearchCacheLoader.java | 1 - .../autopsy/discovery/search/SearchResults.java | 1 - .../discovery/ui/AbstractFiltersPanel.java | 2 +- .../autopsy/discovery/ui/Bundle.properties-MERGED | 2 +- .../autopsy/discovery/ui/DateFilterPanel.java | 15 +++++++++++++-- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java index de8df18f8d..ec5b5516b2 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Objects; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; @@ -926,7 +927,7 @@ public class DiscoveryKeyUtils { MostRecentActivityDateGroupKey(Result result) { if (result instanceof ResultDomain) { epochDate = ((ResultDomain) result).getActivityEnd(); - dateNameString = new SimpleDateFormat("yyyy/MM/dd").format(new Date(epochDate*1000)); + dateNameString = new SimpleDateFormat("yyyy/MM/dd").format(new Date(TimeUnit.SECONDS.toMillis(epochDate))); } else { epochDate = Long.MAX_VALUE; dateNameString = Bundle.DiscoveryKeyUtils_MostRecentActivityDateGroupKey_noDate(); @@ -1008,7 +1009,7 @@ public class DiscoveryKeyUtils { FirstActivityDateGroupKey(Result result) { if (result instanceof ResultDomain) { epochDate = ((ResultDomain) result).getActivityStart(); - dateNameString = new SimpleDateFormat("yyyy/MM/dd").format(new Date(epochDate*1000)); + dateNameString = new SimpleDateFormat("yyyy/MM/dd").format(new Date(TimeUnit.SECONDS.toMillis(epochDate))); } else { epochDate = Long.MAX_VALUE; dateNameString = Bundle.DiscoveryKeyUtils_FirstActivityDateGroupKey_noDate(); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java index 994e99267a..59c47429c4 100755 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCacheLoader.java @@ -155,7 +155,6 @@ class DomainSearchCacheLoader extends CacheLoader results) { - System.out.println("RESULT SIZE: "+ results.size()); for (Result result : results) { // Add the file to the appropriate group, creating it if necessary GroupKey groupKey = attrType.getGroupKey(result); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java index dfa283735c..0736708e9c 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java @@ -120,7 +120,7 @@ abstract class AbstractFiltersPanel extends JPanel implements ActionListener, Li secondColumnY += constraints.gridheight; } } - + /** * Add the panels representing the two columns to the specified JSplitPane. * diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED index 8f9b2055cd..df37ba0e3f 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED @@ -90,7 +90,6 @@ DocumentPanel.isDeletedLabel.toolTipText= DomainFilterPanel.domainFiltersSplitPane.toolTipText= DomainFilterPanel.domainFiltersSplitPane.border.title=Step 2: Filter which domains to show SizeFilterPanel.sizeCheckbox.text=File Size: -DateFilterPanel.dateFilterCheckbox.text=Date Filter: DateFilterPanel.endCheckBox.text=End: DateFilterPanel.startCheckBox.text=Start: DateFilterPanel.daysLabel.text=days of activity @@ -108,6 +107,7 @@ DocumentFilterPanel.documentsFiltersSplitPane.border.title=Step 2: Filter which ObjectDetectedFilterPanel.text=Object Detected: DetailsPanel.instancesList.border.title=Instances DateFilterPanel.mostRecentRadioButton.text=Only last: +DateFilterPanel.dateFilterCheckBox.text=Date Filter: VideoThumbnailPanel.bytes.text=bytes VideoThumbnailPanel.deleted.text=All instances of file are deleted. VideoThumbnailPanel.gigaBytes.text=GB diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index efb5e03370..803c637411 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -215,8 +215,8 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { private void rangeRadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_rangeRadioButtonStateChanged startCheckBox.setEnabled(rangeRadioButton.isEnabled() && rangeRadioButton.isSelected()); endCheckBox.setEnabled(rangeRadioButton.isEnabled() && rangeRadioButton.isSelected()); - endCheckBoxStateChanged(evt); - startCheckBoxStateChanged(evt); + startCheckBox.firePropertyChange("StartButtonChange", true, false); + endCheckBox.firePropertyChange("EndButtonChange", true, false); }//GEN-LAST:event_rangeRadioButtonStateChanged @Override @@ -252,6 +252,8 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { dateFilterCheckBox.addActionListener(actionListener); startCheckBox.addActionListener(actionListener); endCheckBox.addActionListener(actionListener); + rangeRadioButton.addActionListener(actionListener); + mostRecentRadioButton.addActionListener(actionListener); } @Override @@ -259,6 +261,15 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { for (ActionListener listener : dateFilterCheckBox.getActionListeners()) { dateFilterCheckBox.removeActionListener(listener); } + for (ActionListener listener : rangeRadioButton.getActionListeners()) { + rangeRadioButton.removeActionListener(listener); + } + for (ActionListener listener : mostRecentRadioButton.getActionListeners()) { + mostRecentRadioButton.removeActionListener(listener); + } + for (ActionListener listener : rangeRadioButton.getActionListeners()) { + rangeRadioButton.removeActionListener(listener); + } for (ActionListener listener : startCheckBox.getActionListeners()) { startCheckBox.removeActionListener(listener); } From 0ef55c7f6d8cfec7801df449cde936db2c46573f Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 10:29:01 -0400 Subject: [PATCH 09/27] 6714 make grouping and sorting attrs based on search type --- .../discovery/search/DiscoveryAttributes.java | 17 ++- .../discovery/search/ResultsSorter.java | 24 ++-- .../discovery/ui/AbstractFiltersPanel.java | 49 ++++++++ .../autopsy/discovery/ui/DiscoveryDialog.java | 112 ++++++++++++------ .../discovery/ui/DomainFilterPanel.java | 4 + 5 files changed, 156 insertions(+), 50 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java index 751b47e849..b5da230a10 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java @@ -658,12 +658,21 @@ public class DiscoveryAttributes { } /** - * Get the list of enums that are valid for grouping images. + * Get the list of enums that are valid for grouping files. * - * @return enums that can be used to group images + * @return Enums that can be used to group files. */ - public static List getOptionsForGrouping() { - return Arrays.asList(FILE_SIZE, FREQUENCY, PARENT_PATH, OBJECT_DETECTED, HASH_LIST_NAME, INTERESTING_ITEM_SET, FIRST_DATE, MOST_RECENT_DATE); + public static List getOptionsForGroupingForFiles() { + return Arrays.asList(FILE_SIZE, FREQUENCY, PARENT_PATH, OBJECT_DETECTED, HASH_LIST_NAME, INTERESTING_ITEM_SET); + } + + /** + * Get the list of enums that are valid for grouping files. + * + * @return Enums that can be used to group files. + */ + public static List getOptionsForGroupingForDomains() { + return Arrays.asList(MOST_RECENT_DATE, FIRST_DATE); } } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/ResultsSorter.java b/Core/src/org/sleuthkit/autopsy/discovery/search/ResultsSorter.java index 27f0fcb202..d20bc4df30 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/ResultsSorter.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/ResultsSorter.java @@ -229,16 +229,16 @@ public class ResultsSorter implements Comparator { return compareStrings(((ResultFile) result1).getFirstInstance().getName().toLowerCase(), (((ResultFile) result2).getFirstInstance().getName().toLowerCase())); }; } - + /** * Sorts domain names in lexographical order, ignoring case. */ private static Comparator getDomainNameComparator() { return (Result domain1, Result domain2) -> { - if(domain1.getType() != SearchData.Type.DOMAIN) { + if (domain1.getType() != SearchData.Type.DOMAIN) { return 0; } - + ResultDomain first = (ResultDomain) domain1; ResultDomain second = (ResultDomain) domain2; return compareStrings(first.getDomain().toLowerCase(), second.getDomain().toLowerCase()); @@ -312,7 +312,7 @@ public class ResultsSorter implements Comparator { BY_KEYWORD_LIST_NAMES(Arrays.asList(new DiscoveryAttributes.KeywordListAttribute()), Bundle.FileSorter_SortingMethod_keywordlist_displayName()), // Sort alphabetically by list of keyword list names found BY_FULL_PATH(new ArrayList<>(), - Bundle.FileSorter_SortingMethod_fullPath_displayName()), // Sort alphabetically by path + Bundle.FileSorter_SortingMethod_fullPath_displayName()), // Sort alphabetically by path BY_DOMAIN_NAME(new ArrayList<>(), Bundle.FileSorter_SortingMethod_domain_displayName()); @@ -334,12 +334,22 @@ public class ResultsSorter implements Comparator { } /** - * Get the list of enums that are valid for ordering images. + * Get the list of enums that are valid for ordering files. * - * @return enums that can be used to ordering images. + * @return Enums that can be used to ordering files. */ - public static List getOptionsForOrdering() { + public static List getOptionsForOrderingFiles() { return Arrays.asList(BY_FILE_SIZE, BY_FULL_PATH, BY_FILE_NAME, BY_DATA_SOURCE); } + + /** + * Get the list of enums that are valid for ordering files. + * + * @return Enums that can be used to ordering files. + */ + public static List getOptionsForOrderingDomains() { + return Arrays.asList(BY_DOMAIN_NAME, BY_DATA_SOURCE); + } + } } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java index 0736708e9c..298789bf3b 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/AbstractFiltersPanel.java @@ -32,6 +32,9 @@ import javax.swing.JSplitPane; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.apache.commons.lang3.StringUtils; +import org.sleuthkit.autopsy.discovery.search.DiscoveryAttributes.GroupingAttributeType; +import org.sleuthkit.autopsy.discovery.search.Group; +import org.sleuthkit.autopsy.discovery.search.ResultsSorter.SortingMethod; import org.sleuthkit.autopsy.discovery.search.SearchData; import org.sleuthkit.autopsy.discovery.search.SearchFiltering; @@ -55,6 +58,9 @@ abstract class AbstractFiltersPanel extends JPanel implements ActionListener, Li private final JPanel secondColumnPanel = new JPanel(); private int firstColumnY = 0; private int secondColumnY = 0; + private SortingMethod lastSortingMethod = SortingMethod.BY_FILE_NAME; + private GroupingAttributeType lastGroupingAttributeType = GroupingAttributeType.PARENT_PATH; + private Group.GroupSortingAlgorithm lastGroupSortingAlg = Group.GroupSortingAlgorithm.BY_GROUP_SIZE; /** * Setup necessary for implementations of this abstract class. @@ -64,6 +70,7 @@ abstract class AbstractFiltersPanel extends JPanel implements ActionListener, Li secondColumnPanel.setLayout(new GridBagLayout()); } + /** * Get the type of results this filters panel is for. * @@ -271,4 +278,46 @@ abstract class AbstractFiltersPanel extends JPanel implements ActionListener, Li } } + /** + * @return the lastSortingMethod + */ + SortingMethod getLastSortingMethod() { + return lastSortingMethod; + } + + /** + * @param lastSortingMethod the lastSortingMethod to set + */ + final void setLastSortingMethod(SortingMethod lastSortingMethod) { + this.lastSortingMethod = lastSortingMethod; + } + + /** + * @return the lastGroupingAttributeType + */ + GroupingAttributeType getLastGroupingAttributeType() { + return lastGroupingAttributeType; + } + + /** + * @param lastGroupingAttributeType the lastGroupingAttributeType to set + */ + final void setLastGroupingAttributeType(GroupingAttributeType lastGroupingAttributeType) { + this.lastGroupingAttributeType = lastGroupingAttributeType; + } + + /** + * @return the lastGroupSortingAlg + */ + Group.GroupSortingAlgorithm getLastGroupSortingAlg() { + return lastGroupSortingAlg; + } + + /** + * @param lastGroupSortingAlg the lastGroupSortingAlg to set + */ + final void setLastGroupSortingAlg(Group.GroupSortingAlgorithm lastGroupSortingAlg) { + this.lastGroupSortingAlg = lastGroupSortingAlg; + } + } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 474b766910..cc029c2218 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -21,6 +21,8 @@ package org.sleuthkit.autopsy.discovery.ui; import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import static java.awt.BorderLayout.CENTER; import java.awt.Color; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; @@ -37,16 +39,12 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.discovery.search.DiscoveryAttributes; import org.sleuthkit.autopsy.discovery.search.DiscoveryEventUtils; import org.sleuthkit.autopsy.discovery.search.Group; import org.sleuthkit.autopsy.discovery.search.Group.GroupSortingAlgorithm; -import static org.sleuthkit.autopsy.discovery.search.Group.GroupSortingAlgorithm.BY_GROUP_SIZE; import org.sleuthkit.autopsy.discovery.search.DiscoveryAttributes.GroupingAttributeType; -import static org.sleuthkit.autopsy.discovery.search.DiscoveryAttributes.GroupingAttributeType.PARENT_PATH; import org.sleuthkit.autopsy.discovery.search.ResultsSorter; import org.sleuthkit.autopsy.discovery.search.ResultsSorter.SortingMethod; -import static org.sleuthkit.autopsy.discovery.search.ResultsSorter.SortingMethod.BY_FILE_NAME; import org.sleuthkit.autopsy.discovery.search.SearchData; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.ModuleDataEvent; @@ -111,12 +109,34 @@ final class DiscoveryDialog extends javax.swing.JDialog { } } }; - for (GroupSortingAlgorithm groupSortAlgorithm : GroupSortingAlgorithm.values()) { - groupSortingComboBox.addItem(groupSortAlgorithm); - } updateSearchSettings(); + groupByCombobox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (event.getStateChange() == ItemEvent.SELECTED) { + getSelectedFilterPanel().setLastGroupingAttributeType((GroupingAttributeType) groupByCombobox.getSelectedItem()); + } + } + }); + orderByCombobox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (event.getStateChange() == ItemEvent.SELECTED) { + getSelectedFilterPanel().setLastSortingMethod((SortingMethod) groupByCombobox.getSelectedItem()); + } + } + }); + groupSortingComboBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (event.getStateChange() == ItemEvent.SELECTED) { + getSelectedFilterPanel().setLastGroupSortingAlg((GroupSortingAlgorithm) groupByCombobox.getSelectedItem()); + } + } + }); Case.addEventTypeSubscriber(CASE_EVENTS_OF_INTEREST, this.new CasePropertyChangeListener()); IngestManager.getInstance().addIngestModuleEventListener(INGEST_MODULE_EVENTS_OF_INTEREST, this.new ModuleChangeListener()); + } /** @@ -140,7 +160,6 @@ final class DiscoveryDialog extends javax.swing.JDialog { add(imageFilterPanel, CENTER); imageFilterPanel.addPropertyChangeListener(listener); updateComboBoxes(); - groupSortingComboBox.setSelectedItem(BY_GROUP_SIZE); pack(); repaint(); } @@ -149,8 +168,8 @@ final class DiscoveryDialog extends javax.swing.JDialog { * Set the type buttons to a default state where none are selected. */ private void unselectAllButtons() { - imagesButton.setSelected(false); - imagesButton.setEnabled(true); + imagesButton.setSelected(false); + imagesButton.setEnabled(true); imagesButton.setBackground(UNSELECTED_COLOR); videosButton.setSelected(false); videosButton.setEnabled(true); @@ -167,20 +186,54 @@ final class DiscoveryDialog extends javax.swing.JDialog { * Private helper method to perform update of comboboxes update. */ private void updateComboBoxes() { - groupByCombobox.removeAllItems(); // Set up the grouping attributes - for (DiscoveryAttributes.GroupingAttributeType groupingType : DiscoveryAttributes.GroupingAttributeType.getOptionsForGrouping()) { + List groupingAttrs = new ArrayList<>(); + List sortingMethods = new ArrayList<>(); + groupByCombobox.removeAllItems(); + if (type == SearchData.Type.DOMAIN) { + groupingAttrs.addAll(GroupingAttributeType.getOptionsForGroupingForDomains()); + sortingMethods.addAll(SortingMethod.getOptionsForOrderingDomains()); + } else { + groupingAttrs.addAll(GroupingAttributeType.getOptionsForGroupingForFiles()); + sortingMethods.addAll(SortingMethod.getOptionsForOrderingFiles()); + } + for (GroupingAttributeType groupingType : groupingAttrs) { addTypeToGroupByComboBox(groupingType); } - groupByCombobox.setSelectedItem(PARENT_PATH); + groupByCombobox.setSelectedItem(getSelectedFilterPanel().getLastGroupingAttributeType()); orderByCombobox.removeAllItems(); // Set up the file order list - for (ResultsSorter.SortingMethod method : ResultsSorter.SortingMethod.getOptionsForOrdering()) { + for (SortingMethod method : sortingMethods) { if (method != SortingMethod.BY_FREQUENCY || CentralRepository.isEnabled()) { orderByCombobox.addItem(method); } } - orderByCombobox.setSelectedItem(BY_FILE_NAME); + orderByCombobox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()) + ); + for (GroupSortingAlgorithm groupSortAlgorithm : GroupSortingAlgorithm.values()) { + groupSortingComboBox.addItem(groupSortAlgorithm); + } + groupSortingComboBox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()); + } + + private AbstractFiltersPanel getSelectedFilterPanel() { + switch (type) { + case IMAGE: + return imageFilterPanel; + break; + case VIDEO: + return videoFilterPanel; + break; + case DOCUMENT: + return documentFilterPanel; + break; + case DOMAIN: + return domainFilterPanel; + break; + default: + return imageFilterPanel; + break; + } } /** @@ -221,29 +274,9 @@ final class DiscoveryDialog extends javax.swing.JDialog { * Validate the filter settings for File type filters. */ synchronized void validateDialog() { - switch (type) { - case IMAGE: - if (imageFilterPanel != null) { - imageFilterPanel.validateFields(); - } - break; - case VIDEO: - if (videoFilterPanel != null) { - videoFilterPanel.validateFields(); - } - break; - case DOCUMENT: - if (documentFilterPanel != null) { - documentFilterPanel.validateFields(); - } - break; - case DOMAIN: - if (domainFilterPanel != null) { - domainFilterPanel.validateFields(); - } - break; - default: - break; + AbstractFiltersPanel panel = getSelectedFilterPanel(); + if (panel != null) { + panel.validateFields(); } } @@ -554,7 +587,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.SearchStartedEvent(type)); // Get the grouping attribute and group sorting method - DiscoveryAttributes.AttributeType groupingAttr = groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex()).getAttributeType(); + AttributeType groupingAttr = groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex()).getAttributeType(); Group.GroupSortingAlgorithm groupSortAlgorithm = groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex()); // Get the file sorting method @@ -585,6 +618,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { domainsButton.setForeground(Color.BLACK); type = SearchData.Type.DOMAIN; domainFilterPanel.addPropertyChangeListener(listener); + updateComboBoxes(); validateDialog(); pack(); repaint(); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainFilterPanel.java index 45ba72338c..cf3209146d 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DomainFilterPanel.java @@ -19,6 +19,8 @@ package org.sleuthkit.autopsy.discovery.ui; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; +import org.sleuthkit.autopsy.discovery.search.DiscoveryAttributes; +import org.sleuthkit.autopsy.discovery.search.ResultsSorter; import org.sleuthkit.autopsy.discovery.search.SearchData; /** @@ -44,6 +46,8 @@ public class DomainFilterPanel extends AbstractFiltersPanel { } addFilter(new PastOccurrencesFilterPanel(TYPE), true, pastOccurrencesIndices, 0); addPanelsToScrollPane(domainFiltersSplitPane); + setLastGroupingAttributeType(DiscoveryAttributes.GroupingAttributeType.MOST_RECENT_DATE); + setLastSortingMethod(ResultsSorter.SortingMethod.BY_DOMAIN_NAME); } /** From 67e716f13a5ba82d0a94eaf57c997c2451604c1b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 10:29:54 -0400 Subject: [PATCH 10/27] 6714 add missing semi-colon --- .../src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index cc029c2218..8220643e0c 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -208,7 +208,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { orderByCombobox.addItem(method); } } - orderByCombobox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()) + orderByCombobox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()); ); for (GroupSortingAlgorithm groupSortAlgorithm : GroupSortingAlgorithm.values()) { groupSortingComboBox.addItem(groupSortAlgorithm); From 812686e81377e9e64c8cbcb0dd15daacdd4bc060 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 10:30:25 -0400 Subject: [PATCH 11/27] 6714 remove extra symbols --- Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 8220643e0c..18861dcc38 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -209,7 +209,6 @@ final class DiscoveryDialog extends javax.swing.JDialog { } } orderByCombobox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()); - ); for (GroupSortingAlgorithm groupSortAlgorithm : GroupSortingAlgorithm.values()) { groupSortingComboBox.addItem(groupSortAlgorithm); } From 930d603bc27f81bc05f24bf3823dc993d3bc95d7 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 10:33:51 -0400 Subject: [PATCH 12/27] 6714-fix event name for variable --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 18861dcc38..d4a5d25e41 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -112,7 +112,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { updateSearchSettings(); groupByCombobox.addItemListener(new ItemListener() { @Override - public void itemStateChanged(ItemEvent e) { + public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { getSelectedFilterPanel().setLastGroupingAttributeType((GroupingAttributeType) groupByCombobox.getSelectedItem()); } @@ -120,7 +120,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { }); orderByCombobox.addItemListener(new ItemListener() { @Override - public void itemStateChanged(ItemEvent e) { + public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { getSelectedFilterPanel().setLastSortingMethod((SortingMethod) groupByCombobox.getSelectedItem()); } @@ -128,7 +128,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { }); groupSortingComboBox.addItemListener(new ItemListener() { @Override - public void itemStateChanged(ItemEvent e) { + public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { getSelectedFilterPanel().setLastGroupSortingAlg((GroupSortingAlgorithm) groupByCombobox.getSelectedItem()); } From 7fc5e77bab05490d46260b39dfcc7972cbb326ed Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 10:42:03 -0400 Subject: [PATCH 13/27] 6714 fix import --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index d4a5d25e41..fd5860b7cb 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -39,6 +39,7 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.discovery.search.DiscoveryAttributes; import org.sleuthkit.autopsy.discovery.search.DiscoveryEventUtils; import org.sleuthkit.autopsy.discovery.search.Group; import org.sleuthkit.autopsy.discovery.search.Group.GroupSortingAlgorithm; @@ -586,7 +587,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.SearchStartedEvent(type)); // Get the grouping attribute and group sorting method - AttributeType groupingAttr = groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex()).getAttributeType(); + DiscoveryAttributes.AttributeType groupingAttr = groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex()).getAttributeType(); Group.GroupSortingAlgorithm groupSortAlgorithm = groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex()); // Get the file sorting method From 0abd1dfb2740e751eedc449ad0e97e56d7680614 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 10:43:12 -0400 Subject: [PATCH 14/27] 6714 remove unreachable breaks after returns --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index fd5860b7cb..6098045c6d 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -220,19 +220,14 @@ final class DiscoveryDialog extends javax.swing.JDialog { switch (type) { case IMAGE: return imageFilterPanel; - break; case VIDEO: return videoFilterPanel; - break; case DOCUMENT: return documentFilterPanel; - break; case DOMAIN: return domainFilterPanel; - break; default: return imageFilterPanel; - break; } } From d34cc3ccafbbe2c876cd2432d97bc9ac6bf573a9 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 11:06:34 -0400 Subject: [PATCH 15/27] 6714 fix setting previously used settings --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 6098045c6d..b7b2ab902e 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -115,7 +115,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupingAttributeType((GroupingAttributeType) groupByCombobox.getSelectedItem()); + getSelectedFilterPanel().setLastGroupingAttributeType((Grouping) groupByCombobox.getSelectedItem()); } } }); @@ -123,7 +123,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastSortingMethod((SortingMethod) groupByCombobox.getSelectedItem()); + getSelectedFilterPanel().setLastSortingMethod((SortingMethod) orderByCombobox.getSelectedItem()); } } }); @@ -131,7 +131,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupSortingAlg((GroupSortingAlgorithm) groupByCombobox.getSelectedItem()); + getSelectedFilterPanel().setLastGroupSortingAlg((GroupingAttributeType) groupSortingComboBox.getSelectedItem()); } } }); From 44c7bc934ef283074968b558e409799deae56eed Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 11:08:08 -0400 Subject: [PATCH 16/27] 6714 fix casting --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index b7b2ab902e..0c9712d467 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -115,7 +115,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupingAttributeType((Grouping) groupByCombobox.getSelectedItem()); + getSelectedFilterPanel().setLastGroupingAttributeType((GroupingAttributeType) groupByCombobox.getSelectedItem()); } } }); @@ -131,7 +131,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupSortingAlg((GroupingAttributeType) groupSortingComboBox.getSelectedItem()); + getSelectedFilterPanel().setLastGroupSortingAlg((GroupSortingAlgorithm) groupSortingComboBox.getSelectedItem()); } } }); From 0761b8d9d280f178dd06cf3224f0c02a8e10d04d Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 11:10:47 -0400 Subject: [PATCH 17/27] 6714 remove need for casting --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 0c9712d467..6e5b2073cf 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -115,7 +115,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupingAttributeType((GroupingAttributeType) groupByCombobox.getSelectedItem()); + getSelectedFilterPanel().setLastGroupingAttributeType(groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex()))); } } }); @@ -123,7 +123,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastSortingMethod((SortingMethod) orderByCombobox.getSelectedItem()); + getSelectedFilterPanel().setLastSortingMethod(orderByCombobox.getItemAt(orderByCombobox.getSelectedIndex()); } } }); @@ -131,7 +131,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupSortingAlg((GroupSortingAlgorithm) groupSortingComboBox.getSelectedItem()); + getSelectedFilterPanel().setLastGroupSortingAlg(groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex())); } } }); From 75e83325c8bb3308747096a04953ab707f886eff Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 11:14:09 -0400 Subject: [PATCH 18/27] 6714 update settings when buttons other than Domain are selected --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 6e5b2073cf..c83ea36fc7 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -497,6 +497,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { imagesButton.setForeground(Color.BLACK); type = SearchData.Type.IMAGE; imageFilterPanel.addPropertyChangeListener(listener); + updateComboBoxes(); validateDialog(); pack(); repaint(); @@ -512,6 +513,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { videosButton.setForeground(Color.BLACK); videoFilterPanel.addPropertyChangeListener(listener); type = SearchData.Type.VIDEO; + updateComboBoxes(); validateDialog(); pack(); repaint(); @@ -527,6 +529,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { documentsButton.setForeground(Color.BLACK); type = SearchData.Type.DOCUMENT; documentFilterPanel.addPropertyChangeListener(listener); + updateComboBoxes(); validateDialog(); pack(); repaint(); From 6db1f06410cbcc58bc39d2aef9a714efd7fd83f3 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 11:16:08 -0400 Subject: [PATCH 19/27] 6714 remove extra parens --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index c83ea36fc7..e0a3f243b8 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -115,7 +115,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupingAttributeType(groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex()))); + getSelectedFilterPanel().setLastGroupingAttributeType(groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex())); } } }); @@ -131,7 +131,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupSortingAlg(groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex())); + getSelectedFilterPanel().setLastGroupSortingAlg(groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex()); } } }); From 0ca3f155d5fdaedb677b3bd9c5ba6b70176b1183 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 11:17:46 -0400 Subject: [PATCH 20/27] 6714 add back parens that should of been there --- .../org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index e0a3f243b8..e3d8639c6e 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -123,7 +123,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastSortingMethod(orderByCombobox.getItemAt(orderByCombobox.getSelectedIndex()); + getSelectedFilterPanel().setLastSortingMethod(orderByCombobox.getItemAt(orderByCombobox.getSelectedIndex())); } } }); @@ -131,7 +131,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupSortingAlg(groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex()); + getSelectedFilterPanel().setLastGroupSortingAlg(groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex())); } } }); From d2483bed4b40a1f09341de5a8764834034f5ff66 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 12:13:32 -0400 Subject: [PATCH 21/27] 6714 fix preserving of previous settings --- .../discovery/search/DiscoveryAttributes.java | 2 +- .../autopsy/discovery/ui/DiscoveryDialog.java | 20 ++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java index b5da230a10..3c073c80ba 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java @@ -672,7 +672,7 @@ public class DiscoveryAttributes { * @return Enums that can be used to group files. */ public static List getOptionsForGroupingForDomains() { - return Arrays.asList(MOST_RECENT_DATE, FIRST_DATE); + return Arrays.asList(FREQUENCY, MOST_RECENT_DATE, FIRST_DATE); } } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index e3d8639c6e..2c7e942538 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -31,6 +31,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; +import javax.swing.SwingUtilities; import org.apache.commons.lang.StringUtils; import org.openide.util.NbBundle.Messages; import org.openide.windows.WindowManager; @@ -115,7 +116,10 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupingAttributeType(groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex())); + SwingUtilities.invokeLater(() -> { + getSelectedFilterPanel().setLastGroupingAttributeType(groupByCombobox.getItemAt(groupByCombobox.getSelectedIndex())); + }); + } } }); @@ -123,7 +127,9 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastSortingMethod(orderByCombobox.getItemAt(orderByCombobox.getSelectedIndex())); + SwingUtilities.invokeLater(() -> { + getSelectedFilterPanel().setLastSortingMethod(orderByCombobox.getItemAt(orderByCombobox.getSelectedIndex())); + }); } } }); @@ -131,7 +137,9 @@ final class DiscoveryDialog extends javax.swing.JDialog { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { - getSelectedFilterPanel().setLastGroupSortingAlg(groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex())); + SwingUtilities.invokeLater(() -> { + getSelectedFilterPanel().setLastGroupSortingAlg(groupSortingComboBox.getItemAt(groupSortingComboBox.getSelectedIndex())); + }); } } }); @@ -210,12 +218,18 @@ final class DiscoveryDialog extends javax.swing.JDialog { } } orderByCombobox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()); + groupSortingComboBox.removeAllItems(); for (GroupSortingAlgorithm groupSortAlgorithm : GroupSortingAlgorithm.values()) { groupSortingComboBox.addItem(groupSortAlgorithm); } groupSortingComboBox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()); } + /** + * Private helper method to get the correct panel for the selected type. + * + * @return The panel that corresponds to the currently selected type. + */ private AbstractFiltersPanel getSelectedFilterPanel() { switch (type) { case IMAGE: From f3c0a1cd38eb89cd71e4cbc7a44a3ee45c9f7532 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 12:21:44 -0400 Subject: [PATCH 22/27] 6714 clean up and fix comments in DiscoveryAttributes --- .../autopsy/discovery/search/DiscoveryAttributes.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java index 3c073c80ba..a9ebbadfb2 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java @@ -483,6 +483,9 @@ public class DiscoveryAttributes { } } + /** + * Attribute for grouping/sorting by date of most recent activity. + */ static class MostRecentActivityDateAttribute extends AttributeType { @Override @@ -492,6 +495,9 @@ public class DiscoveryAttributes { } + /** + * Attribute for grouping/sorting by date of first activity. + */ static class FirstActivityDateAttribute extends AttributeType { @Override From 67827bc5148aa2860542712fbd65c68cf24fdd63 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Sep 2020 14:45:12 -0400 Subject: [PATCH 23/27] 6714 fix bug with saving sort --- Core/nbproject/project.properties | 239 ++++----- Core/nbproject/project.xml | 488 ++++++++---------- .../autopsy/discovery/ui/DiscoveryDialog.java | 2 +- 3 files changed, 325 insertions(+), 404 deletions(-) diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index 37d8de5814..8d9c857fba 100644 --- a/Core/nbproject/project.properties +++ b/Core/nbproject/project.properties @@ -1,141 +1,118 @@ -file.reference.activemq-all-5.11.1.jar=release/modules/ext/activemq-all-5.11.1.jar -file.reference.apache-mime4j-core-0.8.2.jar=release\\modules\\ext\\apache-mime4j-core-0.8.2.jar -file.reference.apache-mime4j-dom-0.8.2.jar=release\\modules\\ext\\apache-mime4j-dom-0.8.2.jar -file.reference.asm-7.0.jar=release\\modules\\ext\\asm-7.0.jar -file.reference.batik-awt-util-1.6.jar=release/modules/ext/batik-awt-util-1.6.jar -file.reference.batik-dom-1.6.jar=release/modules/ext/batik-dom-1.6.jar -file.reference.batik-svg-dom-1.6.jar=release/modules/ext/batik-svg-dom-1.6.jar -file.reference.batik-svggen-1.6.jar=release/modules/ext/batik-svggen-1.6.jar -file.reference.batik-util-1.6.jar=release/modules/ext/batik-util-1.6.jar -file.reference.batik-xml-1.6.jar=release/modules/ext/batik-xml-1.6.jar -file.reference.bcmail-jdk15on-1.60.jar=release\\modules\\ext\\bcmail-jdk15on-1.60.jar -file.reference.bcpkix-jdk15on-1.60.jar=release\\modules\\ext\\bcpkix-jdk15on-1.60.jar -file.reference.bcprov-ext-jdk15on-1.54.jar=release/modules/ext/bcprov-ext-jdk15on-1.54.jar -file.reference.bcprov-jdk15on-1.60.jar=release\\modules\\ext\\bcprov-jdk15on-1.60.jar -file.reference.boilerpipe-1.1.0.jar=release\\modules\\ext\\boilerpipe-1.1.0.jar -file.reference.byte-buddy-1.10.13.jar=release\\modules\\ext\\byte-buddy-1.10.13.jar -file.reference.byte-buddy-agent-1.10.13.jar=release\\modules\\ext\\byte-buddy-agent-1.10.13.jar -file.reference.c3p0-0.9.5.jar=release/modules/ext/c3p0-0.9.5.jar -file.reference.cdm-4.5.5.jar=release\\modules\\ext\\cdm-4.5.5.jar +file.reference.activemq-all-5.11.1.jar=release\\modules\\ext\\activemq-all-5.11.1.jar +file.reference.animal-sniffer-annotations-1.17.jar=release\\modules\\ext\\animal-sniffer-annotations-1.17.jar +file.reference.api-common-1.7.0.jar=release\\modules\\ext\\api-common-1.7.0.jar +file.reference.batik-awt-util-1.6.jar=release\\modules\\ext\\batik-awt-util-1.6.jar +file.reference.batik-dom-1.6.jar=release\\modules\\ext\\batik-dom-1.6.jar +file.reference.batik-svg-dom-1.6.jar=release\\modules\\ext\\batik-svg-dom-1.6.jar +file.reference.batik-svggen-1.6.jar=release\\modules\\ext\\batik-svggen-1.6.jar +file.reference.batik-util-1.6.jar=release\\modules\\ext\\batik-util-1.6.jar +file.reference.batik-xml-1.6.jar=release\\modules\\ext\\batik-xml-1.6.jar +file.reference.bcpkix-jdk15on-1.54.jar=release\\modules\\ext\\bcpkix-jdk15on-1.54.jar +file.reference.bcprov-ext-jdk15on-1.54.jar=release\\modules\\ext\\bcprov-ext-jdk15on-1.54.jar +file.reference.bcprov-jdk15on-1.52.jar=release\\modules\\ext\\bcprov-jdk15on-1.52.jar +file.reference.bcprov-jdk15on-1.54.jar=release\\modules\\ext\\bcprov-jdk15on-1.54.jar +file.reference.c3p0-0.9.5.jar=release\\modules\\ext\\c3p0-0.9.5.jar +file.reference.checker-compat-qual-2.5.3.jar=release\\modules\\ext\\checker-compat-qual-2.5.3.jar +file.reference.commons-beanutils-1.9.2.jar=release\\modules\\ext\\commons-beanutils-1.9.2.jar file.reference.commons-codec-1.11.jar=release\\modules\\ext\\commons-codec-1.11.jar -file.reference.commons-collections4-4.2.jar=release\\modules\\ext\\commons-collections4-4.2.jar -file.reference.commons-csv-1.6.jar=release\\modules\\ext\\commons-csv-1.6.jar -file.reference.commons-dbcp2-2.1.1.jar=release/modules/ext/commons-dbcp2-2.1.1.jar -file.reference.commons-exec-1.3.jar=release\\modules\\ext\\commons-exec-1.3.jar -file.reference.commons-io-2.6.jar=release\\modules\\ext\\commons-io-2.6.jar -file.reference.commons-lang3-3.8.1.jar=release\\modules\\ext\\commons-lang3-3.8.1.jar -file.reference.commons-pool2-2.4.2.jar=release/modules/ext/commons-pool2-2.4.2.jar -file.reference.cxf-rt-rs-client-3.3.0.jar=release\\modules\\ext\\cxf-rt-rs-client-3.3.0.jar -file.reference.DatCon.jar=release/modules/ext/DatCon.jar -file.reference.dec-0.1.2.jar=release\\modules\\ext\\dec-0.1.2.jar -file.reference.decodetect-core-0.3.jar=release/modules/ext/decodetect-core-0.3.jar -file.reference.fontbox-2.0.13.jar=release\\modules\\ext\\fontbox-2.0.13.jar -file.reference.geoapi-3.0.1.jar=release\\modules\\ext\\geoapi-3.0.1.jar -file.reference.grib-4.5.5.jar=release\\modules\\ext\\grib-4.5.5.jar -file.reference.httpclient-4.5.6.jar=release\\modules\\ext\\httpclient-4.5.6.jar -file.reference.httpmime-4.5.6.jar=release\\modules\\ext\\httpmime-4.5.6.jar -file.reference.httpservices-4.5.5.jar=release\\modules\\ext\\httpservices-4.5.5.jar -file.reference.icepdf-core-6.2.2.jar=release/modules/ext/icepdf-core-6.2.2.jar -file.reference.icepdf-viewer-6.2.2.jar=release/modules/ext/icepdf-viewer-6.2.2.jar -file.reference.isoparser-1.1.22.jar=release\\modules\\ext\\isoparser-1.1.22.jar +file.reference.commons-collections-3.2.2.jar=release\\modules\\ext\\commons-collections-3.2.2.jar +file.reference.commons-dbcp2-2.1.1.jar=release\\modules\\ext\\commons-dbcp2-2.1.1.jar +file.reference.commons-digester-1.8.1.jar=release\\modules\\ext\\commons-digester-1.8.1.jar +file.reference.commons-lang-2.6.jar=release\\modules\\ext\\commons-lang-2.6.jar +file.reference.commons-lang3-3.5.jar=release\\modules\\ext\\commons-lang3-3.5.jar +file.reference.commons-logging-1.2.jar=release\\modules\\ext\\commons-logging-1.2.jar +file.reference.commons-pool2-2.4.2.jar=release\\modules\\ext\\commons-pool2-2.4.2.jar +file.reference.commons-validator-1.6.jar=release\\modules\\ext\\commons-validator-1.6.jar +file.reference.curator-client-2.8.0.jar=release\\modules\\ext\\curator-client-2.8.0.jar +file.reference.curator-framework-2.8.0.jar=release\\modules\\ext\\curator-framework-2.8.0.jar +file.reference.curator-recipes-2.8.0.jar=release\\modules\\ext\\curator-recipes-2.8.0.jar +file.reference.DatCon.jar=release\\modules\\ext\\DatCon.jar +file.reference.decodetect-core-0.3.jar=release\\modules\\ext\\decodetect-core-0.3.jar +file.reference.error_prone_annotations-2.3.2.jar=release\\modules\\ext\\error_prone_annotations-2.3.2.jar +file.reference.failureaccess-1.0.1.jar=release\\modules\\ext\\failureaccess-1.0.1.jar +file.reference.gax-1.44.0.jar=release\\modules\\ext\\gax-1.44.0.jar +file.reference.gax-grpc-1.44.0.jar=release\\modules\\ext\\gax-grpc-1.44.0.jar +file.reference.gax-httpjson-0.61.0.jar=release\\modules\\ext\\gax-httpjson-0.61.0.jar +file.reference.google-api-client-1.27.0.jar=release\\modules\\ext\\google-api-client-1.27.0.jar +file.reference.google-api-services-translate-v2-rev20170525-1.27.0.jar=release\\modules\\ext\\google-api-services-translate-v2-rev20170525-1.27.0.jar +file.reference.google-auth-library-credentials-0.15.0.jar=release\\modules\\ext\\google-auth-library-credentials-0.15.0.jar +file.reference.google-auth-library-oauth2-http-0.15.0.jar=release\\modules\\ext\\google-auth-library-oauth2-http-0.15.0.jar +file.reference.google-cloud-core-1.70.0.jar=release\\modules\\ext\\google-cloud-core-1.70.0.jar +file.reference.google-cloud-core-grpc-1.70.0.jar=release\\modules\\ext\\google-cloud-core-grpc-1.70.0.jar +file.reference.google-cloud-core-http-1.70.0.jar=release\\modules\\ext\\google-cloud-core-http-1.70.0.jar +file.reference.google-cloud-translate-1.70.0.jar=release\\modules\\ext\\google-cloud-translate-1.70.0.jar +file.reference.google-http-client-1.29.0.jar=release\\modules\\ext\\google-http-client-1.29.0.jar +file.reference.google-http-client-appengine-1.29.0.jar=release\\modules\\ext\\google-http-client-appengine-1.29.0.jar +file.reference.google-http-client-jackson2-1.29.0.jar=release\\modules\\ext\\google-http-client-jackson2-1.29.0.jar +file.reference.google-oauth-client-1.28.0.jar=release\\modules\\ext\\google-oauth-client-1.28.0.jar +file.reference.grpc-alts-1.19.0.jar=release\\modules\\ext\\grpc-alts-1.19.0.jar +file.reference.grpc-auth-1.19.0.jar=release\\modules\\ext\\grpc-auth-1.19.0.jar +file.reference.grpc-context-1.19.0.jar=release\\modules\\ext\\grpc-context-1.19.0.jar +file.reference.grpc-core-1.19.0.jar=release\\modules\\ext\\grpc-core-1.19.0.jar +file.reference.grpc-grpclb-1.19.0.jar=release\\modules\\ext\\grpc-grpclb-1.19.0.jar +file.reference.grpc-netty-shaded-1.19.0.jar=release\\modules\\ext\\grpc-netty-shaded-1.19.0.jar +file.reference.grpc-protobuf-1.19.0.jar=release\\modules\\ext\\grpc-protobuf-1.19.0.jar +file.reference.grpc-protobuf-lite-1.19.0.jar=release\\modules\\ext\\grpc-protobuf-lite-1.19.0.jar +file.reference.grpc-stub-1.19.0.jar=release\\modules\\ext\\grpc-stub-1.19.0.jar +file.reference.gson-2.7.jar=release\\modules\\ext\\gson-2.7.jar +file.reference.guava-27.1-android.jar=release\\modules\\ext\\guava-27.1-android.jar +file.reference.httpclient-4.5.5.jar=release\\modules\\ext\\httpclient-4.5.5.jar +file.reference.httpcore-4.4.9.jar=release\\modules\\ext\\httpcore-4.4.9.jar +file.reference.icepdf-core-6.2.2.jar=release\\modules\\ext\\icepdf-core-6.2.2.jar +file.reference.icepdf-viewer-6.2.2.jar=release\\modules\\ext\\icepdf-viewer-6.2.2.jar +file.reference.j2objc-annotations-1.1.jar=release\\modules\\ext\\j2objc-annotations-1.1.jar file.reference.jackcess-2.2.0.jar=release\\modules\\ext\\jackcess-2.2.0.jar file.reference.jackcess-encrypt-2.1.4.jar=release\\modules\\ext\\jackcess-encrypt-2.1.4.jar -file.reference.jackson-annotations-2.9.7.jar=release\\modules\\ext\\jackson-annotations-2.9.7.jar +file.reference.jackson-annotations-2.9.0.jar=release\\modules\\ext\\jackson-annotations-2.9.0.jar file.reference.jackson-core-2.9.7.jar=release\\modules\\ext\\jackson-core-2.9.7.jar file.reference.jackson-databind-2.9.7.jar=release\\modules\\ext\\jackson-databind-2.9.7.jar -file.reference.jai-imageio-core-1.4.0.jar=release\\modules\\ext\\jai-imageio-core-1.4.0.jar -file.reference.jai_core-1.1.3.jar=release/modules/ext/jai_core-1.1.3.jar -file.reference.jai_imageio-1.1.jar=release/modules/ext/jai_imageio-1.1.jar -file.reference.java-libpst-0.8.1.jar=release\\modules\\ext\\java-libpst-0.8.1.jar -file.reference.javax.activation-1.2.0.jar=release\\modules\\ext\\javax.activation-1.2.0.jar +file.reference.jai_core-1.1.3.jar=release\\modules\\ext\\jai_core-1.1.3.jar +file.reference.jai_imageio-1.1.jar=release\\modules\\ext\\jai_imageio-1.1.jar file.reference.javax.annotation-api-1.3.2.jar=release\\modules\\ext\\javax.annotation-api-1.3.2.jar -file.reference.jbig2-imageio-3.0.2.jar=release\\modules\\ext\\jbig2-imageio-3.0.2.jar -file.reference.jcl-over-slf4j-1.7.25.jar=release\\modules\\ext\\jcl-over-slf4j-1.7.25.jar -file.reference.jdom-2.0.5-contrib.jar=release/modules/ext/jdom-2.0.5-contrib.jar -file.reference.jdom-2.0.5.jar=release/modules/ext/jdom-2.0.5.jar -file.reference.jdom2-2.0.6.jar=release\\modules\\ext\\jdom2-2.0.6.jar -file.reference.jempbox-1.8.16.jar=release\\modules\\ext\\jempbox-1.8.16.jar -file.reference.jericho-html-3.3.jar=release/modules/ext/jericho-html-3.3.jar -file.reference.jgraphx-4.1.0.jar=release/modules/ext/jgraphx-4.1.0.jar -file.reference.jhighlight-1.0.3.jar=release\\modules\\ext\\jhighlight-1.0.3.jar -file.reference.jmatio-1.5.jar=release\\modules\\ext\\jmatio-1.5.jar -file.reference.json-simple-1.1.1.jar=release\\modules\\ext\\json-simple-1.1.1.jar -file.reference.jsoup-1.11.3.jar=release\\modules\\ext\\jsoup-1.11.3.jar -file.reference.jul-to-slf4j-1.7.25.jar=release\\modules\\ext\\jul-to-slf4j-1.7.25.jar -file.reference.juniversalchardet-1.0.3.jar=release\\modules\\ext\\juniversalchardet-1.0.3.jar -file.reference.junrar-2.0.0.jar=release\\modules\\ext\\junrar-2.0.0.jar -file.reference.jutf7-1.0.0.jar=release/modules/ext/jutf7-1.0.0.jar -file.reference.jxmapviewer2-2.4.jar=release/modules/ext/jxmapviewer2-2.4.jar -file.reference.jython-standalone-2.7.0.jar=release/modules/ext/jython-standalone-2.7.0.jar -file.reference.libphonenumber-3.5.jar=release/modules/ext/libphonenumber-3.5.jar -file.reference.mchange-commons-java-0.2.9.jar=release/modules/ext/mchange-commons-java-0.2.9.jar +file.reference.javax.ws.rs-api-2.0.jar=release\\modules\\ext\\javax.ws.rs-api-2.0.jar +file.reference.jdom-2.0.5-contrib.jar=release\\modules\\ext\\jdom-2.0.5-contrib.jar +file.reference.jdom-2.0.5.jar=release\\modules\\ext\\jdom-2.0.5.jar +file.reference.jericho-html-3.3.jar=release\\modules\\ext\\jericho-html-3.3.jar +file.reference.jgraphx-4.1.0.jar=release\\modules\\ext\\jgraphx-4.1.0.jar +file.reference.jline-0.9.94.jar=release\\modules\\ext\\jline-0.9.94.jar +file.reference.jsoup-1.10.3.jar=release\\modules\\ext\\jsoup-1.10.3.jar +file.reference.jsr305-3.0.2.jar=release\\modules\\ext\\jsr305-3.0.2.jar +file.reference.junit-3.8.1.jar=release\\modules\\ext\\junit-3.8.1.jar +file.reference.jutf7-1.0.0.jar=release\\modules\\ext\\jutf7-1.0.0.jar +file.reference.jxmapviewer2-2.4.jar=release\\modules\\ext\\jxmapviewer2-2.4.jar +file.reference.jython-standalone-2.7.0.jar=release\\modules\\ext\\jython-standalone-2.7.0.jar +file.reference.libphonenumber-3.5.jar=release\\modules\\ext\\libphonenumber-3.5.jar +file.reference.listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar=release\\modules\\ext\\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar +file.reference.log4j-1.2.16.jar=release\\modules\\ext\\log4j-1.2.16.jar +file.reference.mchange-commons-java-0.2.9.jar=release\\modules\\ext\\mchange-commons-java-0.2.9.jar file.reference.metadata-extractor-2.11.0.jar=release\\modules\\ext\\metadata-extractor-2.11.0.jar -file.reference.mockito-core-3.5.7.jar=release\\modules\\ext\\mockito-core-3.5.7.jar -file.reference.netcdf4-4.5.5.jar=release\\modules\\ext\\netcdf4-4.5.5.jar -file.reference.objenesis-3.1.jar=release\\modules\\ext\\objenesis-3.1.jar -file.reference.openjson-1.0.10.jar=release\\modules\\ext\\openjson-1.0.10.jar +file.reference.netty-3.7.0.Final.jar=release\\modules\\ext\\netty-3.7.0.Final.jar +file.reference.okhttp-2.7.5.jar=release\\modules\\ext\\okhttp-2.7.5.jar +file.reference.okio-1.6.0.jar=release\\modules\\ext\\okio-1.6.0.jar +file.reference.opencensus-api-0.19.2.jar=release\\modules\\ext\\opencensus-api-0.19.2.jar +file.reference.opencensus-contrib-grpc-metrics-0.19.2.jar=release\\modules\\ext\\opencensus-contrib-grpc-metrics-0.19.2.jar +file.reference.opencensus-contrib-http-util-0.19.2.jar=release\\modules\\ext\\opencensus-contrib-http-util-0.19.2.jar file.reference.opennlp-tools-1.9.1.jar=release\\modules\\ext\\opennlp-tools-1.9.1.jar -file.reference.parso-2.0.10.jar=release\\modules\\ext\\parso-2.0.10.jar -file.reference.pdfbox-2.0.13.jar=release\\modules\\ext\\pdfbox-2.0.13.jar -file.reference.pdfbox-tools-2.0.13.jar=release\\modules\\ext\\pdfbox-tools-2.0.13.jar -file.reference.postgresql-9.4.1211.jre7.jar=release/modules/ext/postgresql-9.4.1211.jre7.jar -file.reference.Rejistry-1.1-SNAPSHOT.jar=release/modules/ext/Rejistry-1.1-SNAPSHOT.jar -file.reference.rome-1.12.0.jar=release\\modules\\ext\\rome-1.12.0.jar -file.reference.sentiment-analysis-parser-0.1.jar=release\\modules\\ext\\sentiment-analysis-parser-0.1.jar -file.reference.sevenzipjbinding-AllPlatforms.jar=release/modules/ext/sevenzipjbinding-AllPlatforms.jar -file.reference.sevenzipjbinding.jar=release/modules/ext/sevenzipjbinding.jar -file.reference.sis-metadata-0.8.jar=release\\modules\\ext\\sis-metadata-0.8.jar -file.reference.sis-netcdf-0.8.jar=release\\modules\\ext\\sis-netcdf-0.8.jar -file.reference.sis-utility-0.8.jar=release\\modules\\ext\\sis-utility-0.8.jar -file.reference.sleuthkit-caseuco-4.10.0.jar=release/modules/ext/sleuthkit-caseuco-4.10.0.jar -file.reference.slf4j-api-1.7.25.jar=release\\modules\\ext\\slf4j-api-1.7.25.jar -file.reference.sqlite-jdbc-3.25.2.jar=release/modules/ext/sqlite-jdbc-3.25.2.jar -file.reference.StixLib.jar=release/modules/ext/StixLib.jar -file.reference.javax.ws.rs-api-2.0.1.jar=release/modules/ext/javax.ws.rs-api-2.0.1.jar -file.reference.cxf-core-3.0.16.jar=release/modules/ext/cxf-core-3.0.16.jar -file.reference.cxf-rt-frontend-jaxrs-3.0.16.jar=release/modules/ext/cxf-rt-frontend-jaxrs-3.0.16.jar -file.reference.cxf-rt-transports-http-3.0.16.jar=release/modules/ext/cxf-rt-transports-http-3.0.16.jar -file.reference.sleuthkit-4.10.0.jar=release/modules/ext/sleuthkit-4.10.0.jar -file.reference.curator-client-2.8.0.jar=release/modules/ext/curator-client-2.8.0.jar -file.reference.curator-framework-2.8.0.jar=release/modules/ext/curator-framework-2.8.0.jar -file.reference.curator-recipes-2.8.0.jar=release/modules/ext/curator-recipes-2.8.0.jar -file.reference.tagsoup-1.2.1.jar=release\\modules\\ext\\tagsoup-1.2.1.jar -file.reference.tika-core-1.20.jar=release\\modules\\ext\\tika-core-1.20.jar -file.reference.tika-parsers-1.20.jar=release\\modules\\ext\\tika-parsers-1.20.jar -file.reference.uimafit-core-2.4.0.jar=release\\modules\\ext\\uimafit-core-2.4.0.jar -file.reference.uimaj-core-3.0.1.jar=release\\modules\\ext\\uimaj-core-3.0.1.jar -file.reference.vorbis-java-core-0.8.jar=release\\modules\\ext\\vorbis-java-core-0.8.jar -file.reference.vorbis-java-tika-0.8.jar=release\\modules\\ext\\vorbis-java-tika-0.8.jar -file.reference.webp-imageio-sejda-0.1.0.jar=release/modules/ext/webp-imageio-sejda-0.1.0.jar -file.reference.xmlbeans-3.0.2.jar=release\\modules\\ext\\xmlbeans-3.0.2.jar -file.reference.xmpcore-5.1.3.jar=release/modules/ext/xmpcore-5.1.3.jar -file.reference.xz-1.8.jar=release\\modules\\ext\\xz-1.8.jar -file.reference.zookeeper-3.4.6.jar=release/modules/ext/zookeeper-3.4.6.jar -file.reference.SparseBitSet-1.1.jar=release/modules/ext/SparseBitSet-1.1.jar -file.reference.commons-validator-1.6.jar=release/modules/ext/commons-validator-1.6.jar -file.reference.api-common-1.7.0.jar=release/modules/ext/api-common-1.7.0.jar -file.reference.gax-1.44.0.jar=release/modules/ext/gax-1.44.0.jar -file.reference.gax-grpc-1.44.0.jar=release/modules/ext/gax-grpc-1.44.0.jar -file.reference.gax-httpjson-0.61.0.jar=release/modules/ext/gax-httpjson-0.61.0.jar -file.reference.google-api-client-1.27.0.jar=release/modules/ext/google-api-client-1.27.0.jar -file.reference.google-api-services-translate-v2-rev20170525-1.27.0.jar=release/modules/ext/google-api-services-translate-v2-rev20170525-1.27.0.jar -file.reference.google-auth-library-credentials-0.15.0.jar=release/modules/ext/google-auth-library-credentials-0.15.0.jar -file.reference.google-auth-library-oauth2-http-0.15.0.jar=release/modules/ext/google-auth-library-oauth2-http-0.15.0.jar -file.reference.google-cloud-core-1.70.0.jar=release/modules/ext/google-cloud-core-1.70.0.jar -file.reference.google-cloud-core-http-1.70.0.jar=release/modules/ext/google-cloud-core-http-1.70.0.jar -file.reference.google-cloud-translate-1.70.0.jar=release/modules/ext/google-cloud-translate-1.70.0.jar -file.reference.google-http-client-1.29.0.jar=release/modules/ext/google-http-client-1.29.0.jar -file.reference.google-http-client-appengine-1.29.0.jar=release/modules/ext/google-http-client-appengine-1.29.0.jar -file.reference.google-http-client-jackson2-1.29.0.jar=release/modules/ext/google-http-client-jackson2-1.29.0.jar -file.reference.grpc-context-1.19.0.jar=release/modules/ext/grpc-context-1.19.0.jar -file.reference.opencensus-api-0.19.2.jar=release/modules/ext/opencensus-api-0.19.2.jar -file.reference.opencensus-contrib-http-util-0.19.2.jar=release/modules/ext/opencensus-contrib-http-util-0.19.2.jar -file.reference.threetenbp-1.3.3.jar=release/modules/ext/threetenbp-1.3.3.jar -file.reference.okhttp-2.7.5-javadoc.jar=release/modules/ext/okhttp-2.7.5-javadoc.jar -file.reference.okhttp-2.7.5-sources.jar=release/modules/ext/okhttp-2.7.5-sources.jar -file.reference.okhttp-2.7.5.jar=release/modules/ext/okhttp-2.7.5.jar -file.reference.okio-1.6.0.jar=release/modules/ext/okio-1.6.0.jar -file.reference.datcon.jar=release/modules/ext/DatCon.jar +file.reference.postgresql-9.4.1211.jre7.jar=release\\modules\\ext\\postgresql-9.4.1211.jre7.jar +file.reference.proto-google-cloud-translate-v3beta1-0.53.0.jar=release\\modules\\ext\\proto-google-cloud-translate-v3beta1-0.53.0.jar +file.reference.proto-google-common-protos-1.15.0.jar=release\\modules\\ext\\proto-google-common-protos-1.15.0.jar +file.reference.proto-google-iam-v1-0.12.0.jar=release\\modules\\ext\\proto-google-iam-v1-0.12.0.jar +file.reference.protobuf-java-3.7.0.jar=release\\modules\\ext\\protobuf-java-3.7.0.jar +file.reference.protobuf-java-util-3.7.0.jar=release\\modules\\ext\\protobuf-java-util-3.7.0.jar +file.reference.Rejistry-1.1-SNAPSHOT.jar=release\\modules\\ext\\Rejistry-1.1-SNAPSHOT.jar +file.reference.sevenzipjbinding-AllPlatforms.jar=release\\modules\\ext\\sevenzipjbinding-AllPlatforms.jar +file.reference.sevenzipjbinding.jar=release\\modules\\ext\\sevenzipjbinding.jar +file.reference.sleuthkit-4.10.0.jar=release\\modules\\ext\\sleuthkit-4.10.0.jar +file.reference.sleuthkit-caseuco-4.10.0.jar=release\\modules\\ext\\sleuthkit-caseuco-4.10.0.jar +file.reference.slf4j-api-1.7.6.jar=release\\modules\\ext\\slf4j-api-1.7.6.jar +file.reference.slf4j-log4j12-1.7.6.jar=release\\modules\\ext\\slf4j-log4j12-1.7.6.jar +file.reference.SparseBitSet-1.1.jar=release\\modules\\ext\\SparseBitSet-1.1.jar +file.reference.sqlite-jdbc-3.25.2.jar=release\\modules\\ext\\sqlite-jdbc-3.25.2.jar +file.reference.StixLib.jar=release\\modules\\ext\\StixLib.jar +file.reference.threetenbp-1.3.3.jar=release\\modules\\ext\\threetenbp-1.3.3.jar +file.reference.webp-imageio-sejda-0.1.0.jar=release\\modules\\ext\\webp-imageio-sejda-0.1.0.jar +file.reference.xmpcore-5.1.3.jar=release\\modules\\ext\\xmpcore-5.1.3.jar +file.reference.zookeeper-3.4.6.jar=release\\modules\\ext\\zookeeper-3.4.6.jar javac.source=1.8 javac.compilerargs=-Xlint -Xlint:-serial license.file=../LICENSE-2.0.txt @@ -143,5 +120,5 @@ nbm.homepage=http://www.sleuthkit.org/ nbm.module.author=Brian Carrier nbm.needs.restart=true source.reference.curator-recipes-2.8.0.jar=release/modules/ext/curator-recipes-2.8.0-sources.jar -spec.version.base=10.20 +spec.version.base=10.21 diff --git a/Core/nbproject/project.xml b/Core/nbproject/project.xml index 5abd3666b7..19c863e6b7 100644 --- a/Core/nbproject/project.xml +++ b/Core/nbproject/project.xml @@ -6,24 +6,6 @@ org.sleuthkit.autopsy.core - - org.jdesktop.beansbinding - - - - 1 - 1.27.1.121 - - - - org.jdesktop.layout - - - - 1 - 1.33.1 - - org.netbeans.api.progress @@ -245,6 +227,14 @@ 6.55.1 + + org.sleuthkit.autopsy.Tika + + + + 1.0 + + org.sleuthkit.autopsy.corelibs @@ -309,8 +299,6 @@ net.sf.sevenzipjbinding.impl net.sf.sevenzipjbinding.simple net.sf.sevenzipjbinding.simple.impl - org.apache.tika - org.apache.tika.io org.sleuthkit.autopsy.actions org.sleuthkit.autopsy.appservices org.sleuthkit.autopsy.casemodule @@ -352,104 +340,88 @@ org.sleuthkit.datamodel.blackboardutils.attributes - ext/commons-lang3-3.8.1.jar - release\modules\ext\commons-lang3-3.8.1.jar + ext/batik-xml-1.6.jar + release\modules\ext\batik-xml-1.6.jar - ext/batik-xml-1.6.jar - release/modules/ext/batik-xml-1.6.jar + ext/commons-digester-1.8.1.jar + release\modules\ext\commons-digester-1.8.1.jar ext/jai_core-1.1.3.jar - release/modules/ext/jai_core-1.1.3.jar + release\modules\ext\jai_core-1.1.3.jar ext/gax-grpc-1.44.0.jar - release/modules/ext/gax-grpc-1.44.0.jar + release\modules\ext\gax-grpc-1.44.0.jar - ext/cdm-4.5.5.jar - release\modules\ext\cdm-4.5.5.jar + ext/failureaccess-1.0.1.jar + release\modules\ext\failureaccess-1.0.1.jar - ext/sis-utility-0.8.jar - release\modules\ext\sis-utility-0.8.jar + ext/grpc-protobuf-1.19.0.jar + release\modules\ext\grpc-protobuf-1.19.0.jar ext/opencensus-api-0.19.2.jar - release/modules/ext/opencensus-api-0.19.2.jar + release\modules\ext\opencensus-api-0.19.2.jar ext/batik-svg-dom-1.6.jar - release/modules/ext/batik-svg-dom-1.6.jar + release\modules\ext\batik-svg-dom-1.6.jar ext/gax-httpjson-0.61.0.jar - release/modules/ext/gax-httpjson-0.61.0.jar - - - ext/boilerpipe-1.1.0.jar - release\modules\ext\boilerpipe-1.1.0.jar - - - ext/jsoup-1.11.3.jar - release\modules\ext\jsoup-1.11.3.jar + release\modules\ext\gax-httpjson-0.61.0.jar ext/sevenzipjbinding.jar - release/modules/ext/sevenzipjbinding.jar + release\modules\ext\sevenzipjbinding.jar ext/mchange-commons-java-0.2.9.jar - release/modules/ext/mchange-commons-java-0.2.9.jar + release\modules\ext\mchange-commons-java-0.2.9.jar + + + ext/api-common-1.7.0.jar + release\modules\ext\api-common-1.7.0.jar ext/jackson-databind-2.9.7.jar release\modules\ext\jackson-databind-2.9.7.jar - - ext/jai-imageio-core-1.4.0.jar - release\modules\ext\jai-imageio-core-1.4.0.jar - - - ext/api-common-1.7.0.jar - release/modules/ext/api-common-1.7.0.jar - - - ext/jcl-over-slf4j-1.7.25.jar - release\modules\ext\jcl-over-slf4j-1.7.25.jar - ext/okhttp-2.7.5.jar - release/modules/ext/okhttp-2.7.5.jar + release\modules\ext\okhttp-2.7.5.jar - ext/byte-buddy-1.10.13.jar - release\modules\ext\byte-buddy-1.10.13.jar + ext/proto-google-cloud-translate-v3beta1-0.53.0.jar + release\modules\ext\proto-google-cloud-translate-v3beta1-0.53.0.jar + + + ext/error_prone_annotations-2.3.2.jar + release\modules\ext\error_prone_annotations-2.3.2.jar ext/libphonenumber-3.5.jar - release/modules/ext/libphonenumber-3.5.jar - - - ext/tika-core-1.20.jar - release\modules\ext\tika-core-1.20.jar + release\modules\ext\libphonenumber-3.5.jar ext/StixLib.jar - release/modules/ext/StixLib.jar - - - ext/bcprov-jdk15on-1.60.jar - release\modules\ext\bcprov-jdk15on-1.60.jar + release\modules\ext\StixLib.jar ext/google-auth-library-credentials-0.15.0.jar - release/modules/ext/google-auth-library-credentials-0.15.0.jar + release\modules\ext\google-auth-library-credentials-0.15.0.jar - ext/json-simple-1.1.1.jar - release\modules\ext\json-simple-1.1.1.jar + ext/grpc-auth-1.19.0.jar + release\modules\ext\grpc-auth-1.19.0.jar + + + ext/j2objc-annotations-1.1.jar + release\modules\ext\j2objc-annotations-1.1.jar ext/metadata-extractor-2.11.0.jar @@ -459,157 +431,137 @@ ext/commons-codec-1.11.jar release\modules\ext\commons-codec-1.11.jar - - ext/jmatio-1.5.jar - release\modules\ext\jmatio-1.5.jar - - - ext/tika-parsers-1.20.jar - release\modules\ext\tika-parsers-1.20.jar - - - ext/asm-7.0.jar - release\modules\ext\asm-7.0.jar - ext/commons-pool2-2.4.2.jar - release/modules/ext/commons-pool2-2.4.2.jar + release\modules\ext\commons-pool2-2.4.2.jar ext/jxmapviewer2-2.4.jar - release/modules/ext/jxmapviewer2-2.4.jar + release\modules\ext\jxmapviewer2-2.4.jar + + + ext/jfreechart-1.0.19.jar + release/modules/ext/jfreechart-1.0.19.jar + + + ext/jcommon-1.0.23.jar + release/modules/ext/jcommon-1.0.23.jar ext/jdom-2.0.5-contrib.jar - release/modules/ext/jdom-2.0.5-contrib.jar - - - ext/openjson-1.0.10.jar - release\modules\ext\openjson-1.0.10.jar - - - ext/isoparser-1.1.22.jar - release\modules\ext\isoparser-1.1.22.jar + release\modules\ext\jdom-2.0.5-contrib.jar ext/xmpcore-5.1.3.jar - release/modules/ext/xmpcore-5.1.3.jar + release\modules\ext\xmpcore-5.1.3.jar ext/batik-util-1.6.jar - release/modules/ext/batik-util-1.6.jar - - - ext/javax.activation-1.2.0.jar - release\modules\ext\javax.activation-1.2.0.jar - - - ext/rome-1.12.0.jar - release\modules\ext\rome-1.12.0.jar + release\modules\ext\batik-util-1.6.jar ext/javax.annotation-api-1.3.2.jar release\modules\ext\javax.annotation-api-1.3.2.jar - ext/vorbis-java-core-0.8.jar - release\modules\ext\vorbis-java-core-0.8.jar + ext/jgraphx-4.1.0.jar + release\modules\ext\jgraphx-4.1.0.jar - ext/jgraphx-4.1.0.jar - release/modules/ext/jgraphx-4.1.0.jar + ext/jline-0.9.94.jar + release\modules\ext\jline-0.9.94.jar ext/DatCon.jar - release/modules/ext/DatCon.jar - - - ext/java-libpst-0.8.1.jar - release\modules\ext\java-libpst-0.8.1.jar + release\modules\ext\DatCon.jar ext/okio-1.6.0.jar - release/modules/ext/okio-1.6.0.jar + release\modules\ext\okio-1.6.0.jar + + + ext/bcprov-jdk15on-1.54.jar + release\modules\ext\bcprov-jdk15on-1.54.jar ext/curator-framework-2.8.0.jar - release/modules/ext/curator-framework-2.8.0.jar + release\modules\ext\curator-framework-2.8.0.jar ext/commons-dbcp2-2.1.1.jar - release/modules/ext/commons-dbcp2-2.1.1.jar + release\modules\ext\commons-dbcp2-2.1.1.jar ext/google-http-client-appengine-1.29.0.jar - release/modules/ext/google-http-client-appengine-1.29.0.jar + release\modules\ext\google-http-client-appengine-1.29.0.jar - ext/uimafit-core-2.4.0.jar - release\modules\ext\uimafit-core-2.4.0.jar + ext/proto-google-iam-v1-0.12.0.jar + release\modules\ext\proto-google-iam-v1-0.12.0.jar ext/jackcess-encrypt-2.1.4.jar release\modules\ext\jackcess-encrypt-2.1.4.jar - - ext/junrar-2.0.0.jar - release\modules\ext\junrar-2.0.0.jar - ext/google-http-client-1.29.0.jar - release/modules/ext/google-http-client-1.29.0.jar - - - ext/bcpkix-jdk15on-1.60.jar - release\modules\ext\bcpkix-jdk15on-1.60.jar + release\modules\ext\google-http-client-1.29.0.jar ext/opennlp-tools-1.9.1.jar release\modules\ext\opennlp-tools-1.9.1.jar - - ext/slf4j-api-1.7.25.jar - release\modules\ext\slf4j-api-1.7.25.jar - ext/bcprov-ext-jdk15on-1.54.jar - release/modules/ext/bcprov-ext-jdk15on-1.54.jar + release\modules\ext\bcprov-ext-jdk15on-1.54.jar ext/google-cloud-core-1.70.0.jar - release/modules/ext/google-cloud-core-1.70.0.jar + release\modules\ext\google-cloud-core-1.70.0.jar - ext/geoapi-3.0.1.jar - release\modules\ext\geoapi-3.0.1.jar + ext/protobuf-java-3.7.0.jar + release\modules\ext\protobuf-java-3.7.0.jar - ext/httpmime-4.5.6.jar - release\modules\ext\httpmime-4.5.6.jar - - - ext/jdom2-2.0.6.jar - release\modules\ext\jdom2-2.0.6.jar - - - ext/uimaj-core-3.0.1.jar - release\modules\ext\uimaj-core-3.0.1.jar + ext/bcpkix-jdk15on-1.54.jar + release\modules\ext\bcpkix-jdk15on-1.54.jar ext/sqlite-jdbc-3.25.2.jar - release/modules/ext/sqlite-jdbc-3.25.2.jar + release\modules\ext\sqlite-jdbc-3.25.2.jar - ext/cxf-rt-rs-client-3.3.0.jar - release\modules\ext\cxf-rt-rs-client-3.3.0.jar + ext/grpc-protobuf-lite-1.19.0.jar + release\modules\ext\grpc-protobuf-lite-1.19.0.jar - ext/pdfbox-tools-2.0.13.jar - release\modules\ext\pdfbox-tools-2.0.13.jar + ext/httpcore-4.4.9.jar + release\modules\ext\httpcore-4.4.9.jar - ext/grib-4.5.5.jar - release\modules\ext\grib-4.5.5.jar + ext/guava-27.1-android.jar + release\modules\ext\guava-27.1-android.jar + + + ext/bcprov-jdk15on-1.52.jar + release\modules\ext\bcprov-jdk15on-1.52.jar + + + ext/checker-compat-qual-2.5.3.jar + release\modules\ext\checker-compat-qual-2.5.3.jar + + + ext/sleuthkit-4.10.0.jar + release\modules\ext\sleuthkit-4.10.0.jar + + + ext/animal-sniffer-annotations-1.17.jar + release\modules\ext\animal-sniffer-annotations-1.17.jar + + + ext/sleuthkit-caseuco-4.10.0.jar + release\modules\ext\sleuthkit-caseuco-4.10.0.jar ext/sleuthkit-4.10.0.jar @@ -621,255 +573,247 @@ ext/gax-1.44.0.jar - release/modules/ext/gax-1.44.0.jar + release\modules\ext\gax-1.44.0.jar - ext/jempbox-1.8.16.jar - release\modules\ext\jempbox-1.8.16.jar + ext/jsoup-1.10.3.jar + release\modules\ext\jsoup-1.10.3.jar + + + ext/grpc-context-1.19.0.jar + release\modules\ext\grpc-context-1.19.0.jar ext/jackcess-2.2.0.jar release\modules\ext\jackcess-2.2.0.jar - ext/grpc-context-1.19.0.jar - release/modules/ext/grpc-context-1.19.0.jar + ext/slf4j-log4j12-1.7.6.jar + release\modules\ext\slf4j-log4j12-1.7.6.jar ext/jericho-html-3.3.jar - release/modules/ext/jericho-html-3.3.jar + release\modules\ext\jericho-html-3.3.jar - ext/httpservices-4.5.5.jar - release\modules\ext\httpservices-4.5.5.jar - - - ext/xz-1.8.jar - release\modules\ext\xz-1.8.jar + ext/google-cloud-core-grpc-1.70.0.jar + release\modules\ext\google-cloud-core-grpc-1.70.0.jar ext/commons-validator-1.6.jar - release/modules/ext/commons-validator-1.6.jar + release\modules\ext\commons-validator-1.6.jar + + + ext/slf4j-api-1.7.6.jar + release\modules\ext\slf4j-api-1.7.6.jar ext/decodetect-core-0.3.jar - release/modules/ext/decodetect-core-0.3.jar + release\modules\ext\decodetect-core-0.3.jar - ext/mockito-core-3.5.7.jar - release\modules\ext\mockito-core-3.5.7.jar - - - ext/jbig2-imageio-3.0.2.jar - release\modules\ext\jbig2-imageio-3.0.2.jar - - - ext/apache-mime4j-dom-0.8.2.jar - release\modules\ext\apache-mime4j-dom-0.8.2.jar - - - ext/pdfbox-2.0.13.jar - release\modules\ext\pdfbox-2.0.13.jar - - - ext/xmlbeans-3.0.2.jar - release\modules\ext\xmlbeans-3.0.2.jar + ext/httpclient-4.5.5.jar + release\modules\ext\httpclient-4.5.5.jar ext/curator-recipes-2.8.0.jar - release/modules/ext/curator-recipes-2.8.0.jar + release\modules\ext\curator-recipes-2.8.0.jar - ext/objenesis-3.1.jar - release\modules\ext\objenesis-3.1.jar - - - ext/tagsoup-1.2.1.jar - release\modules\ext\tagsoup-1.2.1.jar + ext/jackson-annotations-2.9.0.jar + release\modules\ext\jackson-annotations-2.9.0.jar ext/jackson-core-2.9.7.jar release\modules\ext\jackson-core-2.9.7.jar - ext/sis-metadata-0.8.jar - release\modules\ext\sis-metadata-0.8.jar + ext/commons-lang3-3.5.jar + release\modules\ext\commons-lang3-3.5.jar - ext/parso-2.0.10.jar - release\modules\ext\parso-2.0.10.jar + ext/log4j-1.2.16.jar + release\modules\ext\log4j-1.2.16.jar - ext/apache-mime4j-core-0.8.2.jar - release\modules\ext\apache-mime4j-core-0.8.2.jar + ext/commons-logging-1.2.jar + release\modules\ext\commons-logging-1.2.jar - ext/commons-io-2.6.jar - release\modules\ext\commons-io-2.6.jar + ext/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar + release\modules\ext\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar + + + ext/protobuf-java-util-3.7.0.jar + release\modules\ext\protobuf-java-util-3.7.0.jar + + + ext/commons-collections-3.2.2.jar + release\modules\ext\commons-collections-3.2.2.jar ext/SparseBitSet-1.1.jar - release/modules/ext/SparseBitSet-1.1.jar + release\modules\ext\SparseBitSet-1.1.jar + + + ext/grpc-grpclb-1.19.0.jar + release\modules\ext\grpc-grpclb-1.19.0.jar ext/batik-svggen-1.6.jar - release/modules/ext/batik-svggen-1.6.jar + release\modules\ext\batik-svggen-1.6.jar ext/c3p0-0.9.5.jar - release/modules/ext/c3p0-0.9.5.jar + release\modules\ext\c3p0-0.9.5.jar ext/zookeeper-3.4.6.jar - release/modules/ext/zookeeper-3.4.6.jar + release\modules\ext\zookeeper-3.4.6.jar - ext/commons-csv-1.6.jar - release\modules\ext\commons-csv-1.6.jar + ext/grpc-alts-1.19.0.jar + release\modules\ext\grpc-alts-1.19.0.jar ext/jdom-2.0.5.jar - release/modules/ext/jdom-2.0.5.jar + release\modules\ext\jdom-2.0.5.jar - ext/jackson-annotations-2.9.7.jar - release\modules\ext\jackson-annotations-2.9.7.jar + ext/gson-2.7.jar + release\modules\ext\gson-2.7.jar ext/google-api-client-1.27.0.jar - release/modules/ext/google-api-client-1.27.0.jar - - - ext/netcdf4-4.5.5.jar - release\modules\ext\netcdf4-4.5.5.jar - - - ext/sis-netcdf-0.8.jar - release\modules\ext\sis-netcdf-0.8.jar - - - ext/sentiment-analysis-parser-0.1.jar - release\modules\ext\sentiment-analysis-parser-0.1.jar - - - ext/commons-collections4-4.2.jar - release\modules\ext\commons-collections4-4.2.jar + release\modules\ext\google-api-client-1.27.0.jar ext/opencensus-contrib-http-util-0.19.2.jar - release/modules/ext/opencensus-contrib-http-util-0.19.2.jar + release\modules\ext\opencensus-contrib-http-util-0.19.2.jar ext/google-auth-library-oauth2-http-0.15.0.jar - release/modules/ext/google-auth-library-oauth2-http-0.15.0.jar - - - ext/juniversalchardet-1.0.3.jar - release\modules\ext\juniversalchardet-1.0.3.jar + release\modules\ext\google-auth-library-oauth2-http-0.15.0.jar ext/jython-standalone-2.7.0.jar - release/modules/ext/jython-standalone-2.7.0.jar + release\modules\ext\jython-standalone-2.7.0.jar - ext/jhighlight-1.0.3.jar - release\modules\ext\jhighlight-1.0.3.jar + ext/commons-lang-2.6.jar + release\modules\ext\commons-lang-2.6.jar - ext/jul-to-slf4j-1.7.25.jar - release\modules\ext\jul-to-slf4j-1.7.25.jar + ext/jsr305-3.0.2.jar + release\modules\ext\jsr305-3.0.2.jar - ext/postgresql-9.4.1211.jre7.jar - release/modules/ext/postgresql-9.4.1211.jre7.jar + ext/proto-google-common-protos-1.15.0.jar + release\modules\ext\proto-google-common-protos-1.15.0.jar + + + ext/netty-3.7.0.Final.jar + release\modules\ext\netty-3.7.0.Final.jar + + + ext/opencensus-contrib-grpc-metrics-0.19.2.jar + release\modules\ext\opencensus-contrib-grpc-metrics-0.19.2.jar ext/jai_imageio-1.1.jar - release/modules/ext/jai_imageio-1.1.jar + release\modules\ext\jai_imageio-1.1.jar - ext/httpclient-4.5.6.jar - release\modules\ext\httpclient-4.5.6.jar + ext/postgresql-9.4.1211.jre7.jar + release\modules\ext\postgresql-9.4.1211.jre7.jar + + + ext/junit-3.8.1.jar + release\modules\ext\junit-3.8.1.jar ext/curator-client-2.8.0.jar - release/modules/ext/curator-client-2.8.0.jar + release\modules\ext\curator-client-2.8.0.jar - ext/fontbox-2.0.13.jar - release\modules\ext\fontbox-2.0.13.jar + ext/grpc-core-1.19.0.jar + release\modules\ext\grpc-core-1.19.0.jar + + + ext/javax.ws.rs-api-2.0.jar + release\modules\ext\javax.ws.rs-api-2.0.jar ext/icepdf-core-6.2.2.jar - release/modules/ext/icepdf-core-6.2.2.jar + release\modules\ext\icepdf-core-6.2.2.jar ext/activemq-all-5.11.1.jar - release/modules/ext/activemq-all-5.11.1.jar + release\modules\ext\activemq-all-5.11.1.jar ext/google-cloud-core-http-1.70.0.jar - release/modules/ext/google-cloud-core-http-1.70.0.jar + release\modules\ext\google-cloud-core-http-1.70.0.jar ext/Rejistry-1.1-SNAPSHOT.jar - release/modules/ext/Rejistry-1.1-SNAPSHOT.jar + release\modules\ext\Rejistry-1.1-SNAPSHOT.jar - ext/dec-0.1.2.jar - release\modules\ext\dec-0.1.2.jar + ext/commons-beanutils-1.9.2.jar + release\modules\ext\commons-beanutils-1.9.2.jar ext/batik-dom-1.6.jar - release/modules/ext/batik-dom-1.6.jar + release\modules\ext\batik-dom-1.6.jar ext/google-http-client-jackson2-1.29.0.jar - release/modules/ext/google-http-client-jackson2-1.29.0.jar + release\modules\ext\google-http-client-jackson2-1.29.0.jar ext/threetenbp-1.3.3.jar - release/modules/ext/threetenbp-1.3.3.jar + release\modules\ext\threetenbp-1.3.3.jar ext/google-cloud-translate-1.70.0.jar - release/modules/ext/google-cloud-translate-1.70.0.jar + release\modules\ext\google-cloud-translate-1.70.0.jar + + + ext/grpc-stub-1.19.0.jar + release\modules\ext\grpc-stub-1.19.0.jar + + + ext/google-oauth-client-1.28.0.jar + release\modules\ext\google-oauth-client-1.28.0.jar ext/sevenzipjbinding-AllPlatforms.jar - release/modules/ext/sevenzipjbinding-AllPlatforms.jar + release\modules\ext\sevenzipjbinding-AllPlatforms.jar ext/jutf7-1.0.0.jar - release/modules/ext/jutf7-1.0.0.jar - - - ext/byte-buddy-agent-1.10.13.jar - release\modules\ext\byte-buddy-agent-1.10.13.jar + release\modules\ext\jutf7-1.0.0.jar ext/batik-awt-util-1.6.jar - release/modules/ext/batik-awt-util-1.6.jar + release\modules\ext\batik-awt-util-1.6.jar ext/google-api-services-translate-v2-rev20170525-1.27.0.jar - release/modules/ext/google-api-services-translate-v2-rev20170525-1.27.0.jar - - - ext/webp-imageio-sejda-0.1.0.jar - release/modules/ext/webp-imageio-sejda-0.1.0.jar + release\modules\ext\google-api-services-translate-v2-rev20170525-1.27.0.jar ext/icepdf-viewer-6.2.2.jar - release/modules/ext/icepdf-viewer-6.2.2.jar + release\modules\ext\icepdf-viewer-6.2.2.jar - ext/bcmail-jdk15on-1.60.jar - release\modules\ext\bcmail-jdk15on-1.60.jar + ext/webp-imageio-sejda-0.1.0.jar + release\modules\ext\webp-imageio-sejda-0.1.0.jar - ext/vorbis-java-tika-0.8.jar - release\modules\ext\vorbis-java-tika-0.8.jar + ext/grpc-netty-shaded-1.19.0.jar + release\modules\ext\grpc-netty-shaded-1.19.0.jar diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java index 2c7e942538..9b7525bbd1 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DiscoveryDialog.java @@ -217,7 +217,7 @@ final class DiscoveryDialog extends javax.swing.JDialog { orderByCombobox.addItem(method); } } - orderByCombobox.setSelectedItem(getSelectedFilterPanel().getLastGroupSortingAlg()); + orderByCombobox.setSelectedItem(getSelectedFilterPanel().getLastSortingMethod()); groupSortingComboBox.removeAllItems(); for (GroupSortingAlgorithm groupSortAlgorithm : GroupSortingAlgorithm.values()) { groupSortingComboBox.addItem(groupSortAlgorithm); From 45ca1cc20221d08be09e8dd6f48512acf96758ce Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 16 Sep 2020 08:51:57 -0400 Subject: [PATCH 24/27] 6714 address comments and codacy --- .../discovery/search/DiscoveryAttributes.java | 54 +++++++++---------- .../discovery/search/DiscoveryKeyUtils.java | 12 ++++- .../discovery/search/DomainSearchCache.java | 10 ++-- .../discovery/ui/ArtifactTypeFilterPanel.java | 4 +- .../autopsy/discovery/ui/DateFilterPanel.java | 7 +-- 5 files changed, 49 insertions(+), 38 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java index 90cb880cc2..e827c8583b 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java @@ -222,7 +222,7 @@ public class DiscoveryAttributes { static class FrequencyAttribute extends AttributeType { static final int BATCH_SIZE = 50; // Number of hashes to look up at one time - + static final int DOMAIN_BATCH_SIZE = 500; // Number of domains to look up at one time @Override @@ -255,13 +255,13 @@ public class DiscoveryAttributes { private void processResultFilesForCR(List results, CentralRepository centralRepoDb) throws DiscoveryException { List currentFiles = new ArrayList<>(); - Set hashesToLookUp = new HashSet<>(); + Set hashesToLookUp = new HashSet<>(); List domainsToQuery = new ArrayList<>(); for (Result result : results) { if (result.getKnown() == TskData.FileKnown.KNOWN) { result.setFrequency(SearchData.Frequency.KNOWN); } - + if (result.getType() != SearchData.Type.DOMAIN) { ResultFile file = (ResultFile) result; if (file.getFrequency() == SearchData.Frequency.UNKNOWN @@ -270,12 +270,12 @@ public class DiscoveryAttributes { hashesToLookUp.add(file.getFirstInstance().getMd5Hash()); currentFiles.add(file); } - - if (hashesToLookUp.size() >= BATCH_SIZE) { - computeFrequency(hashesToLookUp, currentFiles, centralRepoDb); - hashesToLookUp.clear(); - currentFiles.clear(); + if (hashesToLookUp.size() >= BATCH_SIZE) { + computeFrequency(hashesToLookUp, currentFiles, centralRepoDb); + + hashesToLookUp.clear(); + currentFiles.clear(); } } else { ResultDomain domain = (ResultDomain) result; @@ -295,31 +295,31 @@ public class DiscoveryAttributes { computeFrequency(hashesToLookUp, currentFiles, centralRepoDb); ResultDomain domainInstance = (ResultDomain) result; domainsToQuery.add(domainInstance); - + if (domainsToQuery.size() == DOMAIN_BATCH_SIZE) { queryDomainFrequency(domainsToQuery, centralRepoDb); - + domainsToQuery.clear(); } } } - + queryDomainFrequency(domainsToQuery, centralRepoDb); computeFrequency(hashesToLookUp, currentFiles, centralRepoDb); } } - + private static void queryDomainFrequency(List domainsToQuery, CentralRepository centralRepository) throws DiscoveryException { if (domainsToQuery.isEmpty()) { return; } - + try { final Map> resultDomainTable = new HashMap<>(); final StringJoiner joiner = new StringJoiner(", "); final CorrelationAttributeInstance.Type attributeType = centralRepository.getCorrelationTypeById(CorrelationAttributeInstance.DOMAIN_TYPE_ID); - for(ResultDomain domainInstance : domainsToQuery) { + for (ResultDomain domainInstance : domainsToQuery) { try { final String domainValue = domainInstance.getDomain(); final String normalizedDomain = CorrelationAttributeNormalizer.normalize(attributeType, domainValue); @@ -333,10 +333,10 @@ public class DiscoveryAttributes { } final String tableName = CentralRepoDbUtil.correlationTypeToInstanceTableName(attributeType); - final String domainFrequencyQuery = " value AS domain_name, COUNT(*) AS frequency " + - "FROM " + tableName + " " + - "WHERE value IN (" + joiner + ") " + - "GROUP BY value"; + final String domainFrequencyQuery = " value AS domain_name, COUNT(*) AS frequency " + + "FROM " + tableName + " " + + "WHERE value IN (" + joiner + ") " + + "GROUP BY value"; final DomainFrequencyCallback frequencyCallback = new DomainFrequencyCallback(resultDomainTable); centralRepository.processSelectClause(domainFrequencyQuery, frequencyCallback); @@ -348,15 +348,15 @@ public class DiscoveryAttributes { throw new DiscoveryException("Fatal exception encountered querying the CR.", ex); } } - + private static class DomainFrequencyCallback implements InstanceTableCallback { - + private final Map> domainLookup; private SQLException sqlCause; - + private DomainFrequencyCallback(Map> domainLookup) { this.domainLookup = domainLookup; - } + } @Override public void process(ResultSet resultSet) { @@ -364,9 +364,9 @@ public class DiscoveryAttributes { while (resultSet.next()) { String domain = resultSet.getString("domain_name"); Long frequency = resultSet.getLong("frequency"); - + List domainInstances = domainLookup.get(domain); - for(ResultDomain domainInstance : domainInstances) { + for (ResultDomain domainInstance : domainInstances) { domainInstance.setFrequency(SearchData.Frequency.fromCount(frequency)); } } @@ -374,7 +374,7 @@ public class DiscoveryAttributes { this.sqlCause = ex; } } - + SQLException getCause() { return this.sqlCause; } @@ -733,7 +733,7 @@ public class DiscoveryAttributes { FILE_TAG(new FileTagAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_tag_displayName()), OBJECT_DETECTED(new ObjectDetectedAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_object_displayName()), MOST_RECENT_DATE(new MostRecentActivityDateAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_mostRecentDate_displayName()), - FIRST_DATE(new MostRecentActivityDateAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_firstDate_displayName()), + FIRST_DATE(new FirstActivityDateAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_firstDate_displayName()), NO_GROUPING(new NoGroupingAttribute(), Bundle.DiscoveryAttributes_GroupingAttributeType_none_displayName()); private final AttributeType attributeType; @@ -771,7 +771,7 @@ public class DiscoveryAttributes { return Arrays.asList(FREQUENCY, MOST_RECENT_DATE, FIRST_DATE); } } - + /** * Computes the CR frequency of all the given hashes and updates the list of * files. diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java index b00fee63e8..7d4bed0011 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryKeyUtils.java @@ -22,6 +22,7 @@ import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -166,7 +167,8 @@ public class DiscoveryKeyUtils { /** * Get the fileSorting - * @return + * + * @return */ ResultsSorter.SortingMethod getFileSortingMethod() { return fileSortingMethod; @@ -938,6 +940,9 @@ public class DiscoveryKeyUtils { } } + /** + * Key representing a date of most recent activity. + */ static class MostRecentActivityDateGroupKey extends GroupKey { private final Long epochDate; @@ -1020,6 +1025,9 @@ public class DiscoveryKeyUtils { } } + /** + * Key representing a date of first activity. + */ static class FirstActivityDateGroupKey extends GroupKey { private final Long epochDate; @@ -1030,7 +1038,7 @@ public class DiscoveryKeyUtils { FirstActivityDateGroupKey(Result result) { if (result instanceof ResultDomain) { epochDate = ((ResultDomain) result).getActivityStart(); - dateNameString = new SimpleDateFormat("yyyy/MM/dd").format(new Date(TimeUnit.SECONDS.toMillis(epochDate))); + dateNameString = new SimpleDateFormat("yyyy/MM/dd", Locale.getDefault()).format(new Date(TimeUnit.SECONDS.toMillis(epochDate))); } else { epochDate = Long.MAX_VALUE; dateNameString = Bundle.DiscoveryKeyUtils_FirstActivityDateGroupKey_noDate(); diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java index 481fabefb3..e7f46821a9 100755 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DomainSearchCache.java @@ -36,10 +36,10 @@ import org.sleuthkit.datamodel.SleuthkitCase; class DomainSearchCache { private static final int MAXIMUM_CACHE_SIZE = 10; - private static final LoadingCache>> cache = - CacheBuilder.newBuilder() - .maximumSize(MAXIMUM_CACHE_SIZE) - .build(new DomainSearchCacheLoader()); + private static final LoadingCache>> cache + = CacheBuilder.newBuilder() + .maximumSize(MAXIMUM_CACHE_SIZE) + .build(new DomainSearchCacheLoader()); /** * Get domain search results matching the given parameters. If no results @@ -57,7 +57,7 @@ class DomainSearchCache { groupSortingType, domainSortingMethod, caseDb, centralRepoDb); return cache.get(searchKey); - } catch (Throwable ex) { + } catch (ExecutionException ex) { throw new DiscoveryException("Error fetching results from cache", ex.getCause()); } } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java index 00f3eff06d..089c18bf13 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/ArtifactTypeFilterPanel.java @@ -25,6 +25,7 @@ import javax.swing.DefaultListModel; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JList; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.discovery.search.SearchData; import org.sleuthkit.autopsy.discovery.search.SearchFiltering.ArtifactTypeFilter; import org.sleuthkit.datamodel.BlackboardArtifact; @@ -133,10 +134,11 @@ class ArtifactTypeFilterPanel extends AbstractDiscoveryFilterPanel { return null; } + @NbBundle.Messages({"ArtifactTypeFilterPanel.selectionNeeded.text=At least one Result type must be selected."}) @Override String checkForError() { if (artifactTypeCheckbox.isSelected() && artifactList.getSelectedValuesList().isEmpty()) { - return "At least one Result type must be selected."; + return Bundle.ArtifactTypeFilterPanel_selectionNeeded_text(); } return ""; } diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index 803c637411..70bf5c6bb3 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -278,13 +278,15 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } } + @NbBundle.Messages({"DateFilterPanel.invalidRange.text=Range or Only Last must be selected", + "DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter"}) @Override String checkForError() { if (dateFilterCheckBox.isSelected()) { if (!(rangeRadioButton.isSelected() || mostRecentRadioButton.isSelected())) { - return "Range or Only Last must be selected"; + return Bundle.DateFilterPanel_invalidRange_text(); } else if (rangeRadioButton.isSelected() && !(startCheckBox.isSelected() || endCheckBox.isSelected())) { - return "A start or end date must be specified to use the range filter"; + return Bundle.DateFilterPanel_startOrEndNeeded_text(); } } return ""; @@ -292,7 +294,6 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { @Override AbstractFilter getFilter() { - if (dateFilterCheckBox.isSelected()) { LocalDate startDate = LocalDate.MIN; LocalDate endDate = LocalDate.MAX; From 1e2fc4755ef649476417fe316fb29c2cb739f748 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 16 Sep 2020 08:56:00 -0400 Subject: [PATCH 25/27] 6714 remove accidently duplicated code --- .../discovery/search/DiscoveryAttributes.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java index e827c8583b..59e620828a 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/search/DiscoveryAttributes.java @@ -278,21 +278,6 @@ public class DiscoveryAttributes { currentFiles.clear(); } } else { - ResultDomain domain = (ResultDomain) result; - try { - CorrelationAttributeInstance.Type domainAttributeType - = centralRepoDb.getCorrelationTypeById(CorrelationAttributeInstance.DOMAIN_TYPE_ID); - Long count = centralRepoDb.getCountArtifactInstancesByTypeValue(domainAttributeType, domain.getDomain()); - domain.setFrequency(SearchData.Frequency.fromCount(count)); - } catch (CentralRepoException ex) { - throw new DiscoveryException("Error encountered querying the central repository.", ex); - } catch (CorrelationAttributeNormalizationException ex) { - logger.log(Level.INFO, "Domain [%s] could not be normalized for central repository querying, skipping...", domain.getDomain()); - } - } - - if (hashesToLookUp.size() >= BATCH_SIZE) { - computeFrequency(hashesToLookUp, currentFiles, centralRepoDb); ResultDomain domainInstance = (ResultDomain) result; domainsToQuery.add(domainInstance); From 6fbe72065575d567501f423532ab031fd8b2cec7 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 16 Sep 2020 12:34:06 -0400 Subject: [PATCH 26/27] 6714 update getFilter panel with fixes from Danny --- .../org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index 70bf5c6bb3..0d09bc13e4 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -299,7 +299,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { LocalDate endDate = LocalDate.MAX; ZoneId zone = Utils.getUserPreferredZoneId(); if (rangeRadioButton.isSelected() && (startCheckBox.isSelected() || endCheckBox.isSelected())) { - if (startCheckBox.isSelected() && startDatePicker.getDate().equals(startDate)) { + if (startCheckBox.isSelected() && startDatePicker.getDate() != null) { startDate = startDatePicker.getDate(); } if (endCheckBox.isSelected() && endDatePicker.getDate() != null) { @@ -307,7 +307,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } } else if (dateFilterCheckBox.isSelected() && mostRecentRadioButton.isSelected()) { endDate = LocalDate.now(); - startDate = LocalDate.now().minus(Duration.ofDays((long) daysSpinner.getValue())); + startDate = LocalDate.now().minus(Period.ofDays((Integer) daysSpinner.getValue())); } return new SearchFiltering.ArtifactDateRangeFilter(startDate.atStartOfDay(zone).toEpochSecond(), endDate.atStartOfDay(zone).toEpochSecond() + SECS_PER_DAY);//to insure end date is inclusive } From db32e290f29fd82c289e1e506c85206c224eb602 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 16 Sep 2020 12:41:33 -0400 Subject: [PATCH 27/27] 6714 fix import --- .../src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index 0d09bc13e4..668e441f95 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -19,8 +19,8 @@ package org.sleuthkit.autopsy.discovery.ui; import java.awt.event.ActionListener; -import java.time.Duration; import java.time.LocalDate; +import java.time.Period; import java.time.ZoneId; import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import javax.swing.JCheckBox;