diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/Bundle.properties b/Core/src/org/sleuthkit/autopsy/commonfilesearch/Bundle.properties
index a92b778132..6118e48ec0 100644
--- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/Bundle.properties
+++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/Bundle.properties
@@ -1,3 +1,6 @@
CommonFilesPanel.searchButton.text=Search
-CommonFilesPanel.withinDataSourceRadioButton.text=Within a Data Source
-CommonFilesPanel.allDataSourcesRadioButton.text=Across All Data Sources
\ No newline at end of file
+CommonFilesPanel.withinDataSourceRadioButton.text=Files must be in data source:
+CommonFilesPanel.allDataSourcesRadioButton.text=Files can be in any data source
+CommonFilesPanel.jLabel1.text=Search for files that exist in multiple data sources:
+CommonFilesPanel.cancelButton.text=Cancel
+CommonFilesPanel.cancelButton.actionCommand=Cancel
diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.form b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.form
index 3cffdee56b..ef95eb8285 100644
--- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.form
+++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.form
@@ -23,26 +23,12 @@
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.java b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.java
index 59e7bef62a..082726daad 100644
--- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.java
+++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesDialog.java
@@ -61,21 +61,11 @@ public final class CommonFilesDialog extends javax.swing.JDialog {
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 400, Short.MAX_VALUE)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addGap(0, 0, Short.MAX_VALUE)
- .addComponent(commonFilesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(0, 0, Short.MAX_VALUE)))
+ .addComponent(commonFilesPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 322, Short.MAX_VALUE)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addGap(0, 0, Short.MAX_VALUE)
- .addComponent(commonFilesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(0, 0, Short.MAX_VALUE)))
+ .addComponent(commonFilesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE)
);
pack();
diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesMetaDataBuilder.java b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesMetaDataBuilder.java
index bf190f7804..01711fbfae 100644
--- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesMetaDataBuilder.java
+++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesMetaDataBuilder.java
@@ -30,6 +30,7 @@ import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.datamodel.AbstractFile;
+import org.sleuthkit.datamodel.HashUtility;
import org.sleuthkit.datamodel.SleuthkitCase;
import org.sleuthkit.datamodel.TskCoreException;
@@ -94,7 +95,9 @@ abstract class CommonFilesMetaDataBuilder {
for (AbstractFile file : files) {
String currentMd5 = file.getMd5Hash();
-
+ if((currentMd5 == null) || (HashUtility.isNoDataMd5(currentMd5))) {
+ continue;
+ }
if (parentNodes.containsKey(currentMd5)) {
parentNodes.get(currentMd5).add(file);
Set currentDataSources = md5ToDataSourcesStringMap.get(currentMd5);
diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.form b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.form
index a16797e025..0a9968d90b 100644
--- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.form
+++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.form
@@ -28,25 +28,44 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
+
+
+
@@ -108,5 +127,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java
index 140a3411fe..2a0ceea270 100644
--- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java
+++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java
@@ -343,6 +343,8 @@ public final class CommonFilesPanel extends javax.swing.JPanel {
allDataSourcesRadioButton = new javax.swing.JRadioButton();
withinDataSourceRadioButton = new javax.swing.JRadioButton();
selectDataSourceComboBox = new javax.swing.JComboBox<>();
+ jLabel1 = new javax.swing.JLabel();
+ cancelButton = new javax.swing.JButton();
setPreferredSize(new java.awt.Dimension(300, 300));
@@ -382,6 +384,18 @@ public final class CommonFilesPanel extends javax.swing.JPanel {
}
});
+ org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(CommonFilesPanel.class, "CommonFilesPanel.jLabel1.text")); // NOI18N
+ jLabel1.setFocusable(false);
+
+ org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(CommonFilesPanel.class, "CommonFilesPanel.cancelButton.text")); // NOI18N
+ cancelButton.setActionCommand(org.openide.util.NbBundle.getMessage(CommonFilesPanel.class, "CommonFilesPanel.cancelButton.actionCommand")); // NOI18N
+ cancelButton.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
+ cancelButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cancelButtonActionPerformed(evt);
+ }
+ });
+
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
@@ -389,22 +403,36 @@ public final class CommonFilesPanel extends javax.swing.JPanel {
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(selectDataSourceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(searchButton)
- .addComponent(withinDataSourceRadioButton)
- .addComponent(allDataSourcesRadioButton))
- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(cancelButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(searchButton))
+ .addGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(withinDataSourceRadioButton)
+ .addComponent(allDataSourcesRadioButton)
+ .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGroup(layout.createSequentialGroup()
+ .addGap(6, 6, 6)
+ .addComponent(selectDataSourceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addGap(0, 3, Short.MAX_VALUE)))
+ .addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(allDataSourcesRadioButton)
- .addGap(2, 2, 2)
- .addComponent(withinDataSourceRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addGap(18, 18, 18)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(withinDataSourceRadioButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(selectDataSourceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 90, Short.MAX_VALUE)
- .addComponent(searchButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 122, Short.MAX_VALUE)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(cancelButton)
+ .addComponent(searchButton))
.addContainerGap())
);
}// //GEN-END:initComponents
@@ -432,6 +460,10 @@ public final class CommonFilesPanel extends javax.swing.JPanel {
withinDataSourceSelected(withinDataSourceRadioButton.isSelected());
}//GEN-LAST:event_withinDataSourceRadioButtonActionPerformed
+ private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
+ SwingUtilities.windowForComponent(this).dispose();
+ }//GEN-LAST:event_cancelButtonActionPerformed
+
private void withinDataSourceSelected(boolean selected) {
selectDataSourceComboBox.setEnabled(selected);
if (selectDataSourceComboBox.isEnabled()) {
@@ -442,7 +474,9 @@ public final class CommonFilesPanel extends javax.swing.JPanel {
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JRadioButton allDataSourcesRadioButton;
+ private javax.swing.JButton cancelButton;
private javax.swing.ButtonGroup dataSourcesButtonGroup;
+ private javax.swing.JLabel jLabel1;
private javax.swing.JButton searchButton;
private javax.swing.JComboBox selectDataSourceComboBox;
private javax.swing.JRadioButton withinDataSourceRadioButton;
diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/SingleDataSource.java b/Core/src/org/sleuthkit/autopsy/commonfilesearch/SingleDataSource.java
index d25f8aec73..d2601eb025 100644
--- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/SingleDataSource.java
+++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/SingleDataSource.java
@@ -26,7 +26,7 @@ import java.util.Map;
*/
class SingleDataSource extends CommonFilesMetaDataBuilder {
- private static final String WHERE_CLAUSE = "md5 in (select md5 from tsk_files where data_source_obj_id=%s and (known != 1 OR known IS NULL) GROUP BY md5 HAVING COUNT(*) > 1) AND data_source_obj_id=%s order by md5";
+ private static final String WHERE_CLAUSE = "md5 in (select md5 from tsk_files where md5 in (select md5 from tsk_files where (known != 1 OR known IS NULL) and data_source_obj_id=%s) GROUP BY md5 HAVING COUNT(*) > 1) order by md5";
private final Long selectedDataSourceId;
public SingleDataSource(Long dataSourceId, Map dataSourceIdMap) {
@@ -36,7 +36,7 @@ class SingleDataSource extends CommonFilesMetaDataBuilder {
@Override
protected String buildSqlWhereClause() {
- Object[] args = new String[]{Long.toString(this.selectedDataSourceId), Long.toString(this.selectedDataSourceId)};
+ Object[] args = new String[]{Long.toString(this.selectedDataSourceId)};
return String.format(SingleDataSource.WHERE_CLAUSE, args);
}
}