From 830aa89e8381539773b316f8d0a8e3c8ec26719b Mon Sep 17 00:00:00 2001 From: dhurd Date: Fri, 31 Aug 2012 11:49:57 -0400 Subject: [PATCH 01/29] Updated XML files to be more centralized and plugin-friendly. --- .../sleuthkit/autopsy/casemodule/layer.xml | 96 ++----------- .../autopsy/corecomponentinterfaces/layer.xml | 80 ++++++++++- .../autopsy/corecomponents/layer.xml | 106 +++++++-------- .../org/sleuthkit/autopsy/coreutils/layer.xml | 14 +- .../sleuthkit/autopsy/directorytree/layer.xml | 80 ++++------- .../sleuthkit/autopsy/filesearch/layer.xml | 63 ++++----- .../sleuthkit/autopsy/hashdatabase/layer.xml | 16 +-- .../org/sleuthkit/autopsy/ingest/layer.xml | 126 ++++++------------ .../sleuthkit/autopsy/keywordsearch/layer.xml | 93 ++++++------- .../sleuthkit/autopsy/menuactions/layer.xml | 115 +++++++--------- .../org/sleuthkit/autopsy/report/layer.xml | 89 +++++++------ 11 files changed, 382 insertions(+), 496 deletions(-) diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml b/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml index 549f7895c8..cfde4e4568 100644 --- a/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml +++ b/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml @@ -1,11 +1,6 @@ - - - - - @@ -72,7 +67,6 @@ - @@ -90,80 +84,42 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -183,50 +139,22 @@ - - + - - - - + - diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml index 5848e15c04..349c659004 100644 --- a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml @@ -1,4 +1,78 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml index babda5c026..46d643d77e 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/layer.xml @@ -1,55 +1,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CoreUtils/src/org/sleuthkit/autopsy/coreutils/layer.xml b/CoreUtils/src/org/sleuthkit/autopsy/coreutils/layer.xml index a11becd877..733111b739 100644 --- a/CoreUtils/src/org/sleuthkit/autopsy/coreutils/layer.xml +++ b/CoreUtils/src/org/sleuthkit/autopsy/coreutils/layer.xml @@ -1,10 +1,4 @@ - - - - - - - - - - + + + + diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml index e8502ec44a..369a671202 100644 --- a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/layer.xml @@ -1,54 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml b/FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml index daabeca52f..c75b11a20c 100644 --- a/FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml +++ b/FileSearch/src/org/sleuthkit/autopsy/filesearch/layer.xml @@ -1,34 +1,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/layer.xml b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/layer.xml index 28e9ac47ff..afeecfece5 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/layer.xml +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/layer.xml @@ -12,31 +12,23 @@ - - - + - + - + - + - - - - - - diff --git a/Ingest/src/org/sleuthkit/autopsy/ingest/layer.xml b/Ingest/src/org/sleuthkit/autopsy/ingest/layer.xml index eae2ad2d6c..bec857b97b 100644 --- a/Ingest/src/org/sleuthkit/autopsy/ingest/layer.xml +++ b/Ingest/src/org/sleuthkit/autopsy/ingest/layer.xml @@ -1,87 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/layer.xml b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/layer.xml index 7ab3ea7134..f967320fa4 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/layer.xml +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/layer.xml @@ -1,51 +1,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml b/MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml index 402308b497..4ca8224545 100644 --- a/MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml +++ b/MenuActions/src/org/sleuthkit/autopsy/menuactions/layer.xml @@ -1,65 +1,50 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Report/src/org/sleuthkit/autopsy/report/layer.xml b/Report/src/org/sleuthkit/autopsy/report/layer.xml index 1eda75af0e..d05ae22670 100644 --- a/Report/src/org/sleuthkit/autopsy/report/layer.xml +++ b/Report/src/org/sleuthkit/autopsy/report/layer.xml @@ -1,41 +1,48 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 04cba235e22df796f2c5d0f60c6d377f76bc46aa Mon Sep 17 00:00:00 2001 From: dhurd Date: Thu, 6 Sep 2012 12:51:44 -0400 Subject: [PATCH 02/29] Updated ExifParser logging. --- .../autopsy/exifparser/ExifParserFileIngestModule.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ExifParser/src/org/sleuthkit/autopsy/exifparser/ExifParserFileIngestModule.java b/ExifParser/src/org/sleuthkit/autopsy/exifparser/ExifParserFileIngestModule.java index 5194f343ee..4b20415191 100644 --- a/ExifParser/src/org/sleuthkit/autopsy/exifparser/ExifParserFileIngestModule.java +++ b/ExifParser/src/org/sleuthkit/autopsy/exifparser/ExifParserFileIngestModule.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.exifparser; import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; +import com.drew.imaging.jpeg.JpegProcessingException; import com.drew.metadata.Metadata; import com.drew.metadata.exif.ExifIFD0Directory; import com.drew.metadata.exif.ExifSubIFDDirectory; @@ -152,7 +153,7 @@ public final class ExifParserFileIngestModule implements IngestModuleAbstractFil } catch (TskCoreException ex) { Logger.getLogger(ExifParserFileIngestModule.class.getName()).log(Level.SEVERE, null, ex); } catch (ImageProcessingException ex) { - logger.log(Level.WARNING, "Failed to process the image.", ex); + logger.log(Level.WARNING, "Failed to process the image."); } catch (IOException ex) { logger.log(Level.WARNING, "IOException when parsing image file.", ex); } finally { From 90ee40f294450a77a3f40382fe5d831347f43fb6 Mon Sep 17 00:00:00 2001 From: dhurd Date: Thu, 6 Sep 2012 12:57:53 -0400 Subject: [PATCH 03/29] Added HashDb panel to the Options panel and updated XML. --- .../autopsy/casemodule/Bundle.properties | 4 +- .../sleuthkit/autopsy/casemodule/layer.xml | 14 +- .../autopsy/corecomponentinterfaces/layer.xml | 160 +-- .../autopsy/directorytree/Bundle.properties | 2 +- HashDatabase/nbproject/project.xml | 9 + .../autopsy/hashdatabase/Bundle.properties | 25 + .../HashDatabaseOptionsPanelController.java | 88 ++ .../hashdatabase/HashDatabasePanel.form | 387 ++++++ .../hashdatabase/HashDatabasePanel.java | 589 +++++++++ .../hashdatabase/HashDbIngestModule.java | 6 +- .../hashdatabase/HashDbManagementPanel.form | 14 +- .../hashdatabase/HashDbManagementPanel.java | 1140 ++++++++--------- .../autopsy/hashdatabase/delete_icon.png | Bin 0 -> 3657 bytes .../sleuthkit/autopsy/hashdatabase/delte.png | Bin 0 -> 1279 bytes .../sleuthkit/autopsy/hashdatabase/import.png | Bin 0 -> 1070 bytes .../autopsy/hashdatabase/import_icon.png | Bin 0 -> 2076 bytes .../autopsy/hashdatabase/large_delete.png | Bin 0 -> 4096 bytes .../autopsy/hashdatabase/large_import.png | Bin 0 -> 3514 bytes .../autopsy/hashdatabase/options_icon.png | Bin 0 -> 4354 bytes .../autopsy/menuactions/Bundle.properties | 4 +- .../sleuthkit/autopsy/menuactions/layer.xml | 4 +- 21 files changed, 1777 insertions(+), 669 deletions(-) create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete_icon.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delte.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import_icon.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/large_delete.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/large_import.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/options_icon.png diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties b/Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties index 1701014740..3c93f2d682 100755 --- a/Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties +++ b/Case/src/org/sleuthkit/autopsy/casemodule/Bundle.properties @@ -3,10 +3,10 @@ CTL_AddImageButton=Add Image CTL_CaseAction=Case CTL_CaseCloseAct=Close Case CTL_CaseNewAction=New Case... -CTL_CaseOpenActionOld=Open Case(old)... +#CTL_CaseOpenActionOld=Open Case(old)... CTL_CasePropertiesAction=Case Properties... CTL_CaseTopComponent=Case Window -CTL_NewCaseAct=New Case(Old)... +#CTL_NewCaseAct=New Case(Old)... CTL_OpenAction=Open Case... CTL_RecentCases=Recent Cases CTL_CaseDeleteAction=Delete Case diff --git a/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml b/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml index cfde4e4568..e3af281221 100644 --- a/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml +++ b/Case/src/org/sleuthkit/autopsy/casemodule/layer.xml @@ -14,15 +14,15 @@ - + - + @@ -50,7 +50,7 @@ - + @@ -62,7 +62,7 @@ - + diff --git a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml index 349c659004..8e6ac9696e 100644 --- a/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml +++ b/CoreComponentInterfaces/src/org/sleuthkit/autopsy/corecomponentinterfaces/layer.xml @@ -1,78 +1,84 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties index de02dec972..12abeb5237 100644 --- a/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties +++ b/DirectoryTree/src/org/sleuthkit/autopsy/directorytree/Bundle.properties @@ -1,7 +1,7 @@ CTL_DirectoryTreeAction=DirectoryTree CTL_DirectoryTreeExplorerAction=DirectoryTreeExplorer CTL_DirectoryTreeTopComponent=Directory Tree -CTL_FileBrowserAction=FileBrowser (new) +#CTL_FileBrowserAction=FileBrowser (new) HINT_DirectoryTreeTopComponent=This is a DirectoryTree window OpenIDE-Module-Name=DirectoryTree FileSystemDetailsPanel.imgOffsetLabel.text=Image Offset: diff --git a/HashDatabase/nbproject/project.xml b/HashDatabase/nbproject/project.xml index d5b6fbd052..368833af6f 100644 --- a/HashDatabase/nbproject/project.xml +++ b/HashDatabase/nbproject/project.xml @@ -15,6 +15,15 @@ 1.24.1 + + org.netbeans.modules.options.api + + + + 1 + 1.26.1 + + org.openide.awt diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties index 65bb2d8c31..4e520a97cd 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties @@ -56,3 +56,28 @@ HashDbSearchPanel.cancelButton.text=Cancel HashDbSimplePanel.calcHashesButton.text=Calculate hashes even if no hash database is selected HashDbSimplePanel.nsrlDbLabel.text=NSRL Database: HashDbSimplePanel.nsrlDbLabelVal.text=- +HashDatabasePanel.jPanel2.border.title=Databases +HashDatabasePanel.jTable1.columnModel.title3=Title 4 +HashDatabasePanel.jTable1.columnModel.title2=Title 3 +HashDatabasePanel.jTable1.columnModel.title1=Title 2 +HashDatabasePanel.jTable1.columnModel.title0=Title 1 +HashDatabasePanel.jPanel3.border.title=Information +HashDatabasePanel.jLabel2.text=Name: +HashDatabasePanel.jLabel4.text=Location: +HashDatabasePanel.jLabel6.text=Type: +HashDatabasePanel.jPanel4.border.title=Options +HashDatabasePanel.jButton3.text=Import Database +HashDatabasePanel.importButton.text=Import Database +HashDatabasePanel.deleteButton.text=Delete Database +HashDatabasePanel.indexButton.text=Index +HashDatabasePanel.nameLabel.text=Name: +HashDatabasePanel.locationLabel.text=Location: +HashDatabasePanel.typeLabel.text=Type: +HashDatabasePanel.indexLabel.text=Index Status: +HashDatabasePanel.hashDbIndexStatusLabel.text=No database selected +HashDatabasePanel.hashDbNameLabel.text=No database selected +HashDatabasePanel.hashDbLocationLabel.text=No database selected +HashDatabasePanel.hashDbTypeLabel.text=No database selected +HashDatabasePanel.useForIngestCheckbox.text=Use during ingest +HashDatabasePanel.showInboxMessagesCheckBox.text=Send messages to inbox during ingest +HashDatabasePanel.ingestRunningLabel.text= diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java new file mode 100644 index 0000000000..3755f64399 --- /dev/null +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java @@ -0,0 +1,88 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import javax.swing.JComponent; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; + +@OptionsPanelController.TopLevelRegistration( + categoryName = "#OptionsCategory_Name_HashDatabase", +iconBase = "org/sleuthkit/autopsy/hashdatabase/options_icon.png", +keywords = "#OptionsCategory_Keywords_HashDatabase", +keywordsCategory = "HashDatabase", +id = "HashDatabase") +@org.openide.util.NbBundle.Messages({"OptionsCategory_Name_HashDatabase=Hash Database", "OptionsCategory_Keywords_HashDatabase=Hash Database"}) +public final class HashDatabaseOptionsPanelController extends OptionsPanelController { + + private HashDatabasePanel panel; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private boolean changed; + + @Override + public void update() { + getPanel().load(); + changed = false; + } + + @Override + public void applyChanges() { + getPanel().store(); + changed = false; + } + + @Override + public void cancel() { + // need not do anything special, if no changes have been persisted yet + } + + @Override + public boolean isValid() { + return getPanel().valid(); + } + + @Override + public boolean isChanged() { + return changed; + } + + @Override + public HelpCtx getHelpCtx() { + return null; // new HelpCtx("...ID") if you have a help set + } + + @Override + public JComponent getComponent(Lookup masterLookup) { + return getPanel(); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + + private HashDatabasePanel getPanel() { + if (panel == null) { + panel = new HashDatabasePanel(this); + } + return panel; + } + + void changed() { + if (!changed) { + changed = true; + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); + } + pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); + } +} diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form new file mode 100644 index 0000000000..9562946d3b --- /dev/null +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form @@ -0,0 +1,387 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java new file mode 100644 index 0000000000..923e5543d6 --- /dev/null +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java @@ -0,0 +1,589 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.awt.event.KeyEvent; +import java.io.File; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.AbstractTableModel; +import org.sleuthkit.datamodel.TskException; + +final class HashDatabasePanel extends javax.swing.JPanel { + + private final HashDatabaseOptionsPanelController controller; + private HashSetTableModel hashSetTableModel; + private static final Logger logger = Logger.getLogger(HashDatabasePanel.class.getName()); + private static boolean ingestRunning = false; + + HashDatabasePanel(HashDatabaseOptionsPanelController controller) { + this.controller = controller; + this.hashSetTableModel = new HashSetTableModel(); + initComponents(); + customizeComponents(); + // TODO listen to changes in form fields and call controller.changed() + } + + private void customizeComponents() { + this.hashSetTable.setModel(hashSetTableModel); + this.hashSetTable.setTableHeader(null); + hashSetTable.getParent().setBackground(hashSetTable.getBackground()); + hashSetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + hashSetTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + + @Override + public void valueChanged(ListSelectionEvent e) { + ListSelectionModel listSelectionModel = (ListSelectionModel) e.getSource(); + if (!listSelectionModel.isSelectionEmpty()) { + int index = listSelectionModel.getMinSelectionIndex(); + listSelectionModel.setSelectionInterval(index, index); + HashDbXML loader = HashDbXML.getCurrent(); + HashDb current = loader.getAllSets().get(index); + initUI(current); + } else { + initUI(null); + } + } + }); + } + + private void initUI(HashDb db) { + boolean useForIngestEnabled = db != null && !ingestRunning; + boolean useForIngestSelected = db != null && db.getUseForIngest(); + boolean showInboxMessagesEnabled = db != null && !ingestRunning && useForIngestSelected && db.getDbType().equals(HashDb.DBType.KNOWN_BAD); + boolean showInboxMessagesSelected = db != null && db.getShowInboxMessages(); + boolean deleteButtonEnabled = db != null && !ingestRunning; + boolean importButtonEnabled = !ingestRunning; + if (db == null) { + setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, IndexStatus.NONE); + this.hashDbLocationLabel.setText("No database selected"); + this.hashDbNameLabel.setText("No database selected"); + this.hashDbIndexStatusLabel.setText("No database selected"); + this.hashDbTypeLabel.setText("No database selected"); + } else { + setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, db.status()); + String shortenPath = db.getDatabasePaths().get(0); + this.hashDbLocationLabel.setToolTipText(shortenPath); + if(shortenPath.length() > 50){ + shortenPath = shortenPath.substring(0, 10 + shortenPath.substring(10).indexOf(File.separator) + 1) + "..." + + shortenPath.substring((shortenPath.length() - 20) + shortenPath.substring(shortenPath.length() - 20).indexOf(File.separator)); + } + this.hashDbLocationLabel.setText(shortenPath); + this.hashDbNameLabel.setText(db.getName()); + this.hashDbTypeLabel.setText(db.getDbType().getDisplayName()); + } + this.useForIngestCheckbox.setSelected(useForIngestSelected); + this.useForIngestCheckbox.setEnabled(useForIngestEnabled); + this.showInboxMessagesCheckBox.setSelected(showInboxMessagesSelected); + this.showInboxMessagesCheckBox.setEnabled(showInboxMessagesEnabled); + this.deleteButton.setEnabled(deleteButtonEnabled); + this.importButton.setEnabled(importButtonEnabled); + } + + /** + * Don't allow any changes if ingest is running + */ + void setIngestRunning(boolean running) { + ingestRunning = running; + if(running) { + ingestRunningLabel.setText("Ingest is ongoing; some settings will be unavailable until it finishes."); + } else { + ingestRunningLabel.setText(""); + } + + int selection = getSelection(); + if(selection != -1) { + initUI(HashDbXML.getCurrent().getAllSets().get(selection)); + } + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + jLabel2 = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + jLabel6 = new javax.swing.JLabel(); + jButton3 = new javax.swing.JButton(); + jPanel2 = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + hashSetTable = new javax.swing.JTable(); + deleteButton = new javax.swing.JButton(); + importButton = new javax.swing.JButton(); + jPanel3 = new javax.swing.JPanel(); + nameLabel = new javax.swing.JLabel(); + locationLabel = new javax.swing.JLabel(); + typeLabel = new javax.swing.JLabel(); + indexLabel = new javax.swing.JLabel(); + hashDbNameLabel = new javax.swing.JLabel(); + hashDbLocationLabel = new javax.swing.JLabel(); + hashDbTypeLabel = new javax.swing.JLabel(); + hashDbIndexStatusLabel = new javax.swing.JLabel(); + indexButton = new javax.swing.JButton(); + jPanel4 = new javax.swing.JPanel(); + useForIngestCheckbox = new javax.swing.JCheckBox(); + showInboxMessagesCheckBox = new javax.swing.JCheckBox(); + ingestRunningLabel = new javax.swing.JLabel(); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel2.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel4.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel6.text")); // NOI18N + + jButton3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jButton3, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jButton3.text")); // NOI18N + + jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jPanel2.border.title"))); // NOI18N + + hashSetTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + + } + )); + hashSetTable.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyPressed(java.awt.event.KeyEvent evt) { + hashSetTableKeyPressed(evt); + } + }); + jScrollPane1.setViewportView(hashSetTable); + + deleteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/delte.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(deleteButton, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.deleteButton.text")); // NOI18N + deleteButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + deleteButtonActionPerformed(evt); + } + }); + + importButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/import.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(importButton, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.importButton.text")); // NOI18N + importButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + importButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() + .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() + .addComponent(jScrollPane1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(importButton) + .addComponent(deleteButton)) + .addContainerGap()) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jPanel3.border.title"))); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(nameLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.nameLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(locationLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.locationLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(typeLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.typeLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(indexLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.indexLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(hashDbNameLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbNameLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(hashDbLocationLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbLocationLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(hashDbTypeLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbTypeLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(hashDbIndexStatusLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbIndexStatusLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(indexButton, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.indexButton.text")); // NOI18N + indexButton.setEnabled(false); + indexButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + indexButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(indexButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(nameLabel, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(locationLabel, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(typeLabel, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(indexLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(18, 18, 18) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(hashDbTypeLabel) + .addComponent(hashDbLocationLabel) + .addComponent(hashDbNameLabel) + .addComponent(hashDbIndexStatusLabel)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameLabel) + .addComponent(hashDbNameLabel)) + .addGap(5, 5, 5) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(locationLabel) + .addComponent(hashDbLocationLabel)) + .addGap(5, 5, 5) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(typeLabel) + .addComponent(hashDbTypeLabel)) + .addGap(5, 5, 5) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(indexLabel) + .addComponent(hashDbIndexStatusLabel)) + .addGap(5, 5, 5) + .addComponent(indexButton) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jPanel4.border.title"))); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(useForIngestCheckbox, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.useForIngestCheckbox.text")); // NOI18N + useForIngestCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + useForIngestCheckboxActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(showInboxMessagesCheckBox, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.showInboxMessagesCheckBox.text")); // NOI18N + showInboxMessagesCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + showInboxMessagesCheckBoxActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel4Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(useForIngestCheckbox) + .addComponent(showInboxMessagesCheckBox)) + .addContainerGap(135, Short.MAX_VALUE)) + ); + jPanel4Layout.setVerticalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel4Layout.createSequentialGroup() + .addComponent(useForIngestCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(showInboxMessagesCheckBox) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + ingestRunningLabel.setForeground(new java.awt.Color(255, 0, 0)); + org.openide.awt.Mnemonics.setLocalizedText(ingestRunningLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.ingestRunningLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(ingestRunningLabel) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(ingestRunningLabel) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void indexButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_indexButtonActionPerformed + int selected = getSelection(); + HashDb current = HashDbXML.getCurrent().getAllSets().get(selected); + try { + current.createIndex(); + } catch (TskException ex) { + logger.log(Level.WARNING, "Error creating index", ex); + } + setButtonFromIndexStatus(indexButton, this.hashDbIndexStatusLabel, current.status()); + }//GEN-LAST:event_indexButtonActionPerformed + + private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDbXML.getCurrent().removeNSRLSet(); + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected - 1); + } + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected); + } + hashSetTableModel.resync(); + }//GEN-LAST:event_deleteButtonActionPerformed + + private void hashSetTableKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_hashSetTableKeyPressed + if (evt.getKeyCode() == KeyEvent.VK_DELETE) { + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDbXML.getCurrent().removeNSRLSet(); + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected - 1); + } + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected); + } + } + hashSetTableModel.resync(); + }//GEN-LAST:event_hashSetTableKeyPressed + + private void useForIngestCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useForIngestCheckboxActionPerformed + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDb current = HashDbXML.getCurrent().getNSRLSet(); + current.setUseForIngest(useForIngestCheckbox.isSelected()); + HashDbXML.getCurrent().setNSRLSet(current); + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected - 1); + current.setUseForIngest(useForIngestCheckbox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected - 1, current); + this.showInboxMessagesCheckBox.setEnabled(useForIngestCheckbox.isSelected()); + } + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected); + current.setUseForIngest(useForIngestCheckbox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected, current); + this.showInboxMessagesCheckBox.setEnabled(useForIngestCheckbox.isSelected()); + } + }//GEN-LAST:event_useForIngestCheckboxActionPerformed + + private void showInboxMessagesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showInboxMessagesCheckBoxActionPerformed + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDb current = HashDbXML.getCurrent().getNSRLSet(); + current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); + HashDbXML.getCurrent().setNSRLSet(current); + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected - 1); + current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected - 1, current); + } + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected); + current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected, current); + } + }//GEN-LAST:event_showInboxMessagesCheckBoxActionPerformed + + private void importButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importButtonActionPerformed + importHashSet(evt); + }//GEN-LAST:event_importButtonActionPerformed + + void load() { + // TODO read settings and initialize GUI + // Example: + // someCheckBox.setSelected(Preferences.userNodeForPackage(HashDatabasePanel.class).getBoolean("someFlag", false)); + // or for org.openide.util with API spec. version >= 7.4: + // someCheckBox.setSelected(NbPreferences.forModule(HashDatabasePanel.class).getBoolean("someFlag", false)); + // or: + // someTextField.setText(SomeSystemOption.getDefault().getSomeStringProperty()); + } + + void store() { + // TODO store modified settings + // Example: + // Preferences.userNodeForPackage(HashDatabasePanel.class).putBoolean("someFlag", someCheckBox.isSelected()); + // or for org.openide.util with API spec. version >= 7.4: + // NbPreferences.forModule(HashDatabasePanel.class).putBoolean("someFlag", someCheckBox.isSelected()); + // or: + // SomeSystemOption.getDefault().setSomeStringProperty(someTextField.getText()); + } + + boolean valid() { + // TODO check whether form is consistent and complete + return true; + } + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton deleteButton; + private javax.swing.JLabel hashDbIndexStatusLabel; + private javax.swing.JLabel hashDbLocationLabel; + private javax.swing.JLabel hashDbNameLabel; + private javax.swing.JLabel hashDbTypeLabel; + private javax.swing.JTable hashSetTable; + private javax.swing.JButton importButton; + private javax.swing.JButton indexButton; + private javax.swing.JLabel indexLabel; + private javax.swing.JLabel ingestRunningLabel; + private javax.swing.JButton jButton3; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel6; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel3; + private javax.swing.JPanel jPanel4; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JLabel locationLabel; + private javax.swing.JLabel nameLabel; + private javax.swing.JCheckBox showInboxMessagesCheckBox; + private javax.swing.JLabel typeLabel; + private javax.swing.JCheckBox useForIngestCheckbox; + // End of variables declaration//GEN-END:variables + private void importHashSet(java.awt.event.ActionEvent evt) { + new HashDbAddDatabaseDialog().display(); + hashSetTableModel.resync(); + /*int size = 0; + if(!nsrl) { + size = HashDbXML.getCurrent().getKnownBadSets().size(); + } + setSelection(size);*/ + } + + private class HashSetTableModel extends AbstractTableModel { + + private HashDbXML xmlHandle = HashDbXML.getCurrent(); + + @Override + public int getColumnCount() { + return 1; + } + + @Override + public int getRowCount() { + return xmlHandle.getAllSets().size(); + } + + @Override + public String getColumnName(int column) { + return "Name"; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if (xmlHandle.getNSRLSet() != null) { + if(rowIndex == 0) { + return xmlHandle.getNSRLSet().getName() + " (NSRL)"; + } else { + return xmlHandle.getKnownBadSets().get(rowIndex-1).getName(); + } + } else { + return xmlHandle.getKnownBadSets().get(rowIndex).getName(); + } + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + throw new UnsupportedOperationException("Editing of cells is not supported"); + } + + @Override + public Class getColumnClass(int c) { + return getValueAt(0, c).getClass(); + } + + void resync() { + fireTableDataChanged(); + } + } + + static void setButtonFromIndexStatus(JButton theButton, JLabel theLabel, IndexStatus status) { + theLabel.setText(status.message()); + switch (status) { + case INDEX_OUTDATED: + theButton.setText("Re-index"); + theButton.setEnabled(true); + break; + case INDEX_CURRENT: + theButton.setText("Re-index"); + theButton.setEnabled(true); + break; + case NO_INDEX: + theButton.setText("Index"); + theButton.setEnabled(true); + break; + case INDEXING: + theButton.setText("Indexing"); + theButton.setEnabled(false); + break; + default: + theButton.setText("Index"); + theButton.setEnabled(false); + } + if (ingestRunning) { + theButton.setEnabled(false); + } + } + + private int getSelection() { + return hashSetTable.getSelectionModel().getMinSelectionIndex(); + } + + private void setSelection(int index) { + if(index >= 0 && index < hashSetTable.getRowCount()) { + hashSetTable.getSelectionModel().setSelectionInterval(index, index); + } + } + void resync() { + int index = getSelection(); + this.hashSetTableModel.resync(); + setSelection(index); + } +} diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java index b8869af026..0e52f354ba 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java @@ -24,6 +24,8 @@ import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import org.netbeans.api.options.OptionsDisplayer; +import org.netbeans.spi.options.OptionsPanelController; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.autopsy.ingest.IngestMessage; @@ -226,7 +228,9 @@ public class HashDbIngestModule implements IngestModuleAbstractFile { @Override public javax.swing.JPanel getAdvancedConfiguration() { - return HashDbManagementPanel.getDefault(); + OptionsDisplayer.getDefault().open("HashDatabase"); + return null; + //return HashDbManagementPanel.getDefault(); } @Override diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.form b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.form index c9ee4dc675..7dd71b7da7 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.form +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.form @@ -199,6 +199,13 @@ + + + + + + + @@ -267,13 +274,6 @@ - - - - - - - diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java index 96af55fb92..24ee612c38 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbManagementPanel.java @@ -1,570 +1,570 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * HashDbManagementPanel.java - * - * Created on Jun 18, 2012, 12:13:03 PM - */ -package org.sleuthkit.autopsy.hashdatabase; - -import java.awt.event.KeyEvent; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.JButton; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JTextField; -import javax.swing.ListSelectionModel; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.AbstractTableModel; -import org.sleuthkit.autopsy.hashdatabase.HashDb.DBType; -import org.sleuthkit.datamodel.SleuthkitJNI; -import org.sleuthkit.datamodel.TskException; - -/** - * - * @author dfickling - */ -public class HashDbManagementPanel extends javax.swing.JPanel { - - private HashSetTableModel hashSetTableModel; - private static final Logger logger = Logger.getLogger(HashDbManagementPanel.class.getName()); - private static HashDbManagementPanel instance; - private static boolean ingestRunning = false; - - public static HashDbManagementPanel getDefault() { - if (instance == null) { - instance = new HashDbManagementPanel(); - } - return instance; - } - - /** Creates new form HashDbManagementPanel */ - private HashDbManagementPanel() { - setName(HashDbMgmtAction.ACTION_NAME); - this.hashSetTableModel = new HashSetTableModel(); - initComponents(); - customizeComponents(); - } - - private void customizeComponents() { - this.hashSetTable.setModel(hashSetTableModel); - this.hashSetTable.setTableHeader(null); - hashSetTable.getParent().setBackground(hashSetTable.getBackground()); - hashSetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - hashSetTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - - @Override - public void valueChanged(ListSelectionEvent e) { - ListSelectionModel listSelectionModel = (ListSelectionModel) e.getSource(); - if (!listSelectionModel.isSelectionEmpty()) { - int index = listSelectionModel.getMinSelectionIndex(); - listSelectionModel.setSelectionInterval(index, index); - HashDbXML loader = HashDbXML.getCurrent(); - HashDb current = loader.getAllSets().get(index); - initUI(current); - } else { - initUI(null); - } - } - }); - } - - private void initUI(HashDb db) { - boolean useForIngestEnabled = db != null && !ingestRunning; - boolean useForIngestSelected = db != null && db.getUseForIngest(); - boolean showInboxMessagesEnabled = db != null && !ingestRunning && useForIngestSelected && db.getDbType().equals(DBType.KNOWN_BAD); - boolean showInboxMessagesSelected = db != null && db.getShowInboxMessages(); - boolean deleteButtonEnabled = db != null && !ingestRunning; - boolean importButtonEnabled = !ingestRunning; - if (db == null) { - setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, IndexStatus.NONE); - this.hashDbLocationLabel.setText("No database selected"); - this.hashDbNameLabel.setText("No database selected"); - this.hashDbIndexStatusLabel.setText("No database selected"); - this.hashDbTypeLabel.setText("No database selected"); - } else { - setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, db.status()); - String shortenPath = db.getDatabasePaths().get(0); - this.hashDbLocationLabel.setToolTipText(shortenPath); - if(shortenPath.length() > 50){ - shortenPath = shortenPath.substring(0, 10 + shortenPath.substring(10).indexOf(File.separator) + 1) + "..." + - shortenPath.substring((shortenPath.length() - 20) + shortenPath.substring(shortenPath.length() - 20).indexOf(File.separator)); - } - this.hashDbLocationLabel.setText(shortenPath); - this.hashDbNameLabel.setText(db.getName()); - this.hashDbTypeLabel.setText(db.getDbType().getDisplayName()); - } - this.useForIngestCheckbox.setSelected(useForIngestSelected); - this.useForIngestCheckbox.setEnabled(useForIngestEnabled); - this.showInboxMessagesCheckBox.setSelected(showInboxMessagesSelected); - this.showInboxMessagesCheckBox.setEnabled(showInboxMessagesEnabled); - this.deleteButton.setEnabled(deleteButtonEnabled); - this.importButton.setEnabled(importButtonEnabled); - } - - /** - * Don't allow any changes if ingest is running - */ - void setIngestRunning(boolean running) { - ingestRunning = running; - if(running) { - ingestRunningLabel.setText("Ingest is ongoing; some settings will be unavailable until it finishes."); - } else { - ingestRunningLabel.setText(""); - } - - int selection = getSelection(); - if(selection != -1) { - initUI(HashDbXML.getCurrent().getAllSets().get(selection)); - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - jSplitPane1 = new javax.swing.JSplitPane(); - leftPanel = new javax.swing.JPanel(); - jScrollPane1 = new javax.swing.JScrollPane(); - hashSetTable = new javax.swing.JTable(); - importButton = new javax.swing.JButton(); - rightPanel = new javax.swing.JPanel(); - nameLabel = new javax.swing.JLabel(); - hashDbNameLabel = new javax.swing.JLabel(); - locationLabel = new javax.swing.JLabel(); - hashDbLocationLabel = new javax.swing.JLabel(); - useForIngestCheckbox = new javax.swing.JCheckBox(); - showInboxMessagesCheckBox = new javax.swing.JCheckBox(); - indexLabel = new javax.swing.JLabel(); - indexButton = new javax.swing.JButton(); - ingestRunningLabel = new javax.swing.JLabel(); - hashDbIndexStatusLabel = new javax.swing.JLabel(); - typeLabel = new javax.swing.JLabel(); - hashDbTypeLabel = new javax.swing.JLabel(); - deleteButton = new javax.swing.JButton(); - - jScrollPane1.setBackground(new java.awt.Color(255, 255, 255)); - - hashSetTable.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { - - }, - new String [] { - - } - )); - hashSetTable.setShowHorizontalLines(false); - hashSetTable.setShowVerticalLines(false); - hashSetTable.addKeyListener(new java.awt.event.KeyAdapter() { - public void keyPressed(java.awt.event.KeyEvent evt) { - hashSetTableKeyPressed(evt); - } - }); - jScrollPane1.setViewportView(hashSetTable); - - importButton.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.importButton.text")); // NOI18N - importButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - importButtonActionPerformed(evt); - } - }); - - javax.swing.GroupLayout leftPanelLayout = new javax.swing.GroupLayout(leftPanel); - leftPanel.setLayout(leftPanelLayout); - leftPanelLayout.setHorizontalGroup( - leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, leftPanelLayout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(importButton) - .addGap(55, 55, 55)) - ); - leftPanelLayout.setVerticalGroup( - leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, leftPanelLayout.createSequentialGroup() - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 313, Short.MAX_VALUE) - .addGap(0, 0, 0) - .addComponent(importButton)) - ); - - jSplitPane1.setLeftComponent(leftPanel); - - nameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.nameLabel.text")); // NOI18N - - hashDbNameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbNameLabel.text")); // NOI18N - - locationLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.locationLabel.text")); // NOI18N - - hashDbLocationLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbLocationLabel.text")); // NOI18N - - useForIngestCheckbox.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.useForIngestCheckbox.text")); // NOI18N - useForIngestCheckbox.setEnabled(false); - useForIngestCheckbox.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - useForIngestCheckboxActionPerformed(evt); - } - }); - - showInboxMessagesCheckBox.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.showInboxMessagesCheckBox.text")); // NOI18N - showInboxMessagesCheckBox.setEnabled(false); - showInboxMessagesCheckBox.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - showInboxMessagesCheckBoxActionPerformed(evt); - } - }); - - indexLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.indexLabel.text")); // NOI18N - - indexButton.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.indexButton.text")); // NOI18N - indexButton.setEnabled(false); - indexButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - indexButtonActionPerformed(evt); - } - }); - - ingestRunningLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.ingestRunningLabel.text")); // NOI18N - - hashDbIndexStatusLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbIndexStatusLabel.text")); // NOI18N - - typeLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.typeLabel.text")); // NOI18N - - hashDbTypeLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbTypeLabel.text")); // NOI18N - - deleteButton.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.deleteButton.text")); // NOI18N - deleteButton.setEnabled(false); - deleteButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - deleteButtonActionPerformed(evt); - } - }); - - javax.swing.GroupLayout rightPanelLayout = new javax.swing.GroupLayout(rightPanel); - rightPanel.setLayout(rightPanelLayout); - rightPanelLayout.setHorizontalGroup( - rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rightPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(rightPanelLayout.createSequentialGroup() - .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rightPanelLayout.createSequentialGroup() - .addComponent(nameLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(hashDbNameLabel)) - .addGroup(rightPanelLayout.createSequentialGroup() - .addComponent(locationLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(hashDbLocationLabel)) - .addGroup(rightPanelLayout.createSequentialGroup() - .addComponent(ingestRunningLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(useForIngestCheckbox)) - .addGroup(rightPanelLayout.createSequentialGroup() - .addComponent(typeLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(hashDbTypeLabel)) - .addGroup(rightPanelLayout.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(indexButton)) - .addGroup(rightPanelLayout.createSequentialGroup() - .addComponent(indexLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(hashDbIndexStatusLabel))) - .addGap(0, 0, Short.MAX_VALUE)) - .addGroup(rightPanelLayout.createSequentialGroup() - .addComponent(showInboxMessagesCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE) - .addComponent(deleteButton))) - .addContainerGap()) - ); - rightPanelLayout.setVerticalGroup( - rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rightPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(nameLabel) - .addComponent(hashDbNameLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(locationLabel) - .addComponent(hashDbLocationLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(typeLabel) - .addComponent(hashDbTypeLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(indexLabel) - .addComponent(hashDbIndexStatusLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(indexButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 138, Short.MAX_VALUE) - .addComponent(ingestRunningLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE) - .addComponent(useForIngestCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(deleteButton) - .addComponent(showInboxMessagesCheckBox))) - ); - - jSplitPane1.setRightComponent(rightPanel); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSplitPane1) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSplitPane1) - ); - }// //GEN-END:initComponents - - private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed - int selected = getSelection(); - HashDbXML xmlHandle = HashDbXML.getCurrent(); - if (xmlHandle.getNSRLSet() != null) { - if (selected == 0) { - HashDbXML.getCurrent().removeNSRLSet(); - } else { - HashDbXML.getCurrent().removeKnownBadSetAt(selected - 1); - } - } else { - HashDbXML.getCurrent().removeKnownBadSetAt(selected); - } - hashSetTableModel.resync(); - }//GEN-LAST:event_deleteButtonActionPerformed - - private void hashSetTableKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_hashSetTableKeyPressed - if (evt.getKeyCode() == KeyEvent.VK_DELETE) { - int selected = getSelection(); - HashDbXML xmlHandle = HashDbXML.getCurrent(); - if (xmlHandle.getNSRLSet() != null) { - if (selected == 0) { - HashDbXML.getCurrent().removeNSRLSet(); - } else { - HashDbXML.getCurrent().removeKnownBadSetAt(selected - 1); - } - } else { - HashDbXML.getCurrent().removeKnownBadSetAt(selected); - } - } - hashSetTableModel.resync(); - }//GEN-LAST:event_hashSetTableKeyPressed - - private void useForIngestCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useForIngestCheckboxActionPerformed - int selected = getSelection(); - HashDbXML xmlHandle = HashDbXML.getCurrent(); - if (xmlHandle.getNSRLSet() != null) { - if (selected == 0) { - HashDb current = HashDbXML.getCurrent().getNSRLSet(); - current.setUseForIngest(useForIngestCheckbox.isSelected()); - HashDbXML.getCurrent().setNSRLSet(current); - } else { - HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected - 1); - current.setUseForIngest(useForIngestCheckbox.isSelected()); - HashDbXML.getCurrent().addKnownBadSet(selected - 1, current); - this.showInboxMessagesCheckBox.setEnabled(useForIngestCheckbox.isSelected()); - } - } else { - HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected); - current.setUseForIngest(useForIngestCheckbox.isSelected()); - HashDbXML.getCurrent().addKnownBadSet(selected, current); - this.showInboxMessagesCheckBox.setEnabled(useForIngestCheckbox.isSelected()); - } - }//GEN-LAST:event_useForIngestCheckboxActionPerformed - - private void showInboxMessagesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showInboxMessagesCheckBoxActionPerformed - int selected = getSelection(); - HashDbXML xmlHandle = HashDbXML.getCurrent(); - if (xmlHandle.getNSRLSet() != null) { - if (selected == 0) { - HashDb current = HashDbXML.getCurrent().getNSRLSet(); - current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); - HashDbXML.getCurrent().setNSRLSet(current); - } else { - HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected - 1); - current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); - HashDbXML.getCurrent().addKnownBadSet(selected - 1, current); - } - } else { - HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected); - current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); - HashDbXML.getCurrent().addKnownBadSet(selected, current); - } - }//GEN-LAST:event_showInboxMessagesCheckBoxActionPerformed - - private void indexButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_indexButtonActionPerformed - int selected = getSelection(); - HashDb current = HashDbXML.getCurrent().getAllSets().get(selected); - try { - current.createIndex(); - } catch (TskException ex) { - logger.log(Level.WARNING, "Error creating index", ex); - } - setButtonFromIndexStatus(indexButton, this.hashDbIndexStatusLabel, current.status()); - }//GEN-LAST:event_indexButtonActionPerformed - - private void importButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importButtonActionPerformed - importHashSet(evt); - }//GEN-LAST:event_importButtonActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton deleteButton; - private javax.swing.JLabel hashDbIndexStatusLabel; - private javax.swing.JLabel hashDbLocationLabel; - private javax.swing.JLabel hashDbNameLabel; - private javax.swing.JLabel hashDbTypeLabel; - private javax.swing.JTable hashSetTable; - private javax.swing.JButton importButton; - private javax.swing.JButton indexButton; - private javax.swing.JLabel indexLabel; - private javax.swing.JLabel ingestRunningLabel; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JSplitPane jSplitPane1; - private javax.swing.JPanel leftPanel; - private javax.swing.JLabel locationLabel; - private javax.swing.JLabel nameLabel; - private javax.swing.JPanel rightPanel; - private javax.swing.JCheckBox showInboxMessagesCheckBox; - private javax.swing.JLabel typeLabel; - private javax.swing.JCheckBox useForIngestCheckbox; - // End of variables declaration//GEN-END:variables - - private void importHashSet(java.awt.event.ActionEvent evt) { - new HashDbAddDatabaseDialog().display(); - hashSetTableModel.resync(); - /*int size = 0; - if(!nsrl) { - size = HashDbXML.getCurrent().getKnownBadSets().size(); - } - setSelection(size);*/ - } - - private class HashSetTableModel extends AbstractTableModel { - - private HashDbXML xmlHandle = HashDbXML.getCurrent(); - - @Override - public int getColumnCount() { - return 1; - } - - @Override - public int getRowCount() { - return xmlHandle.getAllSets().size(); - } - - @Override - public String getColumnName(int column) { - return "Name"; - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - if (xmlHandle.getNSRLSet() != null) { - if(rowIndex == 0) { - return xmlHandle.getNSRLSet().getName() + " (NSRL)"; - } else { - return xmlHandle.getKnownBadSets().get(rowIndex-1).getName(); - } - } else { - return xmlHandle.getKnownBadSets().get(rowIndex).getName(); - } - } - - @Override - public boolean isCellEditable(int rowIndex, int columnIndex) { - return false; - } - - @Override - public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - throw new UnsupportedOperationException("Editing of cells is not supported"); - } - - @Override - public Class getColumnClass(int c) { - return getValueAt(0, c).getClass(); - } - - void resync() { - fireTableDataChanged(); - } - } - - static void setButtonFromIndexStatus(JButton theButton, JLabel theLabel, IndexStatus status) { - theLabel.setText(status.message()); - switch (status) { - case INDEX_OUTDATED: - theButton.setText("Re-index"); - theButton.setEnabled(true); - break; - case INDEX_CURRENT: - theButton.setText("Re-index"); - theButton.setEnabled(true); - break; - case NO_INDEX: - theButton.setText("Index"); - theButton.setEnabled(true); - break; - case INDEXING: - theButton.setText("Indexing"); - theButton.setEnabled(false); - break; - default: - theButton.setText("Index"); - theButton.setEnabled(false); - } - if (ingestRunning) { - theButton.setEnabled(false); - } - } - - private int getSelection() { - return hashSetTable.getSelectionModel().getMinSelectionIndex(); - } - - private void setSelection(int index) { - if(index >= 0 && index < hashSetTable.getRowCount()) { - hashSetTable.getSelectionModel().setSelectionInterval(index, index); - } - } - void resync() { - int index = getSelection(); - this.hashSetTableModel.resync(); - setSelection(index); - } -} +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * HashDbManagementPanel.java + * + * Created on Jun 18, 2012, 12:13:03 PM + */ +package org.sleuthkit.autopsy.hashdatabase; + +import java.awt.event.KeyEvent; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JButton; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.table.AbstractTableModel; +import org.sleuthkit.autopsy.hashdatabase.HashDb.DBType; +import org.sleuthkit.datamodel.SleuthkitJNI; +import org.sleuthkit.datamodel.TskException; + +/** + * + * @author dfickling + */ +public class HashDbManagementPanel extends javax.swing.JPanel { + + private HashSetTableModel hashSetTableModel; + private static final Logger logger = Logger.getLogger(HashDbManagementPanel.class.getName()); + private static HashDbManagementPanel instance; + private static boolean ingestRunning = false; + + public static HashDbManagementPanel getDefault() { + if (instance == null) { + instance = new HashDbManagementPanel(); + } + return instance; + } + + /** Creates new form HashDbManagementPanel */ + private HashDbManagementPanel() { + setName(HashDbMgmtAction.ACTION_NAME); + this.hashSetTableModel = new HashSetTableModel(); + initComponents(); + customizeComponents(); + } + + private void customizeComponents() { + this.hashSetTable.setModel(hashSetTableModel); + this.hashSetTable.setTableHeader(null); + hashSetTable.getParent().setBackground(hashSetTable.getBackground()); + hashSetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + hashSetTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + + @Override + public void valueChanged(ListSelectionEvent e) { + ListSelectionModel listSelectionModel = (ListSelectionModel) e.getSource(); + if (!listSelectionModel.isSelectionEmpty()) { + int index = listSelectionModel.getMinSelectionIndex(); + listSelectionModel.setSelectionInterval(index, index); + HashDbXML loader = HashDbXML.getCurrent(); + HashDb current = loader.getAllSets().get(index); + initUI(current); + } else { + initUI(null); + } + } + }); + } + + private void initUI(HashDb db) { + boolean useForIngestEnabled = db != null && !ingestRunning; + boolean useForIngestSelected = db != null && db.getUseForIngest(); + boolean showInboxMessagesEnabled = db != null && !ingestRunning && useForIngestSelected && db.getDbType().equals(DBType.KNOWN_BAD); + boolean showInboxMessagesSelected = db != null && db.getShowInboxMessages(); + boolean deleteButtonEnabled = db != null && !ingestRunning; + boolean importButtonEnabled = !ingestRunning; + if (db == null) { + setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, IndexStatus.NONE); + this.hashDbLocationLabel.setText("No database selected"); + this.hashDbNameLabel.setText("No database selected"); + this.hashDbIndexStatusLabel.setText("No database selected"); + this.hashDbTypeLabel.setText("No database selected"); + } else { + setButtonFromIndexStatus(this.indexButton, this.hashDbIndexStatusLabel, db.status()); + String shortenPath = db.getDatabasePaths().get(0); + this.hashDbLocationLabel.setToolTipText(shortenPath); + if(shortenPath.length() > 50){ + shortenPath = shortenPath.substring(0, 10 + shortenPath.substring(10).indexOf(File.separator) + 1) + "..." + + shortenPath.substring((shortenPath.length() - 20) + shortenPath.substring(shortenPath.length() - 20).indexOf(File.separator)); + } + this.hashDbLocationLabel.setText(shortenPath); + this.hashDbNameLabel.setText(db.getName()); + this.hashDbTypeLabel.setText(db.getDbType().getDisplayName()); + } + this.useForIngestCheckbox.setSelected(useForIngestSelected); + this.useForIngestCheckbox.setEnabled(useForIngestEnabled); + this.showInboxMessagesCheckBox.setSelected(showInboxMessagesSelected); + this.showInboxMessagesCheckBox.setEnabled(showInboxMessagesEnabled); + this.deleteButton.setEnabled(deleteButtonEnabled); + this.importButton.setEnabled(importButtonEnabled); + } + + /** + * Don't allow any changes if ingest is running + */ + void setIngestRunning(boolean running) { + ingestRunning = running; + if(running) { + ingestRunningLabel.setText("Ingest is ongoing; some settings will be unavailable until it finishes."); + } else { + ingestRunningLabel.setText(""); + } + + int selection = getSelection(); + if(selection != -1) { + initUI(HashDbXML.getCurrent().getAllSets().get(selection)); + } + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jSplitPane1 = new javax.swing.JSplitPane(); + leftPanel = new javax.swing.JPanel(); + jScrollPane1 = new javax.swing.JScrollPane(); + hashSetTable = new javax.swing.JTable(); + importButton = new javax.swing.JButton(); + rightPanel = new javax.swing.JPanel(); + ingestRunningLabel = new javax.swing.JLabel(); + nameLabel = new javax.swing.JLabel(); + hashDbNameLabel = new javax.swing.JLabel(); + locationLabel = new javax.swing.JLabel(); + hashDbLocationLabel = new javax.swing.JLabel(); + useForIngestCheckbox = new javax.swing.JCheckBox(); + showInboxMessagesCheckBox = new javax.swing.JCheckBox(); + indexLabel = new javax.swing.JLabel(); + indexButton = new javax.swing.JButton(); + hashDbIndexStatusLabel = new javax.swing.JLabel(); + typeLabel = new javax.swing.JLabel(); + hashDbTypeLabel = new javax.swing.JLabel(); + deleteButton = new javax.swing.JButton(); + + jScrollPane1.setBackground(new java.awt.Color(255, 255, 255)); + + hashSetTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + + } + )); + hashSetTable.setShowHorizontalLines(false); + hashSetTable.setShowVerticalLines(false); + hashSetTable.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyPressed(java.awt.event.KeyEvent evt) { + hashSetTableKeyPressed(evt); + } + }); + jScrollPane1.setViewportView(hashSetTable); + + importButton.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.importButton.text")); // NOI18N + importButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + importButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout leftPanelLayout = new javax.swing.GroupLayout(leftPanel); + leftPanel.setLayout(leftPanelLayout); + leftPanelLayout.setHorizontalGroup( + leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, leftPanelLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(importButton) + .addGap(55, 55, 55)) + ); + leftPanelLayout.setVerticalGroup( + leftPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, leftPanelLayout.createSequentialGroup() + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 313, Short.MAX_VALUE) + .addGap(0, 0, 0) + .addComponent(importButton)) + ); + + jSplitPane1.setLeftComponent(leftPanel); + + ingestRunningLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.ingestRunningLabel.text")); // NOI18N + + nameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.nameLabel.text")); // NOI18N + + hashDbNameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbNameLabel.text")); // NOI18N + + locationLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.locationLabel.text")); // NOI18N + + hashDbLocationLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbLocationLabel.text")); // NOI18N + + useForIngestCheckbox.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.useForIngestCheckbox.text")); // NOI18N + useForIngestCheckbox.setEnabled(false); + useForIngestCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + useForIngestCheckboxActionPerformed(evt); + } + }); + + showInboxMessagesCheckBox.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.showInboxMessagesCheckBox.text")); // NOI18N + showInboxMessagesCheckBox.setEnabled(false); + showInboxMessagesCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + showInboxMessagesCheckBoxActionPerformed(evt); + } + }); + + indexLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.indexLabel.text")); // NOI18N + + indexButton.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.indexButton.text")); // NOI18N + indexButton.setEnabled(false); + indexButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + indexButtonActionPerformed(evt); + } + }); + + hashDbIndexStatusLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbIndexStatusLabel.text")); // NOI18N + + typeLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.typeLabel.text")); // NOI18N + + hashDbTypeLabel.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.hashDbTypeLabel.text")); // NOI18N + + deleteButton.setText(org.openide.util.NbBundle.getMessage(HashDbManagementPanel.class, "HashDbManagementPanel.deleteButton.text")); // NOI18N + deleteButton.setEnabled(false); + deleteButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + deleteButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout rightPanelLayout = new javax.swing.GroupLayout(rightPanel); + rightPanel.setLayout(rightPanelLayout); + rightPanelLayout.setHorizontalGroup( + rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(rightPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(rightPanelLayout.createSequentialGroup() + .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(rightPanelLayout.createSequentialGroup() + .addComponent(nameLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(hashDbNameLabel)) + .addGroup(rightPanelLayout.createSequentialGroup() + .addComponent(locationLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(hashDbLocationLabel)) + .addGroup(rightPanelLayout.createSequentialGroup() + .addComponent(ingestRunningLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(useForIngestCheckbox)) + .addGroup(rightPanelLayout.createSequentialGroup() + .addComponent(typeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(hashDbTypeLabel)) + .addGroup(rightPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(indexButton)) + .addGroup(rightPanelLayout.createSequentialGroup() + .addComponent(indexLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(hashDbIndexStatusLabel))) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(rightPanelLayout.createSequentialGroup() + .addComponent(showInboxMessagesCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE) + .addComponent(deleteButton))) + .addContainerGap()) + ); + rightPanelLayout.setVerticalGroup( + rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(rightPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameLabel) + .addComponent(hashDbNameLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(locationLabel) + .addComponent(hashDbLocationLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(typeLabel) + .addComponent(hashDbTypeLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(indexLabel) + .addComponent(hashDbIndexStatusLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(indexButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 138, Short.MAX_VALUE) + .addComponent(ingestRunningLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE) + .addComponent(useForIngestCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(rightPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(deleteButton) + .addComponent(showInboxMessagesCheckBox))) + ); + + jSplitPane1.setRightComponent(rightPanel); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSplitPane1) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSplitPane1) + ); + }// //GEN-END:initComponents + + private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDbXML.getCurrent().removeNSRLSet(); + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected - 1); + } + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected); + } + hashSetTableModel.resync(); + }//GEN-LAST:event_deleteButtonActionPerformed + + private void hashSetTableKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_hashSetTableKeyPressed + if (evt.getKeyCode() == KeyEvent.VK_DELETE) { + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDbXML.getCurrent().removeNSRLSet(); + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected - 1); + } + } else { + HashDbXML.getCurrent().removeKnownBadSetAt(selected); + } + } + hashSetTableModel.resync(); + }//GEN-LAST:event_hashSetTableKeyPressed + + private void useForIngestCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useForIngestCheckboxActionPerformed + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDb current = HashDbXML.getCurrent().getNSRLSet(); + current.setUseForIngest(useForIngestCheckbox.isSelected()); + HashDbXML.getCurrent().setNSRLSet(current); + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected - 1); + current.setUseForIngest(useForIngestCheckbox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected - 1, current); + this.showInboxMessagesCheckBox.setEnabled(useForIngestCheckbox.isSelected()); + } + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected); + current.setUseForIngest(useForIngestCheckbox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected, current); + this.showInboxMessagesCheckBox.setEnabled(useForIngestCheckbox.isSelected()); + } + }//GEN-LAST:event_useForIngestCheckboxActionPerformed + + private void showInboxMessagesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showInboxMessagesCheckBoxActionPerformed + int selected = getSelection(); + HashDbXML xmlHandle = HashDbXML.getCurrent(); + if (xmlHandle.getNSRLSet() != null) { + if (selected == 0) { + HashDb current = HashDbXML.getCurrent().getNSRLSet(); + current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); + HashDbXML.getCurrent().setNSRLSet(current); + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected - 1); + current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected - 1, current); + } + } else { + HashDb current = HashDbXML.getCurrent().getKnownBadSets().remove(selected); + current.setShowInboxMessages(showInboxMessagesCheckBox.isSelected()); + HashDbXML.getCurrent().addKnownBadSet(selected, current); + } + }//GEN-LAST:event_showInboxMessagesCheckBoxActionPerformed + + private void indexButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_indexButtonActionPerformed + int selected = getSelection(); + HashDb current = HashDbXML.getCurrent().getAllSets().get(selected); + try { + current.createIndex(); + } catch (TskException ex) { + logger.log(Level.WARNING, "Error creating index", ex); + } + setButtonFromIndexStatus(indexButton, this.hashDbIndexStatusLabel, current.status()); + }//GEN-LAST:event_indexButtonActionPerformed + + private void importButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importButtonActionPerformed + importHashSet(evt); + }//GEN-LAST:event_importButtonActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton deleteButton; + private javax.swing.JLabel hashDbIndexStatusLabel; + private javax.swing.JLabel hashDbLocationLabel; + private javax.swing.JLabel hashDbNameLabel; + private javax.swing.JLabel hashDbTypeLabel; + private javax.swing.JTable hashSetTable; + private javax.swing.JButton importButton; + private javax.swing.JButton indexButton; + private javax.swing.JLabel indexLabel; + private javax.swing.JLabel ingestRunningLabel; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSplitPane jSplitPane1; + private javax.swing.JPanel leftPanel; + private javax.swing.JLabel locationLabel; + private javax.swing.JLabel nameLabel; + private javax.swing.JPanel rightPanel; + private javax.swing.JCheckBox showInboxMessagesCheckBox; + private javax.swing.JLabel typeLabel; + private javax.swing.JCheckBox useForIngestCheckbox; + // End of variables declaration//GEN-END:variables + + private void importHashSet(java.awt.event.ActionEvent evt) { + new HashDbAddDatabaseDialog().display(); + hashSetTableModel.resync(); + /*int size = 0; + if(!nsrl) { + size = HashDbXML.getCurrent().getKnownBadSets().size(); + } + setSelection(size);*/ + } + + private class HashSetTableModel extends AbstractTableModel { + + private HashDbXML xmlHandle = HashDbXML.getCurrent(); + + @Override + public int getColumnCount() { + return 1; + } + + @Override + public int getRowCount() { + return xmlHandle.getAllSets().size(); + } + + @Override + public String getColumnName(int column) { + return "Name"; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if (xmlHandle.getNSRLSet() != null) { + if(rowIndex == 0) { + return xmlHandle.getNSRLSet().getName() + " (NSRL)"; + } else { + return xmlHandle.getKnownBadSets().get(rowIndex-1).getName(); + } + } else { + return xmlHandle.getKnownBadSets().get(rowIndex).getName(); + } + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + throw new UnsupportedOperationException("Editing of cells is not supported"); + } + + @Override + public Class getColumnClass(int c) { + return getValueAt(0, c).getClass(); + } + + void resync() { + fireTableDataChanged(); + } + } + + static void setButtonFromIndexStatus(JButton theButton, JLabel theLabel, IndexStatus status) { + theLabel.setText(status.message()); + switch (status) { + case INDEX_OUTDATED: + theButton.setText("Re-index"); + theButton.setEnabled(true); + break; + case INDEX_CURRENT: + theButton.setText("Re-index"); + theButton.setEnabled(true); + break; + case NO_INDEX: + theButton.setText("Index"); + theButton.setEnabled(true); + break; + case INDEXING: + theButton.setText("Indexing"); + theButton.setEnabled(false); + break; + default: + theButton.setText("Index"); + theButton.setEnabled(false); + } + if (ingestRunning) { + theButton.setEnabled(false); + } + } + + private int getSelection() { + return hashSetTable.getSelectionModel().getMinSelectionIndex(); + } + + private void setSelection(int index) { + if(index >= 0 && index < hashSetTable.getRowCount()) { + hashSetTable.getSelectionModel().setSelectionInterval(index, index); + } + } + void resync() { + int index = getSelection(); + this.hashSetTableModel.resync(); + setSelection(index); + } +} diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete_icon.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..418d6291078f9f8c8493f753a5126e8d70c3f300 GIT binary patch literal 3657 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

MZ-`rsgmcpQ(%gQ}|ZUb{v#8fE6pnG_cnV^4R` z+1VLb`{Olp(W5J2SV4pT4@1Eiv);Hl7;t-voIamVtg5O)ltcyw2I#olK`=N@hSR~w z$S9*Dqs;JnFJ&HOrNil_i-iW@K5$;mE+{av=&5vL%hef+F(s^KrY~l$DlJSXhX~VnJ0^qS2^! z>hn`Qe|dfP`+-2qfsU% zCP^d`2!ent%h+r-Y&IJvlS%FB>biO0z=4i!+qRwFz5CD2fk5E6s;Yyj2&B@03B8}*?kdAUz$t!4mB80!?{v~l#y%`N|{ bQ^EcRh_Zb2PbzPo00000NkvXXu0mjf6R`eK literal 0 HcmV?d00001 diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delte.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delte.png new file mode 100644 index 0000000000000000000000000000000000000000..55aefafea193b4d998d018b2bb7764fc4da2ce61 GIT binary patch literal 1279 zcmVax#_u}#6$Ag1|gVx;K zTuVxM;u_1cxPAL}Ih)NMOifKCC$9N;;^xhpr)Fkmerz-v(?JmAq?DXLe;%#%@tqk4 z^?IGBPoMtfx^8g){{2=MhTmSle*OCs0oSfw8^3t*;_u~hxt!1E(OTnq9zqD}^?Kh3 zCMPFFKA#sr&NR*M78Vx1dHwqJ4>xYyxPB}}w{G3qzI^%enARGl6aZ36Ha0f!eILUx z(kOcOj^l9p^l2>X{XR|8#57H6wVGaBT>Nx?ety{kxO(;KC!Xh(pFDYj>$+5{RdTr; z*=&}Hi3x1mMhJmvngAq8LLA3PDd~2*>3H|<9fd-Hy}dmH_!3y|rKmMNK5ksPbcra6 z@H~&5ogKEews`jJ8LwWw!m=z((?ltijyR417#|0@wOXZIE>kEJc=P5B^?JPxEC8fm z4Gj%#t*xzn?s=ZEzrT-R7=&Sn@B0WLICbh2l}d$5r9z=lV0d^K$8pGJvj`#B+}xyA ztFgGai0}Ke4<9~k{6hzK?%atkT(}@gr4sAw>ogh-c6WE#-QA_xY!XEgQ52!IMr%zJ zMP##CEX!hIVgldy+1S`f?%utd1(K6=5Oq2oQ7)G$7K^y9i*4IDj>Fj47(oyaMG=N! z&~CR0!;ng)g4UWa42k2IBuQk?Ie_`0_c)Gy&-2pLvbwrT9LE@j!TS0-N+}%2VQ+5_ z+qQ9Cm*wSUwzs!&T^A`OQp)f{pT_{c?;m!%-L!xQ2M08pO)Sge`Sa(rS}l}PEG;cz z7zSfwW7O+)rlzJibLI>qBO_?7yL|zzR;$tJbkYbc%OVUz48urAFGaR(6GahW7*Z;g zC>D#1j*e0)mG=7ry4~)dtyU|2wr!gr2+&%m>g}o7wr$$&Hm>WYNBHRI2(5LaFCYkl zKbp-ZrfH_FAPnE9)OFpo6*!KAWm&Y_Z3=}#3O+nMBuSFhzJSfm&0l=qPZgTW<;Y|* zD5c2da;d<2uqcX{oSZ}{)hjTb=l$9j@aWN_6)C0ieII~2VB0oHlHfQF09tDX1_n?{kd*e=HrRk+1b|C*4Ae)U%s?`-#2=_Un!Mp!8A=W znGB|B;`=^pYiqoC@uKUx?$@Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBU#tVu*cR7gw3)mcbXVH5{&qsXXUiXbYZWqJs)Qb>JBh-tx!UM!;5 zzz36FV#<0^vuR8+Gr?TOQB%|wD}pRFbj*F3aUa*&9LIg%H$?y4bI8D&xtcFsI1B@K zzTcex_uX?H9RAa_$<578=IZKte~r55?CiXABmZ%?LZQIY(h}z9=P@@oXR~H!XW{Sf zzaRix{}nlsn3%}Gz`y{8hK4XaJdDxNQH+g^VRCX3Q&Ur1si~=uN~QAxu;pJ62?2|X zi|Fg?V`Ok}kfD*05k@8^CKw{rVzI!}({o$^Hm?_vBqStYVPOG1Jw1%{_xJyX2wCZd zpv=rn{_f@FRV)CT)`Ljmm6MZ$_V#u(Ha5cD-CemJL=qPl z#~W<5S{bngm6n!rR8>_~$j{G*R;z`_(;5t6`n8;(6Y4bar+!K%WFq6ts9nMFq;r%1~TfjKab~ zsMTuZ<>m3l2L=WbaL_K0tItKYH5-cW3YbhLZo9R$l{2oZt3ypq4I`D6m5h{>lyEl% z1qBQQ2L}@%u?xJ?yu{<0$9Rw>gUM`!Uav=6TN|32o1xR`P+wn<+S*!1DF5>Ea?pMd zLeEA>NQgLa{o@(g|lDwL7KH6 z=f57nMFH~`O4)o7S6^M`Q$%AyEHVPZ!oqAvwCkRu_JipH?pK@yVGpZZksvI7Q|ZHF zf}UnV#3G{!8xavfz)_p0Xiva4-5bL>yfdE1d!sk*q~GQ_L!*HZnoIPs(X&DO@@Hf; z+QY-c?E|E4_uFjH4d1}iY&mGt=xoyjr6EW2hXxA(P401ojJE+!E^128(`6 oYuLRUf89U>Ya>OA(;5yx0f8qxiVqq6^#A|>07*qoM6N<$f*ok*EdT%j literal 0 HcmV?d00001 diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import_icon.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbb9716a87b71d47a4704c312403dc80880ee95 GIT binary patch literal 2076 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 y96_iD9 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 literal 0 HcmV?d00001 diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/options_icon.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/options_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ab65721358e857164483ad18f96ce449cdb418 GIT binary patch literal 4354 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 - + From 459f4bec7b59845ac0a2654ed0ecb1a526111c26 Mon Sep 17 00:00:00 2001 From: dhurd Date: Thu, 6 Sep 2012 14:26:15 -0400 Subject: [PATCH 04/29] Updates to HashDb in options. --- .../autopsy/hashdatabase/Bundle.properties | 2 +- .../HashDatabaseOptionsPanelController.java | 2 +- .../hashdatabase/HashDatabasePanel.form | 21 ++++----- .../hashdatabase/HashDatabasePanel.java | 43 ++++++++++-------- .../hashdatabase/HashDbIngestModule.java | 6 +++ .../hashdatabase/HashDbSearchPanel.java | 1 + .../autopsy/hashdatabase/warning.png | Bin 0 -> 552 bytes 7 files changed, 42 insertions(+), 33 deletions(-) create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/warning.png diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties index 4e520a97cd..ac676a5f4c 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties @@ -80,4 +80,4 @@ HashDatabasePanel.hashDbLocationLabel.text=No database selected HashDatabasePanel.hashDbTypeLabel.text=No database selected HashDatabasePanel.useForIngestCheckbox.text=Use during ingest HashDatabasePanel.showInboxMessagesCheckBox.text=Send messages to inbox during ingest -HashDatabasePanel.ingestRunningLabel.text= +HashDatabasePanel.ingestWarningLabel.text=Ingest is ongoing, some settings will be unavailable until it finishes. diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java index 3755f64399..007afc5537 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabaseOptionsPanelController.java @@ -73,7 +73,7 @@ public final class HashDatabaseOptionsPanelController extends OptionsPanelContro private HashDatabasePanel getPanel() { if (panel == null) { - panel = new HashDatabasePanel(this); + panel = HashDatabasePanel.getDefault(); } return panel; } diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form index 9562946d3b..8d0f36c462 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form @@ -52,16 +52,13 @@ - + - - - - + - + @@ -76,7 +73,7 @@ - + @@ -335,7 +332,7 @@ - + @@ -373,13 +370,13 @@ - + - - + + - + diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java index 923e5543d6..5853b47c78 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java @@ -14,24 +14,35 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; +import org.openide.util.Lookup; +import org.sleuthkit.autopsy.ingest.IngestDialogPanel; import org.sleuthkit.datamodel.TskException; final class HashDatabasePanel extends javax.swing.JPanel { - private final HashDatabaseOptionsPanelController controller; + //private final HashDatabaseOptionsPanelController controller; private HashSetTableModel hashSetTableModel; private static final Logger logger = Logger.getLogger(HashDatabasePanel.class.getName()); private static boolean ingestRunning = false; + static HashDatabasePanel instance; - HashDatabasePanel(HashDatabaseOptionsPanelController controller) { - this.controller = controller; + HashDatabasePanel() {//HashDatabaseOptionsPanelController controller) { + //this.controller = controller; this.hashSetTableModel = new HashSetTableModel(); initComponents(); customizeComponents(); // TODO listen to changes in form fields and call controller.changed() } + public static HashDatabasePanel getDefault() { + if(instance==null) { + instance = new HashDatabasePanel(); + } + return instance; + } + private void customizeComponents() { + this.ingestWarningLabel.setVisible(false); this.hashSetTable.setModel(hashSetTableModel); this.hashSetTable.setTableHeader(null); hashSetTable.getParent().setBackground(hashSetTable.getBackground()); @@ -92,11 +103,7 @@ final class HashDatabasePanel extends javax.swing.JPanel { */ void setIngestRunning(boolean running) { ingestRunning = running; - if(running) { - ingestRunningLabel.setText("Ingest is ongoing; some settings will be unavailable until it finishes."); - } else { - ingestRunningLabel.setText(""); - } + ingestWarningLabel.setVisible(running); int selection = getSelection(); if(selection != -1) { @@ -134,7 +141,7 @@ final class HashDatabasePanel extends javax.swing.JPanel { jPanel4 = new javax.swing.JPanel(); useForIngestCheckbox = new javax.swing.JCheckBox(); showInboxMessagesCheckBox = new javax.swing.JCheckBox(); - ingestRunningLabel = new javax.swing.JLabel(); + ingestWarningLabel = new javax.swing.JLabel(); org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel2.text")); // NOI18N @@ -297,7 +304,7 @@ final class HashDatabasePanel extends javax.swing.JPanel { .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(useForIngestCheckbox) .addComponent(showInboxMessagesCheckBox)) - .addContainerGap(135, Short.MAX_VALUE)) + .addContainerGap(128, Short.MAX_VALUE)) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -308,8 +315,8 @@ final class HashDatabasePanel extends javax.swing.JPanel { .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); - ingestRunningLabel.setForeground(new java.awt.Color(255, 0, 0)); - org.openide.awt.Mnemonics.setLocalizedText(ingestRunningLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.ingestRunningLabel.text")); // NOI18N + ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/warning.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.ingestWarningLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -318,14 +325,12 @@ final class HashDatabasePanel extends javax.swing.JPanel { .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(18, 18, 18) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(ingestRunningLabel) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) + .addComponent(ingestWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(18, 18, 18)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -338,7 +343,7 @@ final class HashDatabasePanel extends javax.swing.JPanel { .addGap(18, 18, 18) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) - .addComponent(ingestRunningLabel) + .addComponent(ingestWarningLabel) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); @@ -467,7 +472,7 @@ final class HashDatabasePanel extends javax.swing.JPanel { private javax.swing.JButton importButton; private javax.swing.JButton indexButton; private javax.swing.JLabel indexLabel; - private javax.swing.JLabel ingestRunningLabel; + private javax.swing.JLabel ingestWarningLabel; private javax.swing.JButton jButton3; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel4; diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java index 0e52f354ba..7cdfc8f114 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java @@ -89,7 +89,9 @@ public class HashDbIngestModule implements IngestModuleAbstractFile { public void init(IngestModuleInit initContext) { services = IngestServices.getDefault(); HashDbManagementPanel.getDefault().setIngestRunning(true); + HashDatabasePanel.getDefault().setIngestRunning(true); HashDbSimplePanel.setIngestRunning(true); + HashDbSearchPanel.getDefault().setIngestRunning(true); this.services.postMessage(IngestMessage.createMessage(++messageId, IngestMessage.MessageType.INFO, this, "Started")); this.skCase = Case.getCurrentCase().getSleuthkitCase(); try { @@ -161,7 +163,9 @@ public class HashDbIngestModule implements IngestModuleAbstractFile { services.postMessage(IngestMessage.createMessage(++messageId, IngestMessage.MessageType.INFO, this, "Hash Ingest Complete", detailsSb.toString())); HashDbManagementPanel.getDefault().setIngestRunning(false); + HashDatabasePanel.getDefault().setIngestRunning(false); HashDbSimplePanel.setIngestRunning(false); + HashDbSearchPanel.getDefault().setIngestRunning(false); } /** @@ -171,7 +175,9 @@ public class HashDbIngestModule implements IngestModuleAbstractFile { public void stop() { //manager.postMessage(IngestMessage.createMessage(++messageId, IngestMessage.MessageType.INFO, this, "STOP")); HashDbManagementPanel.getDefault().setIngestRunning(false); + HashDatabasePanel.getDefault().setIngestRunning(false); HashDbSimplePanel.setIngestRunning(false); + HashDbSearchPanel.getDefault().setIngestRunning(false); } /** diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSearchPanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSearchPanel.java index 26e20f8a21..6e7a897ebd 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSearchPanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbSearchPanel.java @@ -121,6 +121,7 @@ public class HashDbSearchPanel extends javax.swing.JPanel implements ActionListe removeButton.setEnabled(!ingestRunning); hashTable.setEnabled(!ingestRunning); hashLabel.setEnabled(!ingestRunning); + saveBox.setEnabled(!ingestRunning); } /** diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/warning.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ba881738ae3072e476f3ddbd7dd34d642f06d6 GIT binary patch literal 552 zcmV+@0@wYCP)A&a_P7S}o zG!s6}jEu~GKp4p&41mvo3NbA|1~KhGFq>2ZZB(et$g5@cY9-1{tFW22MeRe4v~wF$QERIaM<- z{{O*nd`23>@mYBc|Np&XP;x8-%MmglnP1j4N=(g;;pf|paKWFi*D(ky8Zq$8n1Dhw z4W9v-%1)IGf4<*f`2Xh#iNdNA(_lT4EX==BZIP28N-#eIhh~>reEIz qPU=w%q=Bs Date: Wed, 12 Sep 2012 12:37:30 -0400 Subject: [PATCH 05/29] Added functionality to Option panels; replaced old advanced panels. --- .../AdvancedConfigurationDialog.form | 46 +- .../AdvancedConfigurationDialog.java | 28 +- .../autopsy/hashdatabase/Bundle.properties | 6 +- .../hashdatabase/HashDatabasePanel.form | 583 ++++++++------- .../hashdatabase/HashDatabasePanel.java | 238 +++--- .../hashdatabase/HashDbIngestModule.java | 3 +- .../autopsy/hashdatabase/delete16.png | Bin 0 -> 1685 bytes .../autopsy/hashdatabase/delete_icon.png | Bin 3657 -> 0 bytes .../sleuthkit/autopsy/hashdatabase/delte.png | Bin 1279 -> 0 bytes .../sleuthkit/autopsy/hashdatabase/import.png | Bin 1070 -> 0 bytes .../autopsy/hashdatabase/import16.png | Bin 0 -> 1697 bytes .../autopsy/hashdatabase/import_icon.png | Bin 2076 -> 0 bytes .../autopsy/hashdatabase/large_delete.png | Bin 4096 -> 0 bytes .../autopsy/hashdatabase/large_import.png | Bin 3514 -> 0 bytes .../autopsy/hashdatabase/options-icon.png | Bin 0 -> 4354 bytes .../{warning.png => warning16.png} | Bin KeywordSearch/nbproject/project.xml | 675 +++++++++--------- .../autopsy/keywordsearch/Bundle.properties | 132 ++-- .../KeywordSearchConfigurationPanel1.form | 20 +- .../KeywordSearchConfigurationPanel1.java | 15 +- .../KeywordSearchConfigurationPanel2.form | 72 +- .../KeywordSearchConfigurationPanel2.java | 410 ++++++----- .../KeywordSearchConfigurationPanel3.form | 17 +- .../KeywordSearchConfigurationPanel3.java | 360 +++++----- .../KeywordSearchEditListPanel.form | 267 ++++--- .../KeywordSearchEditListPanel.java | 238 +++--- .../KeywordSearchIngestModule.java | 3 +- .../KeywordSearchListsManagementPanel.form | 46 +- .../KeywordSearchListsManagementPanel.java | 31 +- .../KeywordSearchOptionsPanel.form | 34 + .../KeywordSearchOptionsPanel.java | 89 +++ .../KeywordSearchOptionsPanelController.java | 78 ++ .../sleuthkit/autopsy/keywordsearch/add16.png | Bin 0 -> 1630 bytes .../autopsy/keywordsearch/delete16.png | Bin 0 -> 1685 bytes .../autopsy/keywordsearch/export16.png | Bin 0 -> 1688 bytes .../autopsy/keywordsearch/import16.png | Bin 0 -> 1697 bytes .../sleuthkit/autopsy/keywordsearch/new16.png | Bin 0 -> 1661 bytes .../autopsy/keywordsearch/options-icon.png | Bin 0 -> 1891 bytes .../autopsy/keywordsearch/save16.png | Bin 0 -> 609 bytes 39 files changed, 1924 insertions(+), 1467 deletions(-) create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete16.png delete mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete_icon.png delete mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delte.png delete mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import16.png delete mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import_icon.png delete mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/large_delete.png delete mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/large_import.png create mode 100644 HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/options-icon.png rename HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/{warning.png => warning16.png} (100%) create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanel.form create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanel.java create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/add16.png create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/delete16.png create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/export16.png create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/import16.png create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/new16.png create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/options-icon.png create mode 100644 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/save16.png diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.form b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.form index cc784d4d4a..554b08dbe3 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.form +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.form @@ -17,7 +17,7 @@ - + @@ -42,13 +42,49 @@ - + - - + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.java b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.java index 3c338c9053..3758ee7760 100644 --- a/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.java +++ b/CoreComponents/src/org/sleuthkit/autopsy/corecomponents/AdvancedConfigurationDialog.java @@ -57,7 +57,7 @@ public class AdvancedConfigurationDialog extends javax.swing.JDialog { panel.setAlignmentX(Component.CENTER_ALIGNMENT); - applyButton.setAlignmentX(Component.CENTER_ALIGNMENT); + //applyButton.setAlignmentX(Component.CENTER_ALIGNMENT); this.add(panel, 0); this.pack(); @@ -83,6 +83,7 @@ public class AdvancedConfigurationDialog extends javax.swing.JDialog { jSeparator1 = new javax.swing.JSeparator(); filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 4), new java.awt.Dimension(0, 4), new java.awt.Dimension(0, 4)); + jPanel1 = new javax.swing.JPanel(); applyButton = new javax.swing.JButton(); filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 4), new java.awt.Dimension(0, 4), new java.awt.Dimension(0, 4)); @@ -91,8 +92,30 @@ public class AdvancedConfigurationDialog extends javax.swing.JDialog { getContentPane().add(jSeparator1); getContentPane().add(filler1); + jPanel1.setMaximumSize(new java.awt.Dimension(4000, 27)); + jPanel1.setMinimumSize(new java.awt.Dimension(100, 27)); + jPanel1.setPreferredSize(new java.awt.Dimension(400, 27)); + applyButton.setText(org.openide.util.NbBundle.getMessage(AdvancedConfigurationDialog.class, "AdvancedConfigurationDialog.applyButton.text")); // NOI18N - getContentPane().add(applyButton); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addContainerGap(343, Short.MAX_VALUE) + .addComponent(applyButton) + .addContainerGap()) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(2, 2, 2) + .addComponent(applyButton) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + getContentPane().add(jPanel1); getContentPane().add(filler2); pack(); @@ -102,6 +125,7 @@ public class AdvancedConfigurationDialog extends javax.swing.JDialog { private javax.swing.JButton applyButton; private javax.swing.Box.Filler filler1; private javax.swing.Box.Filler filler2; + private javax.swing.JPanel jPanel1; private javax.swing.JSeparator jSeparator1; // End of variables declaration//GEN-END:variables diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties index ac676a5f4c..61244932c1 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/Bundle.properties @@ -56,16 +56,13 @@ HashDbSearchPanel.cancelButton.text=Cancel HashDbSimplePanel.calcHashesButton.text=Calculate hashes even if no hash database is selected HashDbSimplePanel.nsrlDbLabel.text=NSRL Database: HashDbSimplePanel.nsrlDbLabelVal.text=- -HashDatabasePanel.jPanel2.border.title=Databases HashDatabasePanel.jTable1.columnModel.title3=Title 4 HashDatabasePanel.jTable1.columnModel.title2=Title 3 HashDatabasePanel.jTable1.columnModel.title1=Title 2 HashDatabasePanel.jTable1.columnModel.title0=Title 1 -HashDatabasePanel.jPanel3.border.title=Information HashDatabasePanel.jLabel2.text=Name: HashDatabasePanel.jLabel4.text=Location: HashDatabasePanel.jLabel6.text=Type: -HashDatabasePanel.jPanel4.border.title=Options HashDatabasePanel.jButton3.text=Import Database HashDatabasePanel.importButton.text=Import Database HashDatabasePanel.deleteButton.text=Delete Database @@ -81,3 +78,6 @@ HashDatabasePanel.hashDbTypeLabel.text=No database selected HashDatabasePanel.useForIngestCheckbox.text=Use during ingest HashDatabasePanel.showInboxMessagesCheckBox.text=Send messages to inbox during ingest HashDatabasePanel.ingestWarningLabel.text=Ingest is ongoing, some settings will be unavailable until it finishes. +HashDatabasePanel.jLabel1.text=Hash Databases: +HashDatabasePanel.jLabel3.text=Information +HashDatabasePanel.jLabel5.text=Options diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form index 8d0f36c462..2ee7c16416 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.form @@ -34,6 +34,11 @@ + + + + + @@ -49,16 +54,59 @@ - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -66,16 +114,61 @@ + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + @@ -83,302 +176,196 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java index 5853b47c78..1f8b7f4c54 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDatabasePanel.java @@ -14,8 +14,6 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; -import org.openide.util.Lookup; -import org.sleuthkit.autopsy.ingest.IngestDialogPanel; import org.sleuthkit.datamodel.TskException; final class HashDatabasePanel extends javax.swing.JPanel { @@ -123,25 +121,27 @@ final class HashDatabasePanel extends javax.swing.JPanel { jLabel4 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jButton3 = new javax.swing.JButton(); - jPanel2 = new javax.swing.JPanel(); + ingestWarningLabel = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); hashSetTable = new javax.swing.JTable(); deleteButton = new javax.swing.JButton(); importButton = new javax.swing.JButton(); - jPanel3 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); nameLabel = new javax.swing.JLabel(); - locationLabel = new javax.swing.JLabel(); - typeLabel = new javax.swing.JLabel(); - indexLabel = new javax.swing.JLabel(); hashDbNameLabel = new javax.swing.JLabel(); hashDbLocationLabel = new javax.swing.JLabel(); + locationLabel = new javax.swing.JLabel(); + typeLabel = new javax.swing.JLabel(); hashDbTypeLabel = new javax.swing.JLabel(); hashDbIndexStatusLabel = new javax.swing.JLabel(); + indexLabel = new javax.swing.JLabel(); indexButton = new javax.swing.JButton(); - jPanel4 = new javax.swing.JPanel(); useForIngestCheckbox = new javax.swing.JCheckBox(); showInboxMessagesCheckBox = new javax.swing.JCheckBox(); - ingestWarningLabel = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + jLabel5 = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + jSeparator2 = new javax.swing.JSeparator(); org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel2.text")); // NOI18N @@ -152,7 +152,10 @@ final class HashDatabasePanel extends javax.swing.JPanel { jButton3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jButton3, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jButton3.text")); // NOI18N - jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jPanel2.border.title"))); // NOI18N + setMinimumSize(new java.awt.Dimension(385, 500)); + + ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/warning16.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.ingestWarningLabel.text")); // NOI18N hashSetTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { @@ -169,65 +172,46 @@ final class HashDatabasePanel extends javax.swing.JPanel { }); jScrollPane1.setViewportView(hashSetTable); - deleteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/delte.png"))); // NOI18N + deleteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/delete16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(deleteButton, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.deleteButton.text")); // NOI18N + deleteButton.setMaximumSize(new java.awt.Dimension(140, 25)); + deleteButton.setMinimumSize(new java.awt.Dimension(140, 25)); + deleteButton.setPreferredSize(new java.awt.Dimension(140, 25)); deleteButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteButtonActionPerformed(evt); } }); - importButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/import.png"))); // NOI18N + importButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/import16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(importButton, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.importButton.text")); // NOI18N + importButton.setMaximumSize(new java.awt.Dimension(140, 25)); + importButton.setMinimumSize(new java.awt.Dimension(140, 25)); + importButton.setPreferredSize(new java.awt.Dimension(140, 25)); importButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { importButtonActionPerformed(evt); } }); - javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); - jPanel2.setLayout(jPanel2Layout); - jPanel2Layout.setHorizontalGroup( - jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel2Layout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() - .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, 165, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap()) - ); - jPanel2Layout.setVerticalGroup( - jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() - .addComponent(jScrollPane1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(importButton) - .addComponent(deleteButton)) - .addContainerGap()) - ); - - jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jPanel3.border.title"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel1.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(nameLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.nameLabel.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(locationLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.locationLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(typeLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.typeLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(indexLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.indexLabel.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(hashDbNameLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbNameLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(hashDbLocationLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbLocationLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(locationLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.locationLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(typeLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.typeLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(hashDbTypeLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbTypeLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(hashDbIndexStatusLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.hashDbIndexStatusLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(indexLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.indexLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(indexButton, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.indexButton.text")); // NOI18N indexButton.setEnabled(false); indexButton.addActionListener(new java.awt.event.ActionListener() { @@ -236,51 +220,6 @@ final class HashDatabasePanel extends javax.swing.JPanel { } }); - javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); - jPanel3.setLayout(jPanel3Layout); - jPanel3Layout.setHorizontalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(indexButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(nameLabel, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(locationLabel, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(typeLabel, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(indexLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(18, 18, 18) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(hashDbTypeLabel) - .addComponent(hashDbLocationLabel) - .addComponent(hashDbNameLabel) - .addComponent(hashDbIndexStatusLabel)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - jPanel3Layout.setVerticalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(nameLabel) - .addComponent(hashDbNameLabel)) - .addGap(5, 5, 5) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(locationLabel) - .addComponent(hashDbLocationLabel)) - .addGap(5, 5, 5) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(typeLabel) - .addComponent(hashDbTypeLabel)) - .addGap(5, 5, 5) - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(indexLabel) - .addComponent(hashDbIndexStatusLabel)) - .addGap(5, 5, 5) - .addComponent(indexButton) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jPanel4.border.title"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(useForIngestCheckbox, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.useForIngestCheckbox.text")); // NOI18N useForIngestCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -295,28 +234,9 @@ final class HashDatabasePanel extends javax.swing.JPanel { } }); - javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); - jPanel4.setLayout(jPanel4Layout); - jPanel4Layout.setHorizontalGroup( - jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel4Layout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(useForIngestCheckbox) - .addComponent(showInboxMessagesCheckBox)) - .addContainerGap(128, Short.MAX_VALUE)) - ); - jPanel4Layout.setVerticalGroup( - jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel4Layout.createSequentialGroup() - .addComponent(useForIngestCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(showInboxMessagesCheckBox) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); + org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel3.text")); // NOI18N - ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/hashdatabase/warning.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.ingestWarningLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(HashDatabasePanel.class, "HashDatabasePanel.jLabel5.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -324,27 +244,95 @@ final class HashDatabasePanel extends javax.swing.JPanel { layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() - .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(ingestWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(18, 18, 18)) + .addGroup(layout.createSequentialGroup() + .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 298, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(ingestWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 358, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(indexButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(nameLabel, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(locationLabel, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(typeLabel, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(indexLabel)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(hashDbTypeLabel) + .addComponent(hashDbLocationLabel) + .addComponent(hashDbNameLabel) + .addComponent(hashDbIndexStatusLabel))) + .addComponent(useForIngestCheckbox) + .addComponent(showInboxMessagesCheckBox))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator1)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 265, javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addComponent(jLabel1)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() + .addComponent(jLabel1) + .addGap(6, 6, 6) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() - .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel3) + .addGroup(layout.createSequentialGroup() + .addGap(8, 8, 8) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(7, 7, 7) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameLabel) + .addComponent(hashDbNameLabel)) + .addGap(5, 5, 5) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(locationLabel) + .addComponent(hashDbLocationLabel)) + .addGap(5, 5, 5) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(typeLabel) + .addComponent(hashDbTypeLabel)) + .addGap(5, 5, 5) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(indexLabel) + .addComponent(hashDbIndexStatusLabel)) + .addGap(5, 5, 5) + .addComponent(indexButton) .addGap(18, 18, 18) - .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel5) + .addGroup(layout.createSequentialGroup() + .addGap(8, 8, 8) + .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(useForIngestCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(showInboxMessagesCheckBox) .addGap(18, 18, 18) .addComponent(ingestWarningLabel) - .addGap(0, 0, Short.MAX_VALUE))) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(importButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); }// //GEN-END:initComponents @@ -439,6 +427,7 @@ final class HashDatabasePanel extends javax.swing.JPanel { }//GEN-LAST:event_importButtonActionPerformed void load() { + logger.log(Level.WARNING, "----->HASH LOAD<-----"); // TODO read settings and initialize GUI // Example: // someCheckBox.setSelected(Preferences.userNodeForPackage(HashDatabasePanel.class).getBoolean("someFlag", false)); @@ -449,6 +438,7 @@ final class HashDatabasePanel extends javax.swing.JPanel { } void store() { + logger.log(Level.WARNING, "----->HASH STORE<-----"); // TODO store modified settings // Example: // Preferences.userNodeForPackage(HashDatabasePanel.class).putBoolean("someFlag", someCheckBox.isSelected()); @@ -474,13 +464,15 @@ final class HashDatabasePanel extends javax.swing.JPanel { private javax.swing.JLabel indexLabel; private javax.swing.JLabel ingestWarningLabel; private javax.swing.JButton jButton3; + private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; - private javax.swing.JPanel jPanel2; - private javax.swing.JPanel jPanel3; - private javax.swing.JPanel jPanel4; private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JSeparator jSeparator2; private javax.swing.JLabel locationLabel; private javax.swing.JLabel nameLabel; private javax.swing.JCheckBox showInboxMessagesCheckBox; diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java index 7cdfc8f114..322a43b309 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashDbIngestModule.java @@ -234,9 +234,8 @@ public class HashDbIngestModule implements IngestModuleAbstractFile { @Override public javax.swing.JPanel getAdvancedConfiguration() { - OptionsDisplayer.getDefault().open("HashDatabase"); - return null; //return HashDbManagementPanel.getDefault(); + return HashDatabasePanel.getDefault(); } @Override diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete16.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete16.png new file mode 100644 index 0000000000000000000000000000000000000000..a68b5df1c360869646fd5f413cd3195a46754329 GIT binary patch literal 1685 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ za0`Jj+tIX_n~5oC^DMQ#CujeSKy zVsdtBi9%9pdS;%jl7fPQl0s&Rtx~wDuYqrYb81GWM^#a3aFt(3a#eP+Wr~u$9hXgo z6;N|-YDuC(MQ%=Bu~mhw64*>DAR8pCucQE0Qj%?}1aWkPZ-9bxeo?A|iJqZuvVpOQ zf{B@)k-3qjxtWeaaAJvqS7M%mk-37AfdP;(vNANZGBE@?1`L$!xPY`xQA(Oskc%7C zP9V=#DWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvk2+SOp z)Z*l#%mQ$5fy_-z$}cUkRZ;?31P4&hB^JOf$}5Hj9xxd7D-sLz4fPE4;U)t$+5iQu zz!8yO6q28xV}~WqY(P3u6d`Oy=udS?EJ?KkhKGf&fswAEd5D3Lm9d$XiD?v)euyG8 z?Y{XbnQ4_s+KqLMOhODTtqcsTOpKt~krY9-+vtM=0x4j?p$_sBnz#ai082@RhgU&q zQ4Tm-Qj+ykb5e6t^Gb?=VP=RLW+};5Y57IDi6wTKxryni`UQFEHu?xbyzYaz8kj7A z$x2tYf;a(H59yjGJ*S=KkWm&OxS&Uw=hR6&bH5*&oK&`0-GVMtlXRJ}^QhN2(iXl;g zX@b|%4Y|@&9?j*rnIm?3lY^$#ZQp&znhbbee*b;o+dampwPM~&Z+tx{J@N1lE5#L8 zv(|*I-r;}$d!_cF4ECSZ5(V2u@2IdeA5>7}XxeWg#e1*&!*9_)jx7&AG10hJ-uTu Y6!7e%!_zO9fK>y7r>mdKI;Vst0FT@fPyhe` literal 0 HcmV?d00001 diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete_icon.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delete_icon.png deleted file mode 100644 index 418d6291078f9f8c8493f753a5126e8d70c3f300..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3657 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

MZ-`rsgmcpQ(%gQ}|ZUb{v#8fE6pnG_cnV^4R` z+1VLb`{Olp(W5J2SV4pT4@1Eiv);Hl7;t-voIamVtg5O)ltcyw2I#olK`=N@hSR~w z$S9*Dqs;JnFJ&HOrNil_i-iW@K5$;mE+{av=&5vL%hef+F(s^KrY~l$DlJSXhX~VnJ0^qS2^! z>hn`Qe|dfP`+-2qfsU% zCP^d`2!ent%h+r-Y&IJvlS%FB>biO0z=4i!+qRwFz5CD2fk5E6s;Yyj2&B@03B8}*?kdAUz$t!4mB80!?{v~l#y%`N|{ bQ^EcRh_Zb2PbzPo00000NkvXXu0mjf6R`eK diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delte.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/delte.png deleted file mode 100644 index 55aefafea193b4d998d018b2bb7764fc4da2ce61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1279 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 diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import16.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/import16.png new file mode 100644 index 0000000000000000000000000000000000000000..18b35db444f6d2aa33751d669ea99289a1d8f828 GIT binary patch literal 1697 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 y96_iD9 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 diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/options-icon.png b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/options-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ab65721358e857164483ad18f96ce449cdb418 GIT binary patch literal 4354 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 - - org.netbeans.modules.apisupport.project - - - org.sleuthkit.autopsy.keywordsearch - - - - org.netbeans.api.progress - - - - 1 - 1.24.1 - - - - org.netbeans.modules.javahelp - - - - 1 - 2.22.1 - - - - org.netbeans.modules.settings - - - - 1 - 1.31.1 - - - - org.openide.awt - - - - 7.31.1 - - - - org.openide.modules - - - - 7.23.1 - - - - org.openide.nodes - - - - 7.21.1 - - - - org.openide.util - - - - 8.15.1 - - - - org.openide.util.lookup - - - - 8.8.1 - - - - org.openide.windows - - - - 6.40.1 - - - - org.sleuthkit.autopsy.casemodule - - - - 1 - 1.0 - - - - org.sleuthkit.autopsy.corecomponentinterfaces - - - - 1 - 1.0 - - - - org.sleuthkit.autopsy.corecomponents - - - - 1 - 1.0 - - - - org.sleuthkit.autopsy.coreutils - - - - 0-1 - 0.0 - - - - org.sleuthkit.autopsy.datamodel - - - - 1 - 1.0 - - - - org.sleuthkit.autopsy.directorytree - - - - 1 - 1.0 - - - - org.sleuthkit.autopsy.ingest - - - - 0-1 - 1.0 - - - - - org.sleuthkit.autopsy.keywordsearch - - - ext/metadata-extractor-2.4.0-beta-1.jar - release/modules/ext/metadata-extractor-2.4.0-beta-1.jar - - - ext/jdom-1.0.jar - release/modules/ext/jdom-1.0.jar - - - ext/poi-3.8-beta4.jar - release/modules/ext/poi-3.8-beta4.jar - - - ext/commons-io-2.1.jar - release/modules/ext/commons-io-2.1.jar - - - ext/commons-logging-1.1.1.jar - release/modules/ext/commons-logging-1.1.1.jar - - - ext/tagsoup-1.2.1.jar - release/modules/ext/tagsoup-1.2.1.jar - - - ext/solr-solrj-3.6.1.jar - release/modules/ext/solr-solrj-3.6.1.jar - - - ext/poi-ooxml-3.8-beta4.jar - release/modules/ext/poi-ooxml-3.8-beta4.jar - - - ext/commons-lang-2.4.jar - release/modules/ext/commons-lang-2.4.jar - - - ext/jcl-over-slf4j-1.6.1.jar - release/modules/ext/jcl-over-slf4j-1.6.1.jar - - - ext/boilerpipe-1.1.0.jar - release/modules/ext/boilerpipe-1.1.0.jar - - - ext/fontbox-1.6.0.jar - release/modules/ext/fontbox-1.6.0.jar - - - ext/jericho-html-3.2.jar - release/modules/ext/jericho-html-3.2.jar - - - ext/slf4j-api-1.6.1.jar - release/modules/ext/slf4j-api-1.6.1.jar - - - ext/qdox-1.12.jar - release/modules/ext/qdox-1.12.jar - - - ext/org.osgi.compendium-4.0.0.jar - release/modules/ext/org.osgi.compendium-4.0.0.jar - - - ext/asm-all-3.1.jar - release/modules/ext/asm-all-3.1.jar - - - ext/org.apache.felix.scr.generator-1.1.2.jar - release/modules/ext/org.apache.felix.scr.generator-1.1.2.jar - - - ext/tika-parsers-1.0.jar - release/modules/ext/tika-parsers-1.0.jar - - - ext/tika-core-1.0.jar - release/modules/ext/tika-core-1.0.jar - - - ext/bcmail-jdk15-1.45.jar - release/modules/ext/bcmail-jdk15-1.45.jar - - - ext/commons-codec-1.6.jar - release/modules/ext/commons-codec-1.6.jar - - - ext/wstx-asl-3.2.7.jar - release/modules/ext/wstx-asl-3.2.7.jar - - - ext/netcdf-4.2-min.jar - release/modules/ext/netcdf-4.2-min.jar - - - ext/xmlbeans-2.3.0.jar - release/modules/ext/xmlbeans-2.3.0.jar - - - ext/httpmime-4.1.3.jar - release/modules/ext/httpmime-4.1.3.jar - - - ext/commons-compress-1.3.jar - release/modules/ext/commons-compress-1.3.jar - - - ext/org.osgi.core-4.0.0.jar - release/modules/ext/org.osgi.core-4.0.0.jar - - - ext/org.apache.felix.scr.annotations-1.6.0.jar - release/modules/ext/org.apache.felix.scr.annotations-1.6.0.jar - - - ext/commons-logging-api-1.1.jar - release/modules/ext/commons-logging-api-1.1.jar - - - ext/apache-mime4j-core-0.7.jar - release/modules/ext/apache-mime4j-core-0.7.jar - - - ext/httpcore-4.1.4.jar - release/modules/ext/httpcore-4.1.4.jar - - - ext/poi-scratchpad-3.8-beta4.jar - release/modules/ext/poi-scratchpad-3.8-beta4.jar - - - ext/commons-httpclient-3.1.jar - release/modules/ext/commons-httpclient-3.1.jar - - - ext/apache-mime4j-dom-0.7.jar - release/modules/ext/apache-mime4j-dom-0.7.jar - - - ext/poi-ooxml-schemas-3.8-beta4.jar - release/modules/ext/poi-ooxml-schemas-3.8-beta4.jar - - - ext/dom4j-1.6.1.jar - release/modules/ext/dom4j-1.6.1.jar - - - ext/log4j-1.2.16.jar - release/modules/ext/log4j-1.2.16.jar - - - ext/rome-0.9.jar - release/modules/ext/rome-0.9.jar - - - ext/bcprov-jdk15-1.45.jar - release/modules/ext/bcprov-jdk15-1.45.jar - - - ext/httpclient-4.1.3.jar - release/modules/ext/httpclient-4.1.3.jar - - - ext/pdfbox-1.6.0.jar - release/modules/ext/pdfbox-1.6.0.jar - - - ext/jempbox-1.6.0.jar - release/modules/ext/jempbox-1.6.0.jar - - - ext/asm-3.1.jar - release/modules/ext/asm-3.1.jar - - - ext/geronimo-stax-api_1.0_spec-1.0.1.jar - release/modules/ext/geronimo-stax-api_1.0_spec-1.0.1.jar - - - - + + + org.netbeans.modules.apisupport.project + + + org.sleuthkit.autopsy.keywordsearch + + + + org.netbeans.api.progress + + + + 1 + 1.24.1 + + + + org.netbeans.modules.javahelp + + + + 1 + 2.22.1 + + + + org.netbeans.modules.options.api + + + + 1 + 1.26.1 + + + + org.netbeans.modules.settings + + + + 1 + 1.31.1 + + + + org.openide.awt + + + + 7.31.1 + + + + org.openide.modules + + + + 7.23.1 + + + + org.openide.nodes + + + + 7.21.1 + + + + org.openide.util + + + + 8.15.1 + + + + org.openide.util.lookup + + + + 8.8.1 + + + + org.openide.windows + + + + 6.40.1 + + + + org.sleuthkit.autopsy.casemodule + + + + 1 + 1.0 + + + + org.sleuthkit.autopsy.corecomponentinterfaces + + + + 1 + 1.0 + + + + org.sleuthkit.autopsy.corecomponents + + + + 1 + 1.0 + + + + org.sleuthkit.autopsy.coreutils + + + + 0-1 + 0.0 + + + + org.sleuthkit.autopsy.datamodel + + + + 1 + 1.0 + + + + org.sleuthkit.autopsy.directorytree + + + + 1 + 1.0 + + + + org.sleuthkit.autopsy.ingest + + + + 0-1 + 1.0 + + + + + org.sleuthkit.autopsy.keywordsearch + + + ext/metadata-extractor-2.4.0-beta-1.jar + release/modules/ext/metadata-extractor-2.4.0-beta-1.jar + + + ext/jdom-1.0.jar + release/modules/ext/jdom-1.0.jar + + + ext/poi-3.8-beta4.jar + release/modules/ext/poi-3.8-beta4.jar + + + ext/commons-io-2.1.jar + release/modules/ext/commons-io-2.1.jar + + + ext/commons-logging-1.1.1.jar + release/modules/ext/commons-logging-1.1.1.jar + + + ext/tagsoup-1.2.1.jar + release/modules/ext/tagsoup-1.2.1.jar + + + ext/solr-solrj-3.6.1.jar + release/modules/ext/solr-solrj-3.6.1.jar + + + ext/poi-ooxml-3.8-beta4.jar + release/modules/ext/poi-ooxml-3.8-beta4.jar + + + ext/commons-lang-2.4.jar + release/modules/ext/commons-lang-2.4.jar + + + ext/jcl-over-slf4j-1.6.1.jar + release/modules/ext/jcl-over-slf4j-1.6.1.jar + + + ext/boilerpipe-1.1.0.jar + release/modules/ext/boilerpipe-1.1.0.jar + + + ext/fontbox-1.6.0.jar + release/modules/ext/fontbox-1.6.0.jar + + + ext/jericho-html-3.2.jar + release/modules/ext/jericho-html-3.2.jar + + + ext/slf4j-api-1.6.1.jar + release/modules/ext/slf4j-api-1.6.1.jar + + + ext/qdox-1.12.jar + release/modules/ext/qdox-1.12.jar + + + ext/org.osgi.compendium-4.0.0.jar + release/modules/ext/org.osgi.compendium-4.0.0.jar + + + ext/asm-all-3.1.jar + release/modules/ext/asm-all-3.1.jar + + + ext/org.apache.felix.scr.generator-1.1.2.jar + release/modules/ext/org.apache.felix.scr.generator-1.1.2.jar + + + ext/tika-parsers-1.0.jar + release/modules/ext/tika-parsers-1.0.jar + + + ext/tika-core-1.0.jar + release/modules/ext/tika-core-1.0.jar + + + ext/bcmail-jdk15-1.45.jar + release/modules/ext/bcmail-jdk15-1.45.jar + + + ext/commons-codec-1.6.jar + release/modules/ext/commons-codec-1.6.jar + + + ext/wstx-asl-3.2.7.jar + release/modules/ext/wstx-asl-3.2.7.jar + + + ext/netcdf-4.2-min.jar + release/modules/ext/netcdf-4.2-min.jar + + + ext/xmlbeans-2.3.0.jar + release/modules/ext/xmlbeans-2.3.0.jar + + + ext/httpmime-4.1.3.jar + release/modules/ext/httpmime-4.1.3.jar + + + ext/commons-compress-1.3.jar + release/modules/ext/commons-compress-1.3.jar + + + ext/org.osgi.core-4.0.0.jar + release/modules/ext/org.osgi.core-4.0.0.jar + + + ext/org.apache.felix.scr.annotations-1.6.0.jar + release/modules/ext/org.apache.felix.scr.annotations-1.6.0.jar + + + ext/commons-logging-api-1.1.jar + release/modules/ext/commons-logging-api-1.1.jar + + + ext/apache-mime4j-core-0.7.jar + release/modules/ext/apache-mime4j-core-0.7.jar + + + ext/httpcore-4.1.4.jar + release/modules/ext/httpcore-4.1.4.jar + + + ext/poi-scratchpad-3.8-beta4.jar + release/modules/ext/poi-scratchpad-3.8-beta4.jar + + + ext/commons-httpclient-3.1.jar + release/modules/ext/commons-httpclient-3.1.jar + + + ext/apache-mime4j-dom-0.7.jar + release/modules/ext/apache-mime4j-dom-0.7.jar + + + ext/poi-ooxml-schemas-3.8-beta4.jar + release/modules/ext/poi-ooxml-schemas-3.8-beta4.jar + + + ext/dom4j-1.6.1.jar + release/modules/ext/dom4j-1.6.1.jar + + + ext/log4j-1.2.16.jar + release/modules/ext/log4j-1.2.16.jar + + + ext/rome-0.9.jar + release/modules/ext/rome-0.9.jar + + + ext/bcprov-jdk15-1.45.jar + release/modules/ext/bcprov-jdk15-1.45.jar + + + ext/httpclient-4.1.3.jar + release/modules/ext/httpclient-4.1.3.jar + + + ext/pdfbox-1.6.0.jar + release/modules/ext/pdfbox-1.6.0.jar + + + ext/jempbox-1.6.0.jar + release/modules/ext/jempbox-1.6.0.jar + + + ext/asm-3.1.jar + release/modules/ext/asm-3.1.jar + + + ext/geronimo-stax-api_1.0_spec-1.0.1.jar + release/modules/ext/geronimo-stax-api_1.0_spec-1.0.1.jar + + + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties index 858d36cd6b..bfb6417cc7 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties @@ -1,63 +1,69 @@ -OpenIDE-Module-Name=KeywordSearch -ListBundleName=Keyword Lists -ListBundleConfig=Keyword List Configuration -IndexProgressPanel.statusText.text=Status text -IndexProgressPanel.cancelButton.text=Cancel -ExtractedContentPanel.hitLabel.text=Matches on page: -ExtractedContentPanel.hitCountLabel.text=- -ExtractedContentPanel.hitOfLabel.text=of -ExtractedContentPanel.hitTotalLabel.text=- -ExtractedContentPanel.hitButtonsLabel.text=Match -ExtractedContentPanel.hitPreviousButton.text= -ExtractedContentPanel.hitNextButton.text= -ExtractedContentPanel.copyMenuItem.text=Copy -ExtractedContentPanel.selectAllMenuItem.text=Select All -KeywordSearchEditListPanel.saveListButton.text=Save As -KeywordSearchEditListPanel.addWordField.text= -KeywordSearchEditListPanel.addWordButton.text=Add -KeywordSearchEditListPanel.chRegex.text=Regular Expression -KeywordSearchEditListPanel.deleteWordButton.text=Remove Selected -KeywordSearchEditListPanel.cutMenuItem.text=Cut -KeywordSearchEditListPanel.selectAllMenuItem.text=Select All -KeywordSearchEditListPanel.pasteMenuItem.text=Paste -KeywordSearchEditListPanel.copyMenuItem.text=Copy -KeywordSearchEditListPanel.exportButton.text=Export List -KeywordSearchEditListPanel.deleteListButton.text=Delete List -KeywordSearchListsManagementPanel.newListButton.text=New List -KeywordSearchEditListPanel.useForIngestCheckbox.text=Use during ingest -KeywordSearchListsManagementPanel.importButton.text=Import List -KeywordSearchPanel.searchBox.text=Search... -KeywordSearchPanel.regExCheckboxMenuItem.text=Use Regular Expressions -KeywordSearchPanel.settingsLabel.text= -KeywordSearchListsViewerPanel.searchAddButton.text=Search -KeywordSearchListsViewerPanel.manageListsButton.text=Manage Lists -KeywordSearchIngestSimplePanel.jLabel1.text=Select lists to use during ingest: -KeywordSearchListsViewerPanel.ingestIndexLabel.text=Files Indexed: -KeywordSearchEditListPanel.selectorsCombo.toolTipText=Regular Expression selector type (optional) -KeywordSearchPanel.searchButton.text= -KeywordSearchPanel.cutMenuItem.text=Cut -KeywordSearchPanel.copyMenuItem.text=Copy -KeywordSearchPanel.pasteMenuItem.text=Paste -KeywordSearchPanel.selectAllMenuItem.text=Select All -ExtractedContentPanel.pageButtonsLabel.text=Page -ExtractedContentPanel.pageNextButton.text= -ExtractedContentPanel.pagePreviousButton.actionCommand=pagePreviousButton -ExtractedContentPanel.pagePreviousButton.text= -ExtractedContentPanel.pagesLabel.text=Page: -ExtractedContentPanel.pageOfLabel.text=of -ExtractedContentPanel.pageCurLabel.text=- -ExtractedContentPanel.pageTotalLabel.text=- -ExtractedContentPanel.hitLabel.toolTipText= -KeywordSearchEditListPanel.ingestMessagesCheckbox.text=Send messages to inbox during ingest -KeywordSearchEditListPanel.ingestMessagesCheckbox.toolTipText=Send messages during triage / ingest when hits on keyword from this list occur -KeywordSearchConfigurationPanel2.skipNSRLCheckBox.text=Do not add files in NSRL (known files) to keyword index -KeywordSearchConfigurationPanel2.skipNSRLCheckBox.toolTipText=Requires Hash DB service to had run previously, or be selected for next ingest. -KeywordSearchConfigurationPanel2.filesIndexedValue.text=- -KeywordSearchConfigurationPanel2.filesIndexedLabel.text=Files in keyword index: -KeywordSearchIngestSimplePanel.languagesLabel.text=Scripts to extract from unknown file types (in Advanced settings): -KeywordSearchIngestSimplePanel.languagesValLabel.text=- -KeywordSearchIngestSimplePanel.languagesLabel.toolTipText= -KeywordSearchIngestSimplePanel.languagesValLabel.toolTipText= -KeywordSearchConfigurationPanel3.languagesLabel.text=Scripts to extract from unknown file types (change will be effective on next ingest): -KeywordSearchConfigurationPanel2.chunksLabel.text=Chunks in keyword index: -KeywordSearchConfigurationPanel2.chunksValLabel.text=- +OpenIDE-Module-Name=KeywordSearch +ListBundleName=Keyword Lists +ListBundleConfig=Keyword List Configuration +IndexProgressPanel.statusText.text=Status text +IndexProgressPanel.cancelButton.text=Cancel +ExtractedContentPanel.hitLabel.text=Matches on page: +ExtractedContentPanel.hitCountLabel.text=- +ExtractedContentPanel.hitOfLabel.text=of +ExtractedContentPanel.hitTotalLabel.text=- +ExtractedContentPanel.hitButtonsLabel.text=Match +ExtractedContentPanel.hitPreviousButton.text= +ExtractedContentPanel.hitNextButton.text= +ExtractedContentPanel.copyMenuItem.text=Copy +ExtractedContentPanel.selectAllMenuItem.text=Select All +KeywordSearchEditListPanel.saveListButton.text=Save As +KeywordSearchEditListPanel.addWordField.text= +KeywordSearchEditListPanel.addWordButton.text=Add +KeywordSearchEditListPanel.chRegex.text=Regular Expression +KeywordSearchEditListPanel.deleteWordButton.text=Remove Selected +KeywordSearchEditListPanel.cutMenuItem.text=Cut +KeywordSearchEditListPanel.selectAllMenuItem.text=Select All +KeywordSearchEditListPanel.pasteMenuItem.text=Paste +KeywordSearchEditListPanel.copyMenuItem.text=Copy +KeywordSearchEditListPanel.exportButton.text=Export List +KeywordSearchEditListPanel.deleteListButton.text=Delete List +KeywordSearchListsManagementPanel.newListButton.text=New List +KeywordSearchEditListPanel.useForIngestCheckbox.text=Use during ingest +KeywordSearchListsManagementPanel.importButton.text=Import List +KeywordSearchPanel.searchBox.text=Search... +KeywordSearchPanel.regExCheckboxMenuItem.text=Use Regular Expressions +KeywordSearchPanel.settingsLabel.text= +KeywordSearchListsViewerPanel.searchAddButton.text=Search +KeywordSearchListsViewerPanel.manageListsButton.text=Manage Lists +KeywordSearchIngestSimplePanel.jLabel1.text=Select lists to use during ingest: +KeywordSearchListsViewerPanel.ingestIndexLabel.text=Files Indexed: +KeywordSearchEditListPanel.selectorsCombo.toolTipText=Regular Expression selector type (optional) +KeywordSearchPanel.searchButton.text= +KeywordSearchPanel.cutMenuItem.text=Cut +KeywordSearchPanel.copyMenuItem.text=Copy +KeywordSearchPanel.pasteMenuItem.text=Paste +KeywordSearchPanel.selectAllMenuItem.text=Select All +ExtractedContentPanel.pageButtonsLabel.text=Page +ExtractedContentPanel.pageNextButton.text= +ExtractedContentPanel.pagePreviousButton.actionCommand=pagePreviousButton +ExtractedContentPanel.pagePreviousButton.text= +ExtractedContentPanel.pagesLabel.text=Page: +ExtractedContentPanel.pageOfLabel.text=of +ExtractedContentPanel.pageCurLabel.text=- +ExtractedContentPanel.pageTotalLabel.text=- +ExtractedContentPanel.hitLabel.toolTipText= +KeywordSearchEditListPanel.ingestMessagesCheckbox.text=Send messages to inbox during ingest +KeywordSearchEditListPanel.ingestMessagesCheckbox.toolTipText=Send messages during triage / ingest when hits on keyword from this list occur +KeywordSearchConfigurationPanel2.skipNSRLCheckBox.text=Do not add files in NSRL (known files) to keyword index +KeywordSearchConfigurationPanel2.skipNSRLCheckBox.toolTipText=Requires Hash DB service to had run previously, or be selected for next ingest. +KeywordSearchConfigurationPanel2.filesIndexedValue.text=- +KeywordSearchConfigurationPanel2.filesIndexedLabel.text=Files in keyword index: +KeywordSearchIngestSimplePanel.languagesLabel.text=Scripts to extract from unknown file types (in Advanced settings): +KeywordSearchIngestSimplePanel.languagesValLabel.text=- +KeywordSearchIngestSimplePanel.languagesLabel.toolTipText= +KeywordSearchIngestSimplePanel.languagesValLabel.toolTipText= +KeywordSearchConfigurationPanel3.languagesLabel.text=Scripts to extract from unknown file types (change will be effective on next ingest): +KeywordSearchConfigurationPanel2.chunksLabel.text=Chunks in keyword index: +KeywordSearchConfigurationPanel2.chunksValLabel.text=- +KeywordSearchConfigurationPanel2.jLabel1.text=Settings +KeywordSearchConfigurationPanel2.jLabel2.text=Information +KeywordSearchListsManagementPanel.jLabel1.text=Keyword Lists: +KeywordSearchEditListPanel.jLabel1.text=Keywords: +KeywordSearchEditListPanel.keywordOptionsLabel.text=Keyword Options +KeywordSearchEditListPanel.listOptionsLabel.text=List Options diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.form index d88483b1ff..f68ba869f2 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.form @@ -1,4 +1,4 @@ - +
@@ -16,17 +16,23 @@ - + - + + + + + + + @@ -40,12 +46,12 @@ - + - + @@ -60,12 +66,12 @@ - + - + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.java index f44355b7ff..51e6232ee7 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel1.java @@ -78,15 +78,18 @@ public class KeywordSearchConfigurationPanel1 extends javax.swing.JPanel { jPanel1 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); + mainSplitPane.setBorder(null); + mainSplitPane.setDividerLocation(275); + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 100, Short.MAX_VALUE) + .addGap(0, 275, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 242, Short.MAX_VALUE) + .addGap(0, 327, Short.MAX_VALUE) ); mainSplitPane.setLeftComponent(jPanel1); @@ -95,11 +98,11 @@ public class KeywordSearchConfigurationPanel1 extends javax.swing.JPanel { jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 291, Short.MAX_VALUE) + .addGap(0, 318, Short.MAX_VALUE) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 242, Short.MAX_VALUE) + .addGap(0, 327, Short.MAX_VALUE) ); mainSplitPane.setRightComponent(jPanel2); @@ -108,11 +111,11 @@ public class KeywordSearchConfigurationPanel1 extends javax.swing.JPanel { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(mainSplitPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(mainSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(mainSplitPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(mainSplitPane) ); }// //GEN-END:initComponents diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.form index 86ecd6f394..af85345075 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.form @@ -20,24 +20,38 @@ - - + - - + - - - - + - - - + + + + + + + + + + + + + + + + + + + + + + - + @@ -45,9 +59,17 @@ - + + + + - + + + + + + @@ -58,7 +80,7 @@ - + @@ -94,8 +116,6 @@ - - @@ -110,5 +130,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.java index 289e2307ee..9916bf34f7 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel2.java @@ -1,192 +1,218 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2012 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.keywordsearch; - -import java.awt.Graphics; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.apache.solr.client.solrj.SolrServerException; -import org.openide.util.Exceptions; -import org.sleuthkit.autopsy.ingest.IngestManager; - -/** - * - * General, not per list, keyword search configuration and status display widget - */ -public class KeywordSearchConfigurationPanel2 extends javax.swing.JPanel { - - private static KeywordSearchConfigurationPanel2 instance = null; - private final Logger logger = Logger.getLogger(KeywordSearchConfigurationPanel2.class.getName()); - - /** - * Creates new form KeywordSearchConfigurationPanel2 - */ - public KeywordSearchConfigurationPanel2() { - initComponents(); - customizeComponents(); - } - - public static KeywordSearchConfigurationPanel2 getDefault() { - if (instance == null) { - instance = new KeywordSearchConfigurationPanel2(); - } - return instance; - } - - @Override - public void paint(Graphics g) { - super.paint(g); - - activateWidgets(); - } - - private void activateWidgets() { - final KeywordSearchIngestModule service = KeywordSearchIngestModule.getDefault(); - skipNSRLCheckBox.setSelected(service.getSkipKnown()); - boolean enable = !IngestManager.getDefault().isIngestRunning() - && ! IngestManager.getDefault().isModuleRunning(KeywordSearchIngestModule.getDefault()); - skipNSRLCheckBox.setEnabled(enable); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - langButtonGroup = new javax.swing.ButtonGroup(); - skipNSRLCheckBox = new javax.swing.JCheckBox(); - filesIndexedLabel = new javax.swing.JLabel(); - filesIndexedValue = new javax.swing.JLabel(); - jSeparator2 = new javax.swing.JSeparator(); - chunksLabel = new javax.swing.JLabel(); - chunksValLabel = new javax.swing.JLabel(); - - skipNSRLCheckBox.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.skipNSRLCheckBox.text")); // NOI18N - skipNSRLCheckBox.setToolTipText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.skipNSRLCheckBox.toolTipText")); // NOI18N - skipNSRLCheckBox.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - skipNSRLCheckBoxActionPerformed(evt); - } - }); - - filesIndexedLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.filesIndexedLabel.text")); // NOI18N - - filesIndexedValue.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.filesIndexedValue.text")); // NOI18N - filesIndexedValue.setMaximumSize(null); - - chunksLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.chunksLabel.text")); // NOI18N - - chunksValLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.chunksValLabel.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSeparator2) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(skipNSRLCheckBox) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(chunksLabel) - .addComponent(filesIndexedLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(filesIndexedValue, javax.swing.GroupLayout.DEFAULT_SIZE, 104, Short.MAX_VALUE) - .addComponent(chunksValLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addContainerGap(147, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(skipNSRLCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(filesIndexedLabel) - .addComponent(filesIndexedValue, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(chunksLabel) - .addComponent(chunksValLabel)) - .addContainerGap(31, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - -private void skipNSRLCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_skipNSRLCheckBoxActionPerformed - KeywordSearchIngestModule.getDefault().setSkipKnown(skipNSRLCheckBox.isSelected()); -}//GEN-LAST:event_skipNSRLCheckBoxActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel chunksLabel; - private javax.swing.JLabel chunksValLabel; - private javax.swing.JLabel filesIndexedLabel; - private javax.swing.JLabel filesIndexedValue; - private javax.swing.JSeparator jSeparator2; - private javax.swing.ButtonGroup langButtonGroup; - private javax.swing.JCheckBox skipNSRLCheckBox; - // End of variables declaration//GEN-END:variables - - private void customizeComponents() { - this.skipNSRLCheckBox.setSelected(KeywordSearchIngestModule.getDefault().getSkipKnown()); - - try { - filesIndexedValue.setText(Integer.toString(KeywordSearch.getServer().queryNumIndexedFiles())); - chunksValLabel.setText(Integer.toString(KeywordSearch.getServer().queryNumIndexedChunks())); - } catch (SolrServerException ex) { - logger.log(Level.WARNING, "Could not get number of indexed files/chunks"); - - } catch (NoOpenCoreException ex) { - logger.log(Level.WARNING, "Could not get number of indexed files/chunks"); - } - - KeywordSearch.changeSupport.addPropertyChangeListener(KeywordSearch.NUM_FILES_CHANGE_EVT, - new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - String changed = evt.getPropertyName(); - Object newValue = evt.getNewValue(); - - if (changed.equals(KeywordSearch.NUM_FILES_CHANGE_EVT)) { - int newFilesIndexed = ((Integer) newValue).intValue(); - filesIndexedValue.setText(Integer.toString(newFilesIndexed)); - try { - chunksValLabel.setText(Integer.toString(KeywordSearch.getServer().queryNumIndexedChunks())); - } catch (SolrServerException ex) { - logger.log(Level.WARNING, "Could not get number of indexed chunks"); - - } catch (NoOpenCoreException ex) { - logger.log(Level.WARNING, "Could not get number of indexed chunks"); - } - - } - } - }); - - - } -} +/* + * Autopsy Forensic Browser + * + * Copyright 2012 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch; + +import java.awt.Graphics; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.solr.client.solrj.SolrServerException; +import org.openide.util.Exceptions; +import org.sleuthkit.autopsy.ingest.IngestManager; + +/** + * + * General, not per list, keyword search configuration and status display widget + */ +public class KeywordSearchConfigurationPanel2 extends javax.swing.JPanel { + + private static KeywordSearchConfigurationPanel2 instance = null; + private final Logger logger = Logger.getLogger(KeywordSearchConfigurationPanel2.class.getName()); + + /** + * Creates new form KeywordSearchConfigurationPanel2 + */ + public KeywordSearchConfigurationPanel2() { + initComponents(); + customizeComponents(); + } + + public static KeywordSearchConfigurationPanel2 getDefault() { + if (instance == null) { + instance = new KeywordSearchConfigurationPanel2(); + } + return instance; + } + + @Override + public void paint(Graphics g) { + super.paint(g); + + activateWidgets(); + } + + private void activateWidgets() { + final KeywordSearchIngestModule service = KeywordSearchIngestModule.getDefault(); + skipNSRLCheckBox.setSelected(service.getSkipKnown()); + boolean enable = !IngestManager.getDefault().isIngestRunning() + && ! IngestManager.getDefault().isModuleRunning(KeywordSearchIngestModule.getDefault()); + skipNSRLCheckBox.setEnabled(enable); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + langButtonGroup = new javax.swing.ButtonGroup(); + skipNSRLCheckBox = new javax.swing.JCheckBox(); + filesIndexedLabel = new javax.swing.JLabel(); + filesIndexedValue = new javax.swing.JLabel(); + chunksLabel = new javax.swing.JLabel(); + chunksValLabel = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + jSeparator3 = new javax.swing.JSeparator(); + + skipNSRLCheckBox.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.skipNSRLCheckBox.text")); // NOI18N + skipNSRLCheckBox.setToolTipText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.skipNSRLCheckBox.toolTipText")); // NOI18N + skipNSRLCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + skipNSRLCheckBoxActionPerformed(evt); + } + }); + + filesIndexedLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.filesIndexedLabel.text")); // NOI18N + + filesIndexedValue.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.filesIndexedValue.text")); // NOI18N + filesIndexedValue.setMaximumSize(null); + + chunksLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.chunksLabel.text")); // NOI18N + + chunksValLabel.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.chunksValLabel.text")); // NOI18N + + jLabel1.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.jLabel1.text")); // NOI18N + + jLabel2.setText(org.openide.util.NbBundle.getMessage(KeywordSearchConfigurationPanel2.class, "KeywordSearchConfigurationPanel2.jLabel2.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 326, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator3)) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(chunksLabel) + .addComponent(filesIndexedLabel)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(filesIndexedValue, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(chunksValLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(skipNSRLCheckBox)))) + .addContainerGap(67, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel1) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(skipNSRLCheckBox) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel2) + .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(filesIndexedLabel) + .addComponent(filesIndexedValue, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(chunksLabel) + .addComponent(chunksValLabel)) + .addContainerGap(107, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + +private void skipNSRLCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_skipNSRLCheckBoxActionPerformed + KeywordSearchIngestModule.getDefault().setSkipKnown(skipNSRLCheckBox.isSelected()); +}//GEN-LAST:event_skipNSRLCheckBoxActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel chunksLabel; + private javax.swing.JLabel chunksValLabel; + private javax.swing.JLabel filesIndexedLabel; + private javax.swing.JLabel filesIndexedValue; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JSeparator jSeparator3; + private javax.swing.ButtonGroup langButtonGroup; + private javax.swing.JCheckBox skipNSRLCheckBox; + // End of variables declaration//GEN-END:variables + + private void customizeComponents() { + this.skipNSRLCheckBox.setSelected(KeywordSearchIngestModule.getDefault().getSkipKnown()); + + try { + filesIndexedValue.setText(Integer.toString(KeywordSearch.getServer().queryNumIndexedFiles())); + chunksValLabel.setText(Integer.toString(KeywordSearch.getServer().queryNumIndexedChunks())); + } catch (SolrServerException ex) { + logger.log(Level.WARNING, "Could not get number of indexed files/chunks"); + + } catch (NoOpenCoreException ex) { + logger.log(Level.WARNING, "Could not get number of indexed files/chunks"); + } + + KeywordSearch.changeSupport.addPropertyChangeListener(KeywordSearch.NUM_FILES_CHANGE_EVT, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + String changed = evt.getPropertyName(); + Object newValue = evt.getNewValue(); + + if (changed.equals(KeywordSearch.NUM_FILES_CHANGE_EVT)) { + int newFilesIndexed = ((Integer) newValue).intValue(); + filesIndexedValue.setText(Integer.toString(newFilesIndexed)); + try { + chunksValLabel.setText(Integer.toString(KeywordSearch.getServer().queryNumIndexedChunks())); + } catch (SolrServerException ex) { + logger.log(Level.WARNING, "Could not get number of indexed chunks"); + + } catch (NoOpenCoreException ex) { + logger.log(Level.WARNING, "Could not get number of indexed chunks"); + } + + } + } + }); + + + } +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.form index b0b6ab85f6..6384638a0a 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.form @@ -18,13 +18,11 @@ - - - - - - + + + + @@ -34,7 +32,8 @@ - + + @@ -56,12 +55,12 @@ - + - + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.java index 904b62748a..c0db69649d 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchConfigurationPanel3.java @@ -1,180 +1,180 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.sleuthkit.autopsy.keywordsearch; - -import java.awt.Graphics; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; -import javax.swing.JCheckBox; -import org.sleuthkit.autopsy.coreutils.StringExtract; -import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractUnicodeTable.SCRIPT; -import org.sleuthkit.autopsy.ingest.IngestManager; - -/** - * Advanced configuration panel handling languages config. - */ -public class KeywordSearchConfigurationPanel3 extends javax.swing.JPanel { - - private static KeywordSearchConfigurationPanel3 instance = null; - private final Logger logger = Logger.getLogger(KeywordSearchConfigurationPanel3.class.getName()); - private final Map scripts = new HashMap(); - private ActionListener updateLanguagesAction; - - /** - * Creates new form KeywordSearchConfigurationPanel3 - */ - public KeywordSearchConfigurationPanel3() { - initComponents(); - customizeComponents(); - } - - public static KeywordSearchConfigurationPanel3 getDefault() { - if (instance == null) { - instance = new KeywordSearchConfigurationPanel3(); - } - return instance; - } - - @Override - public void paint(Graphics g) { - super.paint(g); - activateWidgets(); - } - - private void customizeComponents() { - - - updateLanguagesAction = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - List