diff --git a/.gitignore b/.gitignore
index 7d7a3e0543..e9266d6e07 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
/*/build/
*/nbproject/private/*
/nbproject/private/*
+
/Core/release/
/Core/src/org/sleuthkit/autopsy/coreutils/Version.properties
/Core/src/org/sleuthkit/autopsy/casemodule/docs/QuickStart.html
@@ -13,13 +14,15 @@
/Core/nbproject/*
!/Core/nbproject/project.xml
!/Core/nbproject/project.properties
+
/CoreLibs/release/
/CoreLibs/build/
/CoreLibs/dist/
/CoreLibs/nbproject/*
!/CoreLibs/nbproject/project.xml
!/CoreLibs/nbproject/project.properties
-KeywordSearch/release/
+
+/KeywordSearch/release/
/KeywordSearch/build/
/KeywordSearch/dist/
/KeywordSearch/nbproject/*
@@ -28,6 +31,7 @@ KeywordSearch/release/
*/genfiles.properties
genfiles.properties
+
/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties
/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties
/branding/build/
@@ -35,6 +39,7 @@ genfiles.properties
/branding/nbproject/*
!/branding/nbproject/project.xml
!/branding/nbproject/project.properties
+
/test/input/*
!/test/input/notablehashes.txt-md5.idx
!/test/input/notablekeywords.xml
@@ -65,11 +70,10 @@ genfiles.properties
/gen_version.txt
hs_err_pid*.log
-
.DS_Store
.*.swp
-
-/ImageGallery/release/
-/RecentActivity/release/
/Experimental/release/
+/ImageGallery/release/
/thunderbirdparser/release/
+/RecentActivity/release/
+
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java
index 9ef5f6e3b8..474ffa18ff 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java
@@ -682,10 +682,8 @@ public class Case {
* Delete the text index.
*/
progressIndicator.start(Bundle.Case_progressMessage_deletingTextIndex());
-
- for (KeywordSearchService searchService : Lookup.getDefault().lookupAll(KeywordSearchService.class
- )) {
- searchService.deleteTextIndex(metadata.getTextIndexName());
+ for (KeywordSearchService searchService : Lookup.getDefault().lookupAll(KeywordSearchService.class)) {
+ searchService.deleteTextIndex(metadata);
}
if (CaseType.MULTI_USER_CASE == metadata.getCaseType()) {
diff --git a/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.form
index e9c71501e5..a03fa2cd75 100644
--- a/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.form
+++ b/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.form
@@ -33,11 +33,11 @@
-
+
-
+
-
+
@@ -118,25 +118,25 @@
-
+
-
-
+
+
-
+
-
+
@@ -181,16 +181,16 @@
-
+
-
+
-
+
-
+
@@ -206,16 +206,16 @@
-
+
-
+
-
+
-
+
@@ -231,10 +231,16 @@
-
+
+
+
+
+
+
+
-
+
diff --git a/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.java
index 249f77cbfd..3dcbb6dc16 100644
--- a/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.java
+++ b/Core/src/org/sleuthkit/autopsy/ingest/ProfileSettingsPanel.java
@@ -110,10 +110,10 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
newProfileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(newProfileButton, org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, "ProfileSettingsPanel.newProfileButton.text")); // NOI18N
- newProfileButton.setMargin(new java.awt.Insets(2, 8, 2, 8));
- newProfileButton.setMaximumSize(new java.awt.Dimension(97, 23));
- newProfileButton.setMinimumSize(new java.awt.Dimension(97, 23));
- newProfileButton.setPreferredSize(new java.awt.Dimension(97, 23));
+ newProfileButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ newProfileButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ newProfileButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ newProfileButton.setPreferredSize(new java.awt.Dimension(111, 25));
newProfileButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newProfileButtonActionPerformed(evt);
@@ -122,10 +122,10 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
editProfileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(editProfileButton, org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, "ProfileSettingsPanel.editProfileButton.text")); // NOI18N
- editProfileButton.setMargin(new java.awt.Insets(2, 8, 2, 8));
- editProfileButton.setMaximumSize(new java.awt.Dimension(97, 23));
- editProfileButton.setMinimumSize(new java.awt.Dimension(97, 23));
- editProfileButton.setPreferredSize(new java.awt.Dimension(97, 23));
+ editProfileButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ editProfileButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ editProfileButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ editProfileButton.setPreferredSize(new java.awt.Dimension(111, 25));
editProfileButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editProfileButtonActionPerformed(evt);
@@ -134,8 +134,10 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
deleteProfileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(deleteProfileButton, org.openide.util.NbBundle.getMessage(ProfileSettingsPanel.class, "ProfileSettingsPanel.deleteProfileButton.text")); // NOI18N
- deleteProfileButton.setMargin(new java.awt.Insets(2, 8, 2, 8));
- deleteProfileButton.setPreferredSize(new java.awt.Dimension(97, 23));
+ deleteProfileButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ deleteProfileButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ deleteProfileButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ deleteProfileButton.setPreferredSize(new java.awt.Dimension(111, 25));
deleteProfileButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteProfileButtonActionPerformed(evt);
@@ -210,11 +212,11 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
- .addComponent(newProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(newProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(editProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(editProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(deleteProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(deleteProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(profileListLabel))
.addGap(6, 6, 6))
@@ -279,21 +281,21 @@ class ProfileSettingsPanel extends IngestModuleGlobalSettingsPanel implements Op
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(selectedModulesLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(selectedModulesPane, javax.swing.GroupLayout.DEFAULT_SIZE, 170, Short.MAX_VALUE))
+ .addComponent(selectedModulesPane, javax.swing.GroupLayout.DEFAULT_SIZE, 171, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(profileListLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(profileListPane, javax.swing.GroupLayout.DEFAULT_SIZE, 346, Short.MAX_VALUE)
- .addGap(9, 9, 9)))
- .addGap(4, 4, 4)
+ .addComponent(profileListPane, javax.swing.GroupLayout.DEFAULT_SIZE, 356, Short.MAX_VALUE)
+ .addGap(0, 0, 0)))
+ .addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(newProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(editProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(deleteProfileButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ingestWarningLabel))
- .addContainerGap())
+ .addGap(6, 6, 6))
.addComponent(jSeparator2)))
);
}// //GEN-END:initComponents
diff --git a/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java b/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java
index 412d23251b..4a702b6df5 100644
--- a/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java
+++ b/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java
@@ -19,6 +19,7 @@
package org.sleuthkit.autopsy.keywordsearchservice;
import java.io.Closeable;
+import org.sleuthkit.autopsy.casemodule.CaseMetadata;
import org.sleuthkit.datamodel.BlackboardArtifact;
import org.sleuthkit.datamodel.TskCoreException;
@@ -52,10 +53,10 @@ public interface KeywordSearchService extends Closeable {
/**
* Deletes the keyword search text index for a case.
*
- * @param textIndexName The text index name.
- *
+ * @param metadata The CaseMetadata which will have its core deleted.
+ *
* @throws KeywordSearchServiceException if unable to delete.
*/
- public void deleteTextIndex(String textIndexName) throws KeywordSearchServiceException;
+ public void deleteTextIndex(CaseMetadata metadata) throws KeywordSearchServiceException;
}
diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form
index d6ecd9bfc7..bffb00f33b 100755
--- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form
+++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.form
@@ -68,20 +68,20 @@
-
+
-
+
-
+
-
+
-
-
+
+
@@ -285,9 +285,9 @@
-
-
-
+
+
+
@@ -459,6 +459,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -648,6 +660,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -685,6 +709,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -892,6 +928,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -905,6 +953,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -919,6 +979,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java
index 93b8bc52ed..1741f43064 100755
--- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java
+++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetDefsPanel.java
@@ -675,6 +675,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
editSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(editSetButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.interesting.editSetButton.text")); // NOI18N
editSetButton.setEnabled(false);
+ editSetButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ editSetButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ editSetButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ editSetButton.setPreferredSize(new java.awt.Dimension(111, 25));
editSetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editSetButtonActionPerformed(evt);
@@ -733,6 +737,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
deleteSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(deleteSetButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.interesting.deleteSetButton.text")); // NOI18N
deleteSetButton.setEnabled(false);
+ deleteSetButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ deleteSetButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ deleteSetButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ deleteSetButton.setPreferredSize(new java.awt.Dimension(111, 25));
deleteSetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteSetButtonActionPerformed(evt);
@@ -752,6 +760,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
newSetButton.setFont(newSetButton.getFont().deriveFont(newSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
newSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(newSetButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.interesting.newSetButton.text")); // NOI18N
+ newSetButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ newSetButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ newSetButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ newSetButton.setPreferredSize(new java.awt.Dimension(111, 25));
newSetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newSetButtonActionPerformed(evt);
@@ -818,6 +830,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
copySetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/new16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(copySetButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.interesting.copySetButton.text")); // NOI18N
copySetButton.setEnabled(false);
+ copySetButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ copySetButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ copySetButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ copySetButton.setPreferredSize(new java.awt.Dimension(111, 25));
copySetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
copySetButtonActionPerformed(evt);
@@ -826,6 +842,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
importSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/import16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(importSetButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.interesting.importSetButton.text")); // NOI18N
+ importSetButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ importSetButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ importSetButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ importSetButton.setPreferredSize(new java.awt.Dimension(111, 25));
importSetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
importSetButtonActionPerformed(evt);
@@ -835,6 +855,10 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
exportSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/export16.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(exportSetButton, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.interesting.exportSetButton.text")); // NOI18N
exportSetButton.setEnabled(false);
+ exportSetButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ exportSetButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ exportSetButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ exportSetButton.setPreferredSize(new java.awt.Dimension(111, 25));
exportSetButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exportSetButtonActionPerformed(evt);
@@ -851,17 +875,17 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
- .addComponent(copySetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(copySetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(importSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE))
+ .addComponent(importSetButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
- .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)))
+ .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(exportSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(deleteSetButton, javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE)))
+ .addComponent(exportSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(deleteSetButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(setsListLabel))
@@ -946,7 +970,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
.addGap(8, 8, 8))))
);
- jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {copySetButton, deleteSetButton, editSetButton, newSetButton});
+ jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {copySetButton, deleteSetButton, editSetButton, exportSetButton, importSetButton, newSetButton});
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -1019,18 +1043,18 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
.addComponent(setsListScrollPane)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(newSetButton)
- .addComponent(editSetButton)
- .addComponent(deleteSetButton))
+ .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(deleteSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(copySetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(importSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(exportSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(copySetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(importSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(exportSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(6, 6, 6))))
);
- jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, newRuleButton, newSetButton});
+ jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {copySetButton, deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, exportSetButton, importSetButton, newRuleButton, newSetButton});
jScrollPane1.setViewportView(jPanel1);
diff --git a/Experimental/build.xml b/Experimental/build.xml
index b13b9ca777..0ea23765f0 100644
--- a/Experimental/build.xml
+++ b/Experimental/build.xml
@@ -6,17 +6,19 @@
Builds, tests, and runs the project org.sleuthkit.autopsy.experimental.
-
+
+
-
+
-
+
+
+
-
diff --git a/Experimental/ivy.xml b/Experimental/ivy.xml
index ebd7bade53..5934399ba3 100644
--- a/Experimental/ivy.xml
+++ b/Experimental/ivy.xml
@@ -7,16 +7,10 @@
-
-
-
-
-
-
diff --git a/Experimental/nbproject/project.properties b/Experimental/nbproject/project.properties
index 49be6268a5..34d831c12a 100644
--- a/Experimental/nbproject/project.properties
+++ b/Experimental/nbproject/project.properties
@@ -2,11 +2,9 @@ file.reference.c3p0-0.9.5.jar=release/modules/ext/c3p0-0.9.5.jar
file.reference.jackson-core-2.7.0.jar=release/modules/ext/jackson-core-2.7.0.jar
file.reference.LGoodDatePicker-4.3.1.jar=release/modules/ext/LGoodDatePicker-4.3.1.jar
file.reference.mchange-commons-java-0.2.9.jar=release/modules/ext/mchange-commons-java-0.2.9.jar
-file.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1.jar
+file.reference.postgresql-9.4-1201-jdbc41.jar=release/modules/ext/postgresql-9.4-1201-jdbc41.jar
file.reference.tika-core-1.5.jar=release/modules/ext/tika-core-1.5.jar
javac.source=1.8
javac.compilerargs=-Xlint -Xlint:-serial
javadoc.reference.LGoodDatePicker-4.3.1.jar=release/modules/ext/LGoodDatePicker-4.3.1-javadoc.jar
-javadoc.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1-javadoc.jar
source.reference.LGoodDatePicker-4.3.1.jar=release/modules/ext/LGoodDatePicker-4.3.1-sources.jar
-source.reference.solr-solrj-4.9.1.jar=release/modules/ext/solr-solrj-4.9.1-sources.jar
diff --git a/Experimental/nbproject/project.xml b/Experimental/nbproject/project.xml
index 63cedca0de..714d6e4028 100644
--- a/Experimental/nbproject/project.xml
+++ b/Experimental/nbproject/project.xml
@@ -119,6 +119,10 @@
org.sleuthkit.autopsy.experimental.autoingest
org.sleuthkit.autopsy.experimental.configuration
+
+ ext/postgresql-9.4-1201-jdbc41.jar
+ release/modules/ext/postgresql-9.4-1201-jdbc41.jar
+
ext/mchange-commons-java-0.2.9.jar
release/modules/ext/mchange-commons-java-0.2.9.jar
@@ -139,30 +143,6 @@
ext/c3p0-0.9.5.jar
release/modules/ext/c3p0-0.9.5.jar
-
- ext/solr-solrj-4.9.1.jar
- release/modules/ext/solr-solrj-4.9.1.jar
-
-
- ext/httpclient-4.3.1.jar
- release/modules/ext/httpclient-4.3.1.jar
-
-
- ext/httpmime-4.3.1.jar
- release/modules/ext/httpmime-4.3.1.jar
-
-
- ext/httpcore-4.3.jar
- release/modules/ext/httpcore-4.3.jar
-
-
- ext/noggit-0.5.jar
- release/modules/ext/noggit-0.5.jar
-
-
- ext/postgresql-9.4-1201-jdbc41.jar
- release/modules/ext/postgresql-9.4-1201-jdbc41.jar
-
diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java
index c347ec39d2..9ffec1bedc 100644
--- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java
+++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java
@@ -32,10 +32,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
-import java.sql.Connection;
-import java.sql.DriverManager;
import java.sql.SQLException;
-import java.sql.Statement;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
@@ -64,7 +61,6 @@ import java.util.stream.Collectors;
import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.Immutable;
import javax.annotation.concurrent.ThreadSafe;
-import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.openide.util.Lookup;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.Case.CaseType;
@@ -77,7 +73,6 @@ import org.sleuthkit.autopsy.coordinationservice.CoordinationService.Lock;
import org.sleuthkit.autopsy.core.RuntimeProperties;
import org.sleuthkit.autopsy.core.ServicesMonitor;
import org.sleuthkit.autopsy.core.ServicesMonitor.ServicesMonitorException;
-import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.core.UserPreferencesException;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult;
@@ -106,7 +101,6 @@ import org.sleuthkit.autopsy.ingest.IngestJobSettings;
import org.sleuthkit.autopsy.ingest.IngestJobStartResult;
import org.sleuthkit.autopsy.ingest.IngestManager;
import org.sleuthkit.autopsy.ingest.IngestModuleError;
-import org.sleuthkit.datamodel.CaseDbConnectionInfo;
import org.sleuthkit.datamodel.Content;
/**
@@ -781,44 +775,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
}
}
- /**
- * Tries to unload the Solr core for a case.
- *
- * @param caseName The case name.
- * @param coreName The name of the core to unload.
- *
- * @throws Exception if there is a problem unloading the core or it has
- * already been unloaded (e.g., by the server due to
- * resource constraints), or there is a problem deleting
- * files associated with the core
- */
- private void unloadSolrCore(String coreName) throws Exception {
- /*
- * Send a core unload request to the Solr server, with the parameters
- * that request deleting the index and the instance directory
- * (deleteInstanceDir removes everything related to the core, the index
- * directory, the configuration files, etc.) set to true.
- */
- String url = "http://" + UserPreferences.getIndexingServerHost() + ":" + UserPreferences.getIndexingServerPort() + "/solr";
- HttpSolrServer solrServer = new HttpSolrServer(url);
- org.apache.solr.client.solrj.request.CoreAdminRequest.unloadCore(coreName, true, true, solrServer);
- }
-
- /**
- * Tries to delete the case database for a case.
- *
- * @param caseFolderPath The case name.
- * @param caseDatbaseName The case database name.
- */
- private void deleteCaseDatabase(String caseDatbaseName) throws UserPreferencesException, ClassNotFoundException, SQLException {
- CaseDbConnectionInfo db = UserPreferences.getDatabaseConnectionInfo();
- Class.forName("org.postgresql.Driver"); //NON-NLS
- try (Connection connection = DriverManager.getConnection("jdbc:postgresql://" + db.getHost() + ":" + db.getPort() + "/postgres", db.getUserName(), db.getPassword()); //NON-NLS
- Statement statement = connection.createStatement();) {
- String deleteCommand = "DROP DATABASE \"" + caseDatbaseName + "\""; //NON-NLS
- statement.execute(deleteCommand);
- }
- }
+
/**
* Removes a set of auto ingest jobs from a collection of jobs.
diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java
index 1b182d0900..661a895db9 100755
--- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java
+++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/OpenAction.java
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
-* Copyright 2013 Basis Technology Corp.
+* Copyright 2011-17 Basis Technology Corp.
* Contact: carrier sleuthkit org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -53,10 +53,10 @@ import org.sleuthkit.autopsy.imagegallery.ImageGalleryTopComponent;
"OpenAction.stale.confDlg.title=Image Gallery"})
public final class OpenAction extends CallableSystemAction implements Presenter.Toolbar {
- private static final String VIEW_IMAGES_VIDEOS = Bundle.CTL_OpenAction();
- private static final boolean fxInited = Installer.isJavaFxInited();
private static final Logger LOGGER = Logger.getLogger(OpenAction.class.getName());
- private JButton toolbarButton = new JButton();
+ private static final String VIEW_IMAGES_VIDEOS = Bundle.CTL_OpenAction();
+
+ private final JButton toolbarButton = new JButton();
private final PropertyChangeListener pcl;
public OpenAction() {
@@ -64,7 +64,7 @@ public final class OpenAction extends CallableSystemAction implements Presenter.
toolbarButton.addActionListener(actionEvent -> performAction());
pcl = (PropertyChangeEvent evt) -> {
if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) {
- setEnabled(Case.isCaseOpen());
+ setEnabled(evt.getNewValue() != null);
}
};
Case.addPropertyChangeListener(pcl);
@@ -73,7 +73,7 @@ public final class OpenAction extends CallableSystemAction implements Presenter.
@Override
public boolean isEnabled() {
- return Case.isCaseOpen() && fxInited && Case.getCurrentCase().hasData();
+ return Case.isCaseOpen() && Installer.isJavaFxInited() && Case.getCurrentCase().hasData();
}
/** Returns the toolbar component of this action
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties
index e784e4888a..050e2d687e 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties
@@ -312,7 +312,7 @@ GlobalEditListPanel.keywordErrorsPlural.text={0} keywords could not be parsed. P
GlobalListsManagementPanel.exportButton.text=Export List
GlobalListsManagementPanel.deleteListButton.text=Delete List
GlobalListsManagementPanel.copyListButton.text=Copy List
-GlobalListsManagementPanel.renameListButton.text=Edit List
+GlobalListsManagementPanel.renameListButton.text=Edit List Name
GlobalEditListPanel.editWordButton.text=Edit Keyword
SolrSearchService.ServiceName=Solr Keyword Search Service
SolrSearchService.IndexUpgradeDialog.title=Text Index Upgrade Required In Order To Open Case
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/EnCaseKeywordSearchList.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/EnCaseKeywordSearchList.java
index ff5792e60f..a567812057 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/EnCaseKeywordSearchList.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/EnCaseKeywordSearchList.java
@@ -74,7 +74,7 @@ class EnCaseKeywordSearchList extends KeywordSearchList {
if (child.flags.contains(EncaseFlag.pg)) { // Skip GREP keywords
break;
}
- children.add(new Keyword(child.value, true));
+ children.add(new Keyword(child.value, true, true));
break;
}
}
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.form
index 6ccf9f6836..cbfad12e0b 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.form
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.form
@@ -151,7 +151,7 @@
-
+
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java
index 8e9d4bb5c5..cb8f55f1aa 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java
@@ -159,10 +159,10 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis
continue;
}
- final Keyword keyword = new Keyword(newWord, !dialog.isKeywordRegex(), dialog.isKeywordExact());
+ final Keyword keyword = new Keyword(newWord, !dialog.isKeywordRegex(), dialog.isKeywordExact(), currentKeywordList.getName(), newWord);
if (currentKeywordList.hasKeyword(keyword)) {
dupeCount++;
- continue;
+ continue;
}
//check if valid
@@ -282,7 +282,7 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis
keywordsLabel.setText(org.openide.util.NbBundle.getMessage(GlobalEditListPanel.class, "KeywordSearchEditListPanel.keywordsLabel.text")); // NOI18N
- newKeywordsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/new16.png"))); // NOI18N
+ newKeywordsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/add16.png"))); // NOI18N
newKeywordsButton.setText(org.openide.util.NbBundle.getMessage(GlobalEditListPanel.class, "GlobalEditListPanel.newKeywordsButton.text")); // NOI18N
newKeywordsButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.form
index ba8a541eba..18c416a00f 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.form
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.form
@@ -41,7 +41,7 @@
-
+
@@ -50,8 +50,9 @@
-
+
+
@@ -62,7 +63,7 @@
-
+
@@ -87,7 +88,7 @@
-
+
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java
index 9be40c184a..f0c8162d8f 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java
@@ -95,10 +95,9 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option
* Duplicates the selected keyword list, returns whether or not the keyword
* list was duplicated.
*
- * @return true or false
+ * @return true if the list was copied false if it was not
*/
private boolean copyAction() {
- boolean shouldAdd = false;
final String FEATURE_NAME = NbBundle.getMessage(this.getClass(),
"KeywordSearchGlobalListSettingsPanel.component.featureName.text");
KeywordList currentKeywordList = editListPanel.getCurrentKeywordList();
@@ -114,31 +113,30 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option
null,
null,
currentKeywordList.getName());
- if (listName == null || listName.trim().equals("")) {
- return shouldAdd;
- }
+ if (listName == null) {
+ return false;
+ }
+ //remove trailing and leading spaces so lists can't have visually identical names
+ listName = listName.trim();
+ //if the name is empty or unchanged return without changing anything
+ if (listName.equals("") || listName.equals(currentKeywordList.getName())) {
+ return false;
+ }
XmlKeywordSearchList writer = XmlKeywordSearchList.getCurrent();
if (writer.listExists(listName) && writer.getList(listName).isEditable()) {
KeywordSearchUtil.displayDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.noOwDefaultMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
- return shouldAdd;
+ return false;
}
if (writer.listExists(listName)) {
- boolean replace = KeywordSearchUtil.displayConfirmDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg", listName),
- KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
- if (replace) {
- shouldAdd = true;
+ if (!KeywordSearchUtil.displayConfirmDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.kwListExistMsg", listName),
+ KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN)) {
+ return false;
}
-
- } else {
- shouldAdd = true;
}
-
- if (shouldAdd) {
- writer.addList(listName, keywords);
- KeywordSearchUtil.displayDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg", listName), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
- }
- return shouldAdd;
+ writer.addList(listName, keywords);
+ KeywordSearchUtil.displayDialog(FEATURE_NAME, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.kwListSavedMsg", listName), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.INFO);
+ return true;
}
@Override
@@ -187,16 +185,17 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option
rightPanel = new javax.swing.JPanel();
mainSplitPane.setBorder(null);
- mainSplitPane.setDividerLocation(300);
+ mainSplitPane.setDividerLocation(361);
mainSplitPane.setDividerSize(1);
- leftPanel.setPreferredSize(new java.awt.Dimension(287, 327));
+ leftPanel.setPreferredSize(new java.awt.Dimension(309, 327));
+ leftPanel.setVerifyInputWhenFocusTarget(false);
javax.swing.GroupLayout leftPanelLayout = new javax.swing.GroupLayout(leftPanel);
leftPanel.setLayout(leftPanelLayout);
leftPanelLayout.setHorizontalGroup(
leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 300, Short.MAX_VALUE)
+ .addGap(0, 361, Short.MAX_VALUE)
);
leftPanelLayout.setVerticalGroup(
leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -211,7 +210,7 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option
rightPanel.setLayout(rightPanelLayout);
rightPanelLayout.setHorizontalGroup(
rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 372, Short.MAX_VALUE)
+ .addGap(0, 311, Short.MAX_VALUE)
);
rightPanelLayout.setVerticalGroup(
rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.form
index b86ed01a12..6609e672e0 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.form
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.form
@@ -22,57 +22,52 @@
-
+
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
@@ -108,14 +103,23 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
@@ -132,7 +136,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -156,7 +169,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -166,14 +188,23 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
@@ -190,7 +221,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -207,7 +247,16 @@
-
+
+
+
+
+
+
+
+
+
+
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java
index 730bfc1170..f7aa622d62 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java
@@ -203,10 +203,13 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
});
jScrollPane1.setViewportView(listsTable);
- newListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/new16.png"))); // NOI18N
+ newListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/add16.png"))); // NOI18N
newListButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.newListButton.text")); // NOI18N
newListButton.setIconTextGap(2);
- newListButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ newListButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ newListButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ newListButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ newListButton.setPreferredSize(new java.awt.Dimension(111, 25));
newListButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newListButtonActionPerformed(evt);
@@ -216,7 +219,10 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
importButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/import16.png"))); // NOI18N
importButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.importButton.text")); // NOI18N
importButton.setIconTextGap(2);
- importButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ importButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ importButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ importButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ importButton.setPreferredSize(new java.awt.Dimension(111, 25));
importButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
importButtonActionPerformed(evt);
@@ -228,17 +234,23 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
exportButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/export16.png"))); // NOI18N
exportButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.exportButton.text")); // NOI18N
exportButton.setIconTextGap(2);
- exportButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ exportButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ exportButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ exportButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ exportButton.setPreferredSize(new java.awt.Dimension(111, 25));
exportButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exportButtonActionPerformed(evt);
}
});
- copyListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/add16.png"))); // NOI18N
+ copyListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/new16.png"))); // NOI18N
copyListButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.copyListButton.text")); // NOI18N
copyListButton.setIconTextGap(2);
- copyListButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ copyListButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ copyListButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ copyListButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ copyListButton.setPreferredSize(new java.awt.Dimension(111, 25));
copyListButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
copyListButtonActionPerformed(evt);
@@ -248,7 +260,10 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
deleteListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/delete16.png"))); // NOI18N
deleteListButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.deleteListButton.text")); // NOI18N
deleteListButton.setIconTextGap(2);
- deleteListButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ deleteListButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ deleteListButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ deleteListButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ deleteListButton.setPreferredSize(new java.awt.Dimension(111, 25));
deleteListButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteListButtonActionPerformed(evt);
@@ -258,7 +273,10 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
renameListButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/edit16.png"))); // NOI18N
renameListButton.setText(org.openide.util.NbBundle.getMessage(GlobalListsManagementPanel.class, "GlobalListsManagementPanel.renameListButton.text")); // NOI18N
renameListButton.setIconTextGap(2);
- renameListButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
+ renameListButton.setMargin(new java.awt.Insets(2, 6, 2, 6));
+ renameListButton.setMaximumSize(new java.awt.Dimension(111, 25));
+ renameListButton.setMinimumSize(new java.awt.Dimension(111, 25));
+ renameListButton.setPreferredSize(new java.awt.Dimension(111, 25));
renameListButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
renameListButtonActionPerformed(evt);
@@ -270,27 +288,24 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
- .addContainerGap()
+ .addGap(10, 10, 10)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
- .addComponent(keywordListsLabel)
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(newListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(copyListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(newListButton, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(deleteListButton, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE))
- .addGap(12, 12, 12)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
- .addComponent(renameListButton, javax.swing.GroupLayout.PREFERRED_SIZE, 75, Short.MAX_VALUE)
- .addComponent(importButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addGap(12, 12, 12)
+ .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(renameListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(copyListButton, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE)
- .addGap(0, 1, Short.MAX_VALUE))
- .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
- .addGap(0, 0, Short.MAX_VALUE)
- .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)))))
- .addContainerGap())
+ .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(deleteListButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addGap(0, 0, Short.MAX_VALUE))
+ .addComponent(keywordListsLabel))
+ .addGap(6, 6, 6))
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {copyListButton, deleteListButton, exportButton, importButton, newListButton, renameListButton});
@@ -298,21 +313,21 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
- .addContainerGap()
+ .addGap(22, 22, 22)
.addComponent(keywordListsLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE)
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 305, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(newListButton)
- .addComponent(renameListButton)
- .addComponent(copyListButton))
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(newListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(renameListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(deleteListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(importButton)
- .addComponent(exportButton)
- .addComponent(deleteListButton))
- .addContainerGap())
+ .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(copyListButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGap(6, 6, 6))
);
layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {copyListButton, deleteListButton, exportButton, importButton, newListButton, renameListButton});
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java
index 9aa8b74a4f..ffe3a66456 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/HighlightedText.java
@@ -179,7 +179,7 @@ class HighlightedText implements IndexedText {
// Run a query to figure out which chunks for the current object have
// hits for this keyword.
- Keyword keywordQuery = new Keyword(keyword, isLiteral);
+ Keyword keywordQuery = new Keyword(keyword, isLiteral, true);
KeywordSearchQuery chunksQuery = new LuceneQuery(new KeywordList(Arrays.asList(keywordQuery)), keywordQuery);
chunksQuery.escape();
chunksQuery.addFilter(new KeywordQueryFilter(FilterType.CHUNK, this.objectId));
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java
index 0c84da9c73..2033dfbdb7 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Keyword.java
@@ -36,21 +36,13 @@ class Keyword {
private boolean isLiteral;
private boolean isWholeWord;
private BlackboardAttribute.ATTRIBUTE_TYPE artifactAtrributeType;
-
- /**
- * Constructs a representation of a keyword for which to search. The search
- * term for the keyword may be either a literal term that will be treated as
- * a whole word, or a regex.
- *
- * @param searchTerm The search term for the keyword.
- * @param isLiteral Whether or not the search term is a literal term that
- * will be treated as a whole word, instead of a regex.
+ private final String listName;
+ /*
+ * For substring searches, original search term (e.g. "pass" or "enger") can
+ * be different from the search term (e.g. "passenger") that is found and
+ * used (e.g. for highlighting purposes).
*/
- Keyword(String searchTerm, boolean isLiteral) {
- this.searchTerm = searchTerm;
- this.isLiteral = isLiteral;
- this.isWholeWord = true;
- }
+ private final String originalTerm;
/**
* Constructs a representation of a keyword for which to search. The search
@@ -68,6 +60,44 @@ class Keyword {
this.searchTerm = searchTerm;
this.isLiteral = isLiteral;
this.isWholeWord = isWholeWord;
+ this.listName = "";
+ this.originalTerm = searchTerm;
+ }
+
+ /**
+ * Constructs a representation of a keyword for which to search. The search
+ * term may be either a literal term, to be treated as either a whole word
+ * or as a substring, or a regex.
+ *
+ * NOTE: The addition of keyword list name and original search term was
+ * added to facilitate proper de-duping of results of periodic keyword
+ * searches that does not lose any keyword hits. Without this addition when
+ * using substring search feature during ingest, if there are multiple
+ * searches on different keyword lists that produce the same keyword hit,
+ * that hit is only going to be displayed in results of one of the list. For
+ * example, two substring searches, such as "pass" and "enger", will be
+ * missing one copy of any shared entries (i.e., "passenger" will only show
+ * up on one list). See JIRA story 2495.
+ *
+ * @param searchTerm The search term.
+ * @param isLiteral Whether or not the search term is a literal term,
+ * instead of a regex.
+ * @param isWholeWord Whether or not the search term, if it is a literal
+ * search term, should be treated as a whole word rather
+ * than a substring.
+ * @param listName Keyword list name.
+ * @param originalTerm The original search term that was entered into the
+ * keyword list. For substring searches, original search
+ * term (e.g. "pass" or "enger") can be different from
+ * the search term (e.g. "passenger") that is found and
+ * used (e.g. for highlighting purposes).
+ */
+ Keyword(String searchTerm, boolean isLiteral, boolean isWholeWord, String listName, String originalTerm) {
+ this.searchTerm = searchTerm;
+ this.isLiteral = isLiteral;
+ this.isWholeWord = isWholeWord;
+ this.listName = listName;
+ this.originalTerm = originalTerm;
}
/**
@@ -85,7 +115,7 @@ class Keyword {
* @param keywordType The artifact attribute type.
*/
Keyword(String searchTerm, boolean isLiteral, BlackboardAttribute.ATTRIBUTE_TYPE artifactAtrributeType) {
- this(searchTerm, isLiteral);
+ this(searchTerm, isLiteral, true);
this.artifactAtrributeType = artifactAtrributeType;
}
@@ -174,7 +204,9 @@ class Keyword {
Keyword other = (Keyword) obj;
return (this.searchTerm.equals(other.getSearchTerm())
&& this.isLiteral == other.searchTermIsLiteral()
- && this.isWholeWord == other.searchTermIsWholeWord());
+ && this.isWholeWord == other.searchTermIsWholeWord()
+ && this.listName.equals(other.getListName())
+ && this.originalTerm.equals(other.getOriginalTerm()));
}
@Override
@@ -186,4 +218,18 @@ class Keyword {
return hash;
}
+ /**
+ * @return the listName
+ */
+ String getListName() {
+ return listName;
+ }
+
+ /**
+ * @return the originalTerm
+ */
+ String getOriginalTerm() {
+ return originalTerm;
+ }
+
}
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java
index 741928c92d..9f8686898f 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/LuceneQuery.java
@@ -70,7 +70,7 @@ class LuceneQuery implements KeywordSearchQuery {
LuceneQuery(KeywordList keywordList, Keyword keyword) {
this.keywordList = keywordList;
this.originalKeyword = keyword;
- this.keywordStringEscaped = this.originalKeyword.getSearchTerm();
+ this.keywordStringEscaped = this.originalKeyword.getSearchTerm();
}
@Override
@@ -181,7 +181,7 @@ class LuceneQuery implements KeywordSearchQuery {
QueryResults results = new QueryResults(this);
//in case of single term literal query there is only 1 term
- results.addResult(new Keyword(originalKeyword.getSearchTerm(), true), matches);
+ results.addResult(new Keyword(originalKeyword.getSearchTerm(), true, true, originalKeyword.getListName(), originalKeyword.getOriginalTerm()), matches);
return results;
}
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java
index c7004b1fa7..9834332567 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/RegexQuery.java
@@ -204,9 +204,9 @@ final class RegexQuery implements KeywordSearchQuery {
try {
List keywordHits = createKeywordHits(resultDoc);
for (KeywordHit hit : keywordHits) {
- hitsMultiMap.put(new Keyword(hit.getHit(), true), hit);
+ hitsMultiMap.put(new Keyword(hit.getHit(), true, true, originalKeyword.getListName(), originalKeyword.getOriginalTerm()), hit);
}
- } catch (TskException ex) {
+ } catch (TskException ex) {
//
}
}
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java
index df1cb2668d..3ff7c7cfe9 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java
@@ -37,6 +37,7 @@ import org.openide.util.NbBundle;
import org.openide.util.lookup.ServiceProvider;
import org.openide.util.lookup.ServiceProviders;
import org.sleuthkit.autopsy.casemodule.Case;
+import org.sleuthkit.autopsy.casemodule.CaseMetadata;
import org.sleuthkit.autopsy.core.RuntimeProperties;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.framework.AutopsyService;
@@ -143,14 +144,38 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService {
}
}
+ @NbBundle.Messages({"# {0} - case directory",
+ "SolrSearchService.exceptionMessage.noIndexMetadata=Unable to create IndexMetaData from caseDirectory: {0}",
+ "# {0} - case directory",
+ "SolrSearchService.exceptionMessage.noCurrentSolrCore=IndexMetadata did not contain a current Solr core so could not delete the case"
+ })
/**
* Deletes Solr core for a case.
*
- * @param coreName The core name.
+ * @param metadata The CaseMetadata which will have its core deleted.
*/
@Override
- public void deleteTextIndex(String coreName) throws KeywordSearchServiceException {
- KeywordSearch.getServer().deleteCore(coreName);
+ public void deleteTextIndex(CaseMetadata metadata) throws KeywordSearchServiceException {
+ String caseDirectory = metadata.getCaseDirectory();
+ IndexMetadata indexMetadata;
+ try {
+ indexMetadata = new IndexMetadata(caseDirectory);
+ } catch (IndexMetadata.TextIndexMetadataException ex) {
+ logger.log(Level.WARNING, NbBundle.getMessage(SolrSearchService.class, "SolrSearchService.exceptionMessage.noIndexMetadata", caseDirectory), ex);
+ throw new KeywordSearchServiceException(NbBundle.getMessage(SolrSearchService.class, "SolrSearchService.exceptionMessage.noIndexMetadata", caseDirectory), ex);
+ }
+ //find the index for the current version of solr (the one we are connected to) and delete its core using the index name
+ String currentSchema = IndexFinder.getCurrentSchemaVersion();
+ String currentSolr = IndexFinder.getCurrentSolrVersion();
+ for (Index index : indexMetadata.getIndexes()) {
+ if (index.getSolrVersion().equals(currentSolr) && index.getSchemaVersion().equals(currentSchema)) {
+ KeywordSearch.getServer().deleteCore(index.getIndexName());
+ return; //only one core exists for each combination of solr and schema version
+ }
+ }
+ //this code this code will only execute if an index for the current core was not found
+ logger.log(Level.WARNING, NbBundle.getMessage(SolrSearchService.class, "SolrSearchService.exceptionMessage.noCurrentSolrCore"));
+ throw new KeywordSearchServiceException(NbBundle.getMessage(SolrSearchService.class, "SolrSearchService.exceptionMessage.noCurrentSolrCore"));
}
@Override
@@ -185,7 +210,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService {
ProgressIndicator progress = context.getProgressIndicator();
int totalNumProgressUnits = 8;
int progressUnitsCompleted = 0;
-
+
String caseDirPath = context.getCase().getCaseDirectory();
Case theCase = context.getCase();
List indexes = new ArrayList<>();
@@ -212,7 +237,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService {
indexes.add(oldIndex);
}
}
-
+
if (context.cancelRequested()) {
return;
}
@@ -323,14 +348,13 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService {
}
return;
}
-
+
// add current index to the list of indexes that exist for this case
indexes.add(currentVersionIndex);
}
}
}
-
try {
// update text index metadata file
if (!indexes.isEmpty()) {
@@ -346,7 +370,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService {
KeywordSearch.getServer().openCoreForCase(theCase, currentVersionIndex);
} catch (KeywordSearchModuleException ex) {
throw new AutopsyServiceException(String.format("Failed to open or create core for %s", caseDirPath), ex);
- }
+ }
progress.progress(Bundle.SolrSearch_complete_msg(), totalNumProgressUnits);
}
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermsComponentQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermsComponentQuery.java
index c1149eee87..f4413e3f2a 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermsComponentQuery.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/TermsComponentQuery.java
@@ -306,16 +306,16 @@ final class TermsComponentQuery implements KeywordSearchQuery {
* query.
*/
String escapedTerm = KeywordSearchUtil.escapeLuceneQuery(term.getTerm());
- LuceneQuery termQuery = new LuceneQuery(keywordList, new Keyword(escapedTerm, true));
+ LuceneQuery termQuery = new LuceneQuery(keywordList, new Keyword(escapedTerm, true, true));
filters.forEach(termQuery::addFilter); // This appears to be unused
QueryResults termQueryResult = termQuery.performQuery();
Set termHits = new HashSet<>();
for (Keyword word : termQueryResult.getKeywords()) {
termHits.addAll(termQueryResult.getResults(word));
}
- results.addResult(new Keyword(term.getTerm(), false), new ArrayList<>(termHits));
+ results.addResult(new Keyword(term.getTerm(), false, true, originalKeyword.getListName(), originalKeyword.getOriginalTerm()), new ArrayList<>(termHits));
}
- return results;
+ return results;
}
/**
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/XmlKeywordSearchList.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/XmlKeywordSearchList.java
index a5c25d1dc7..79843e4d64 100644
--- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/XmlKeywordSearchList.java
+++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/XmlKeywordSearchList.java
@@ -201,7 +201,7 @@ final class XmlKeywordSearchList extends KeywordSearchList {
Keyword keyword;
String whole = wordEl.getAttribute(KEYWORD_WHOLE_ATTR);
if (whole.equals("")) {
- keyword = new Keyword(wordEl.getTextContent(), isLiteral);
+ keyword = new Keyword(wordEl.getTextContent(), isLiteral, true);
} else {
boolean isWhole = whole.equals("true");
keyword = new Keyword(wordEl.getTextContent(), isLiteral, isWhole);