From b130a5fec8dfbb88f5e5bfd5a97d351d922fb575 Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Sun, 9 Nov 2014 22:36:06 -0500 Subject: [PATCH 1/9] Updated interesting files config panel after training class --- .../interestingitems/Bundle.properties | 31 +- .../modules/interestingitems/FilesSet.java | 2 +- .../interestingitems/FilesSetRulePanel.form | 431 ++++---- .../interestingitems/FilesSetRulePanel.java | 225 ++-- .../InterestingItemDefsPanel.form | 975 +++++++++--------- .../InterestingItemDefsPanel.java | 561 +++++----- 6 files changed, 1039 insertions(+), 1186 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties index 74fbc9b59c..68f5433dc1 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties @@ -8,18 +8,14 @@ InterestingFilesIdentifierJobSettingsPanel.filesSetTable.columnModel.title0=Titl InterestingFilesIdentifierJobSettingsPanel.filesSetTable.columnModel.title3=Title 4 InterestingFilesIdentifierJobSettingsPanel.filesSetTable.columnModel.title2=Title 3 InterestingFilesIdentifierJobSettingsPanel.filesSetTable.columnModel.title1=Title 2 -InterestingItemDefsPanel.newSetButton.text=New Set... -InterestingItemDefsPanel.editSetButton.text=Edit Set... +InterestingItemDefsPanel.newSetButton.text=New Set +InterestingItemDefsPanel.editSetButton.text=Edit Set InterestingItemDefsPanel.deleteSetButton.text=Delete Set -InterestingItemDefsPanel.newRuleButton.text=New Rule... -InterestingItemDefsPanel.editRuleButton.text=Edit Rule... +InterestingItemDefsPanel.newRuleButton.text=New Rule +InterestingItemDefsPanel.editRuleButton.text=Edit Rule InterestingItemDefsPanel.deleteRuleButton.text=Delete Rule -InterestingItemDefsPanel.ruleNameTextField.text= -InterestingItemDefsPanel.setsListLabel.text=Interesting Files Set Definitions: -InterestingItemDefsPanel.selectedSetLabel.text=Selected Set: +InterestingItemDefsPanel.setsListLabel.text=Rule Sets InterestingItemDefsPanel.rulesListLabel.text=Rules: -InterestingItemDefsPanel.selectedRuleLabel.text=Selected Rule: -InterestingItemDefsPanel.setDescPanel.border.title=Description FilesSetPanel.title=Interesting Files Set FilesSetPanel.messages.filesSetsMustBeNamed=Interesting files sets must be named. FilesSetPanel.ignoreKnownFilesCheckbox.text=Ignore Known Files @@ -28,17 +24,13 @@ FilesSetPanel.nameLabel.text=Set Name: FilesSetPanel.descPanel.border.title=Description FilesSetRulePanel.title=Interesting Files Set Rule FilesSetRulePanel.extensionRadioButton.text=Extension Only -FilesSetRulePanel.pathPanel.border.title=With parent path: FilesSetRulePanel.pathRegexCheckBox.text=Regex FilesSetRulePanel.pathTextField.text= FilesSetRulePanel.fullNameRadioButton.text=Full Name FilesSetRulePanel.nameRegexCheckbox.text=Regex -FilesSetRulePanel.namePanel.AccessibleContext.accessibleName=Name -FilesSetRulePanel.namePanel.border.title=Named: FilesSetRulePanel.ruleNameTextField.text= FilesSetRulePanel.nameTextField.text= FilesSetRulePanel.ruleNameLabel.text=Rule Name: -FilesSetRulePanel.typePanel.border.title=Search for: FilesSetRulePanel.messages.filesSetRulesMustBeNamed=Interesting files set rules must be named. FilesSetRulePanel.messages.emptyNameFilter=Interesting files sets rules must have a name for which to search. FilesSetRulePanel.messages.invalidNameRegex=The name regular expression is not valid:\n\n{0} @@ -47,11 +39,9 @@ FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ? FilesSetRulePanel.messages.invalidPathRegex=The path regular expression is not valid:\n\n{0} FilesSetRulePanel.dirsRadioButton.text=Directories FilesSetRulePanel.filesRadioButton.text=Files -InterestingItemDefsPanel.typePanel.border.title=Search for: InterestingItemDefsPanel.bothRadioButton.text=Files and Directories InterestingItemDefsPanel.dirsRadioButton.text=Directories InterestingItemDefsPanel.filesRadioButton.text=Files -InterestingItemDefsPanel.fileNamePanel.border.title=Name InterestingItemDefsPanel.fileNameRegexCheckbox.text=Regex InterestingItemDefsPanel.fileNameExtensionRadioButton.text=Extension Only InterestingItemDefsPanel.fileNameTextField.text= @@ -59,7 +49,16 @@ InterestingItemDefsPanel.fileNameRadioButton.text=File Name FilesSetRulePanel.pathSeparatorInfoLabel.text=Use / as path separator FilesSetRulePanel.filesAndDirsRadioButton.text=Files and Directories InterestingItemDefsPanel.rulePathFilterTextField.text= -InterestingItemDefsPanel.rulePathPanel.border.title=Path InterestingItemDefsPanel.rulePathFilterRegexCheckBox.text=Regex InterestingItemDefsPanel.ignoreKnownFilesCheckbox.text=Ignore Known Files FilesIdentifierIngestJobSettingsPanel.border.title=Select interesting files sets to enable during ingest: +InterestingItemDefsPanel.jLabel1.text=Rule Details +InterestingItemDefsPanel.jLabel2.text=File Type: +InterestingItemDefsPanel.jLabel3.text=Name Pattern +InterestingItemDefsPanel.jLabel4.text=Path Pattern: +InterestingItemDefsPanel.jLabel5.text=Description: +InterestingItemDefsPanel.jLabel6.text=Set Details +FilesSetRulePanel.jLabel1.text=File Type: +FilesSetRulePanel.jLabel2.text=Name Pattern: +FilesSetRulePanel.jLabel3.text=Path Pattern: +InterestingItemDefsPanel.jTextArea1.text=This module allows you to find files that match specified criteria. Each set has a list of rules, which will match on file name and parent path patterns. diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java index 4277e0d9cc..7ed2e470be 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSet.java @@ -228,7 +228,7 @@ final class FilesSet { public String toString() { // This override is designed to provide a display name for use with // javax.swing.DefaultListModel. - return this.ruleName; + return this.ruleName + " (" + fileNameFilter.getTextToMatch() + ")"; } /** diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.form b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.form index 7e4b61da6a..9e7245eafc 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.form @@ -22,19 +22,60 @@ - + - - - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + @@ -46,12 +87,34 @@ - - + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + @@ -72,245 +135,123 @@ - + - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java index 7fed303b2c..a6a8173062 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesSetRulePanel.java @@ -344,75 +344,25 @@ final class FilesSetRulePanel extends javax.swing.JPanel { typeButtonGroup = new javax.swing.ButtonGroup(); ruleNameLabel = new javax.swing.JLabel(); ruleNameTextField = new javax.swing.JTextField(); - namePanel = new javax.swing.JPanel(); - nameRegexCheckbox = new javax.swing.JCheckBox(); - extensionRadioButton = new javax.swing.JRadioButton(); + jLabel1 = new javax.swing.JLabel(); + dirsRadioButton = new javax.swing.JRadioButton(); + filesRadioButton = new javax.swing.JRadioButton(); + filesAndDirsRadioButton = new javax.swing.JRadioButton(); + jLabel2 = new javax.swing.JLabel(); nameTextField = new javax.swing.JTextField(); fullNameRadioButton = new javax.swing.JRadioButton(); - typePanel = new javax.swing.JPanel(); - filesRadioButton = new javax.swing.JRadioButton(); - dirsRadioButton = new javax.swing.JRadioButton(); - filesAndDirsRadioButton = new javax.swing.JRadioButton(); - pathPanel = new javax.swing.JPanel(); - pathRegexCheckBox = new javax.swing.JCheckBox(); + extensionRadioButton = new javax.swing.JRadioButton(); + nameRegexCheckbox = new javax.swing.JCheckBox(); + jLabel3 = new javax.swing.JLabel(); pathTextField = new javax.swing.JTextField(); + pathRegexCheckBox = new javax.swing.JCheckBox(); pathSeparatorInfoLabel = new javax.swing.JLabel(); org.openide.awt.Mnemonics.setLocalizedText(ruleNameLabel, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.ruleNameLabel.text")); // NOI18N ruleNameTextField.setText(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.ruleNameTextField.text")); // NOI18N - namePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.namePanel.border.title"))); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(nameRegexCheckbox, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.nameRegexCheckbox.text")); // NOI18N - - nameButtonGroup.add(extensionRadioButton); - org.openide.awt.Mnemonics.setLocalizedText(extensionRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.extensionRadioButton.text")); // NOI18N - - nameTextField.setText(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.nameTextField.text")); // NOI18N - - nameButtonGroup.add(fullNameRadioButton); - org.openide.awt.Mnemonics.setLocalizedText(fullNameRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.fullNameRadioButton.text")); // NOI18N - - javax.swing.GroupLayout namePanelLayout = new javax.swing.GroupLayout(namePanel); - namePanel.setLayout(namePanelLayout); - namePanelLayout.setHorizontalGroup( - namePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(namePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(namePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(namePanelLayout.createSequentialGroup() - .addComponent(fullNameRadioButton) - .addGap(10, 10, 10) - .addComponent(extensionRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(nameRegexCheckbox) - .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(nameTextField)) - .addContainerGap()) - ); - namePanelLayout.setVerticalGroup( - namePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(namePanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(namePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(fullNameRadioButton) - .addComponent(extensionRadioButton) - .addComponent(nameRegexCheckbox)) - .addContainerGap()) - ); - - typePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.typePanel.border.title"))); // NOI18N - - typeButtonGroup.add(filesRadioButton); - org.openide.awt.Mnemonics.setLocalizedText(filesRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.filesRadioButton.text")); // NOI18N - filesRadioButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - filesRadioButtonActionPerformed(evt); - } - }); + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.jLabel1.text")); // NOI18N typeButtonGroup.add(dirsRadioButton); org.openide.awt.Mnemonics.setLocalizedText(dirsRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.dirsRadioButton.text")); // NOI18N @@ -422,6 +372,14 @@ final class FilesSetRulePanel extends javax.swing.JPanel { } }); + typeButtonGroup.add(filesRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(filesRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.filesRadioButton.text")); // NOI18N + filesRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + filesRadioButtonActionPerformed(evt); + } + }); + typeButtonGroup.add(filesAndDirsRadioButton); org.openide.awt.Mnemonics.setLocalizedText(filesAndDirsRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.filesAndDirsRadioButton.text")); // NOI18N filesAndDirsRadioButton.addActionListener(new java.awt.event.ActionListener() { @@ -430,80 +388,72 @@ final class FilesSetRulePanel extends javax.swing.JPanel { } }); - javax.swing.GroupLayout typePanelLayout = new javax.swing.GroupLayout(typePanel); - typePanel.setLayout(typePanelLayout); - typePanelLayout.setHorizontalGroup( - typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(typePanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(filesRadioButton) - .addGap(18, 18, 18) - .addComponent(dirsRadioButton) - .addGap(18, 18, 18) - .addComponent(filesAndDirsRadioButton) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - typePanelLayout.setVerticalGroup( - typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(typePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(filesRadioButton) - .addComponent(dirsRadioButton) - .addComponent(filesAndDirsRadioButton)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.jLabel2.text")); // NOI18N - pathPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.pathPanel.border.title"))); // NOI18N + nameTextField.setText(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.nameTextField.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(pathRegexCheckBox, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.pathRegexCheckBox.text")); // NOI18N + nameButtonGroup.add(fullNameRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(fullNameRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.fullNameRadioButton.text")); // NOI18N + + nameButtonGroup.add(extensionRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(extensionRadioButton, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.extensionRadioButton.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(nameRegexCheckbox, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.nameRegexCheckbox.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.jLabel3.text")); // NOI18N pathTextField.setText(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.pathTextField.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(pathRegexCheckBox, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.pathRegexCheckBox.text")); // NOI18N + pathSeparatorInfoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/info-icon-16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(pathSeparatorInfoLabel, org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.pathSeparatorInfoLabel.text")); // NOI18N - javax.swing.GroupLayout pathPanelLayout = new javax.swing.GroupLayout(pathPanel); - pathPanel.setLayout(pathPanelLayout); - pathPanelLayout.setHorizontalGroup( - pathPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pathPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pathPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(pathPanelLayout.createSequentialGroup() - .addComponent(pathRegexCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(pathSeparatorInfoLabel)) - .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 283, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - pathPanelLayout.setVerticalGroup( - pathPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pathPanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(pathPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(pathRegexCheckBox) - .addComponent(pathSeparatorInfoLabel)) - .addContainerGap()) - ); - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createSequentialGroup() .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(typePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(namePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(ruleNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(ruleNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 256, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(pathPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + .addComponent(jLabel3) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(pathRegexCheckBox) + .addGap(45, 45, 45) + .addComponent(pathSeparatorInfoLabel)) + .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(ruleNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18)) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addGap(27, 27, 27))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(filesRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(dirsRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(filesAndDirsRadioButton)) + .addComponent(ruleNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(nameTextField)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addGap(78, 78, 78) + .addComponent(fullNameRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(extensionRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nameRegexCheckbox)))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -512,16 +462,31 @@ final class FilesSetRulePanel extends javax.swing.JPanel { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(ruleNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(ruleNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(18, 18, 18) - .addComponent(typePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(dirsRadioButton) + .addComponent(filesRadioButton) + .addComponent(filesAndDirsRadioButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(namePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(pathPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(fullNameRadioButton) + .addComponent(extensionRadioButton) + .addComponent(nameRegexCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel3)) + .addGap(4, 4, 4) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pathSeparatorInfoLabel) + .addComponent(pathRegexCheckBox)) .addContainerGap()) ); - - namePanel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class, "FilesSetRulePanel.namePanel.AccessibleContext.accessibleName")); // NOI18N }// //GEN-END:initComponents private void filesAndDirsRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_filesAndDirsRadioButtonActionPerformed @@ -542,17 +507,17 @@ final class FilesSetRulePanel extends javax.swing.JPanel { private javax.swing.JRadioButton filesAndDirsRadioButton; private javax.swing.JRadioButton filesRadioButton; private javax.swing.JRadioButton fullNameRadioButton; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; private javax.swing.ButtonGroup nameButtonGroup; - private javax.swing.JPanel namePanel; private javax.swing.JCheckBox nameRegexCheckbox; private javax.swing.JTextField nameTextField; - private javax.swing.JPanel pathPanel; private javax.swing.JCheckBox pathRegexCheckBox; private javax.swing.JLabel pathSeparatorInfoLabel; private javax.swing.JTextField pathTextField; private javax.swing.JLabel ruleNameLabel; private javax.swing.JTextField ruleNameTextField; private javax.swing.ButtonGroup typeButtonGroup; - private javax.swing.JPanel typePanel; // End of variables declaration//GEN-END:variables } diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form index 72ecf6835f..8407ea5753 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form @@ -20,539 +20,502 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java index 82121c7ed8..3eddc9236d 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java @@ -106,7 +106,6 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp private void resetComponents() { this.resetRuleComponents(); this.setsListModel.clear(); - this.setNameTextField.setText(""); this.setDescriptionTextArea.setText(""); this.ignoreKnownFilesCheckbox.setSelected(true); this.newSetButton.setEnabled(true); @@ -119,7 +118,6 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp * components. */ private void resetRuleComponents() { - this.ruleNameTextField.setText(""); this.fileNameTextField.setText(""); this.fileNameRadioButton.setSelected(true); this.fileNameRegexCheckbox.setSelected(false); @@ -151,7 +149,6 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp if (selectedSet != null) { // Populate the components that display the properties of the // selected files set. - InterestingItemDefsPanel.this.setNameTextField.setText(selectedSet.getName()); InterestingItemDefsPanel.this.setDescriptionTextArea.setText(selectedSet.getDescription()); InterestingItemDefsPanel.this.ignoreKnownFilesCheckbox.setSelected(selectedSet.ignoresKnownFiles()); @@ -197,7 +194,6 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp // Populate the components that display the properties of the // selected rule. - InterestingItemDefsPanel.this.ruleNameTextField.setText(rule.getName()); InterestingItemDefsPanel.this.fileNameTextField.setText(nameFilter.getTextToMatch()); InterestingItemDefsPanel.this.fileNameRadioButton.setSelected(nameFilter instanceof FilesSet.Rule.FullNameFilter); InterestingItemDefsPanel.this.fileNameExtensionRadioButton.setSelected(nameFilter instanceof FilesSet.Rule.ExtensionFilter); @@ -371,82 +367,43 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp private void initComponents() { fileNameButtonGroup = new javax.swing.ButtonGroup(); - setsListLabel = new javax.swing.JLabel(); + jScrollPane1 = new javax.swing.JScrollPane(); + jPanel1 = new javax.swing.JPanel(); + jLabel6 = new javax.swing.JLabel(); + newRuleButton = new javax.swing.JButton(); + filesRadioButton = new javax.swing.JRadioButton(); + editRuleButton = new javax.swing.JButton(); rulesListLabel = new javax.swing.JLabel(); - setsListScrollPane = new javax.swing.JScrollPane(); - setsList = new javax.swing.JList(); rulesListScrollPane = new javax.swing.JScrollPane(); rulesList = new javax.swing.JList(); - selectedSetLabel = new javax.swing.JLabel(); - ignoreKnownFilesCheckbox = new javax.swing.JCheckBox(); - selectedRuleLabel = new javax.swing.JLabel(); - newSetButton = new javax.swing.JButton(); - editSetButton = new javax.swing.JButton(); - deleteSetButton = new javax.swing.JButton(); - newRuleButton = new javax.swing.JButton(); - editRuleButton = new javax.swing.JButton(); - deleteRuleButton = new javax.swing.JButton(); - separator = new javax.swing.JSeparator(); - setNameTextField = new javax.swing.JTextField(); - ruleNameTextField = new javax.swing.JTextField(); - fileNamePanel = new javax.swing.JPanel(); - fileNameRegexCheckbox = new javax.swing.JCheckBox(); - fileNameExtensionRadioButton = new javax.swing.JRadioButton(); - fileNameTextField = new javax.swing.JTextField(); - fileNameRadioButton = new javax.swing.JRadioButton(); - rulePathPanel = new javax.swing.JPanel(); - rulePathFilterRegexCheckBox = new javax.swing.JCheckBox(); - rulePathFilterTextField = new javax.swing.JTextField(); - setDescPanel = new javax.swing.JPanel(); setDescScrollPanel = new javax.swing.JScrollPane(); setDescriptionTextArea = new javax.swing.JTextArea(); - typePanel = new javax.swing.JPanel(); - filesRadioButton = new javax.swing.JRadioButton(); - dirsRadioButton = new javax.swing.JRadioButton(); + editSetButton = new javax.swing.JButton(); + setsListScrollPane = new javax.swing.JScrollPane(); + setsList = new javax.swing.JList(); + fileNameExtensionRadioButton = new javax.swing.JRadioButton(); + jLabel3 = new javax.swing.JLabel(); + fileNameTextField = new javax.swing.JTextField(); + jLabel5 = new javax.swing.JLabel(); + fileNameRadioButton = new javax.swing.JRadioButton(); + rulePathFilterTextField = new javax.swing.JTextField(); + ignoreKnownFilesCheckbox = new javax.swing.JCheckBox(); + fileNameRegexCheckbox = new javax.swing.JCheckBox(); + separator = new javax.swing.JSeparator(); + setsListLabel = new javax.swing.JLabel(); bothRadioButton = new javax.swing.JRadioButton(); + deleteSetButton = new javax.swing.JButton(); + deleteRuleButton = new javax.swing.JButton(); + newSetButton = new javax.swing.JButton(); + jLabel2 = new javax.swing.JLabel(); + dirsRadioButton = new javax.swing.JRadioButton(); + jLabel1 = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + rulePathFilterRegexCheckBox = new javax.swing.JCheckBox(); + jScrollPane2 = new javax.swing.JScrollPane(); + jTextArea1 = new javax.swing.JTextArea(); - org.openide.awt.Mnemonics.setLocalizedText(setsListLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.setsListLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(rulesListLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulesListLabel.text")); // NOI18N - - setsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - setsListScrollPane.setViewportView(setsList); - - rulesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - rulesListScrollPane.setViewportView(rulesList); - - org.openide.awt.Mnemonics.setLocalizedText(selectedSetLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.selectedSetLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(ignoreKnownFilesCheckbox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.ignoreKnownFilesCheckbox.text")); // NOI18N - ignoreKnownFilesCheckbox.setEnabled(false); - - org.openide.awt.Mnemonics.setLocalizedText(selectedRuleLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.selectedRuleLabel.text")); // NOI18N - - newSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(newSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.newSetButton.text")); // NOI18N - newSetButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - newSetButtonActionPerformed(evt); - } - }); - - editSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(editSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.editSetButton.text")); // NOI18N - editSetButton.setEnabled(false); - editSetButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - editSetButtonActionPerformed(evt); - } - }); - - deleteSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(deleteSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.deleteSetButton.text")); // NOI18N - deleteSetButton.setEnabled(false); - deleteSetButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - deleteSetButtonActionPerformed(evt); - } - }); + org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel6.text")); // NOI18N newRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(newRuleButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.newRuleButton.text")); // NOI18N @@ -457,6 +414,10 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp } }); + filesRadioButton.setSelected(true); + org.openide.awt.Mnemonics.setLocalizedText(filesRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.filesRadioButton.text")); // NOI18N + filesRadioButton.setEnabled(false); + editRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(editRuleButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.editRuleButton.text")); // NOI18N editRuleButton.setEnabled(false); @@ -466,6 +427,75 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp } }); + org.openide.awt.Mnemonics.setLocalizedText(rulesListLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulesListLabel.text")); // NOI18N + + rulesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + rulesListScrollPane.setViewportView(rulesList); + + setDescriptionTextArea.setEditable(false); + setDescriptionTextArea.setBackground(new java.awt.Color(240, 240, 240)); + setDescriptionTextArea.setColumns(20); + setDescriptionTextArea.setLineWrap(true); + setDescriptionTextArea.setRows(2); + setDescScrollPanel.setViewportView(setDescriptionTextArea); + + editSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(editSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.editSetButton.text")); // NOI18N + editSetButton.setEnabled(false); + editSetButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + editSetButtonActionPerformed(evt); + } + }); + + setsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + setsListScrollPane.setViewportView(setsList); + + fileNameButtonGroup.add(fileNameExtensionRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(fileNameExtensionRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameExtensionRadioButton.text")); // NOI18N + fileNameExtensionRadioButton.setEnabled(false); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel3.text")); // NOI18N + + fileNameTextField.setEditable(false); + fileNameTextField.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameTextField.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel5.text")); // NOI18N + + fileNameButtonGroup.add(fileNameRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(fileNameRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameRadioButton.text")); // NOI18N + fileNameRadioButton.setEnabled(false); + + rulePathFilterTextField.setEditable(false); + rulePathFilterTextField.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulePathFilterTextField.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(ignoreKnownFilesCheckbox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.ignoreKnownFilesCheckbox.text")); // NOI18N + ignoreKnownFilesCheckbox.setEnabled(false); + ignoreKnownFilesCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + ignoreKnownFilesCheckboxActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(fileNameRegexCheckbox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameRegexCheckbox.text")); // NOI18N + fileNameRegexCheckbox.setEnabled(false); + + separator.setOrientation(javax.swing.SwingConstants.VERTICAL); + + org.openide.awt.Mnemonics.setLocalizedText(setsListLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.setsListLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(bothRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.bothRadioButton.text")); // NOI18N + bothRadioButton.setEnabled(false); + + deleteSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(deleteSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.deleteSetButton.text")); // NOI18N + deleteSetButton.setEnabled(false); + deleteSetButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + deleteSetButtonActionPerformed(evt); + } + }); + deleteRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.deleteRuleButton.text")); // NOI18N deleteRuleButton.setEnabled(false); @@ -475,146 +505,169 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp } }); - separator.setOrientation(javax.swing.SwingConstants.VERTICAL); + newSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(newSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.newSetButton.text")); // NOI18N + newSetButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + newSetButtonActionPerformed(evt); + } + }); - setNameTextField.setEditable(false); + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel2.text")); // NOI18N - ruleNameTextField.setEditable(false); - ruleNameTextField.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.ruleNameTextField.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(dirsRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.dirsRadioButton.text")); // NOI18N + dirsRadioButton.setEnabled(false); + dirsRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + dirsRadioButtonActionPerformed(evt); + } + }); - fileNamePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNamePanel.border.title"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel1.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(fileNameRegexCheckbox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameRegexCheckbox.text")); // NOI18N - fileNameRegexCheckbox.setEnabled(false); - - fileNameButtonGroup.add(fileNameExtensionRadioButton); - org.openide.awt.Mnemonics.setLocalizedText(fileNameExtensionRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameExtensionRadioButton.text")); // NOI18N - fileNameExtensionRadioButton.setEnabled(false); - - fileNameTextField.setEditable(false); - fileNameTextField.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameTextField.text")); // NOI18N - - fileNameButtonGroup.add(fileNameRadioButton); - org.openide.awt.Mnemonics.setLocalizedText(fileNameRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameRadioButton.text")); // NOI18N - fileNameRadioButton.setEnabled(false); - - javax.swing.GroupLayout fileNamePanelLayout = new javax.swing.GroupLayout(fileNamePanel); - fileNamePanel.setLayout(fileNamePanelLayout); - fileNamePanelLayout.setHorizontalGroup( - fileNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(fileNamePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(fileNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(fileNameTextField) - .addGroup(fileNamePanelLayout.createSequentialGroup() - .addComponent(fileNameRadioButton) - .addGap(10, 10, 10) - .addComponent(fileNameExtensionRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(fileNameRegexCheckbox))) - .addContainerGap()) - ); - fileNamePanelLayout.setVerticalGroup( - fileNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(fileNamePanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(fileNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(fileNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(fileNameRadioButton) - .addComponent(fileNameExtensionRadioButton) - .addComponent(fileNameRegexCheckbox)) - .addContainerGap()) - ); - - rulePathPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulePathPanel.border.title"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel4.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(rulePathFilterRegexCheckBox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulePathFilterRegexCheckBox.text")); // NOI18N rulePathFilterRegexCheckBox.setEnabled(false); - rulePathFilterTextField.setEditable(false); - rulePathFilterTextField.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulePathFilterTextField.text")); // NOI18N + jTextArea1.setBackground(new java.awt.Color(240, 240, 240)); + jTextArea1.setColumns(20); + jTextArea1.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N + jTextArea1.setLineWrap(true); + jTextArea1.setRows(3); + jTextArea1.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jTextArea1.text")); // NOI18N + jTextArea1.setWrapStyleWord(true); + jScrollPane2.setViewportView(jTextArea1); - javax.swing.GroupLayout rulePathPanelLayout = new javax.swing.GroupLayout(rulePathPanel); - rulePathPanel.setLayout(rulePathPanelLayout); - rulePathPanelLayout.setHorizontalGroup( - rulePathPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rulePathPanelLayout.createSequentialGroup() + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() - .addGroup(rulePathPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rulePathFilterRegexCheckBox) - .addComponent(rulePathFilterTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 283, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(setsListLabel) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(setsListScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE) + .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(deleteSetButton))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(10, 10, 10) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rulesListLabel) + .addComponent(jLabel5) + .addComponent(ignoreKnownFilesCheckbox) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel2) + .addComponent(jLabel1)) + .addGap(18, 18, 18) + .addComponent(filesRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(dirsRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(bothRadioButton)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(9, 9, 9) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(2, 2, 2) + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(fileNameRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(fileNameExtensionRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(fileNameRegexCheckbox)) + .addComponent(fileNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rulePathFilterRegexCheckBox) + .addComponent(rulePathFilterTextField))))) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(newRuleButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(editRuleButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(deleteRuleButton)) + .addComponent(setDescScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel6) + .addComponent(rulesListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) ); - rulePathPanelLayout.setVerticalGroup( - rulePathPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(rulePathPanelLayout.createSequentialGroup() + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() - .addComponent(rulePathFilterTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(rulePathFilterRegexCheckBox) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 444, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel6) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(setDescScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(ignoreKnownFilesCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(rulesListLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rulesListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(newRuleButton) + .addComponent(editRuleButton) + .addComponent(deleteRuleButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel1) + .addGap(2, 2, 2) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(filesRadioButton) + .addComponent(dirsRadioButton) + .addComponent(bothRadioButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel3) + .addComponent(fileNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(fileNameRadioButton) + .addComponent(fileNameExtensionRadioButton) + .addComponent(fileNameRegexCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel4) + .addComponent(rulePathFilterTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(rulePathFilterRegexCheckBox)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(setsListLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(newSetButton) + .addComponent(editSetButton) + .addComponent(deleteSetButton)))) .addContainerGap()) ); - setDescPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.setDescPanel.border.title"))); // NOI18N + jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, newRuleButton, newSetButton}); - setDescriptionTextArea.setEditable(false); - setDescriptionTextArea.setColumns(20); - setDescriptionTextArea.setRows(5); - setDescScrollPanel.setViewportView(setDescriptionTextArea); - - javax.swing.GroupLayout setDescPanelLayout = new javax.swing.GroupLayout(setDescPanel); - setDescPanel.setLayout(setDescPanelLayout); - setDescPanelLayout.setHorizontalGroup( - setDescPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(setDescPanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(setDescScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 296, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - setDescPanelLayout.setVerticalGroup( - setDescPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, setDescPanelLayout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(setDescScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) - ); - - typePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.typePanel.border.title"))); // NOI18N - - filesRadioButton.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(filesRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.filesRadioButton.text")); // NOI18N - filesRadioButton.setEnabled(false); - - org.openide.awt.Mnemonics.setLocalizedText(dirsRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.dirsRadioButton.text")); // NOI18N - dirsRadioButton.setEnabled(false); - - org.openide.awt.Mnemonics.setLocalizedText(bothRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.bothRadioButton.text")); // NOI18N - bothRadioButton.setEnabled(false); - - javax.swing.GroupLayout typePanelLayout = new javax.swing.GroupLayout(typePanel); - typePanel.setLayout(typePanelLayout); - typePanelLayout.setHorizontalGroup( - typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(typePanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(filesRadioButton) - .addGap(18, 18, 18) - .addComponent(dirsRadioButton) - .addGap(18, 18, 18) - .addComponent(bothRadioButton) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - typePanelLayout.setVerticalGroup( - typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(typePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(typePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(filesRadioButton) - .addComponent(dirsRadioButton) - .addComponent(bothRadioButton)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); + jScrollPane1.setViewportView(jPanel1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -622,93 +675,15 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addComponent(newSetButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(editSetButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(deleteSetButton)) - .addComponent(setsListLabel) - .addComponent(setsListScrollPane) - .addComponent(ignoreKnownFilesCheckbox) - .addGroup(layout.createSequentialGroup() - .addComponent(selectedSetLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(setNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 208, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(setDescPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addComponent(selectedRuleLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(ruleNameTextField)) - .addComponent(rulesListLabel) - .addComponent(fileNamePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(rulePathPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(newRuleButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(editRuleButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(deleteRuleButton)) - .addComponent(rulesListScrollPane) - .addComponent(typePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 710, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); - - layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, newRuleButton, newSetButton}); - layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(setsListLabel) - .addComponent(rulesListLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(selectedSetLabel) - .addComponent(setNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(setDescPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(ignoreKnownFilesCheckbox)) - .addGroup(layout.createSequentialGroup() - .addComponent(rulesListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(selectedRuleLabel) - .addComponent(ruleNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(16, 16, 16) - .addComponent(typePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(fileNamePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(rulePathPanel, 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.LEADING) - .addComponent(deleteRuleButton) - .addComponent(editRuleButton) - .addComponent(newRuleButton) - .addComponent(deleteSetButton) - .addComponent(editSetButton) - .addComponent(newSetButton))) - .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 474, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 11, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 468, javax.swing.GroupLayout.PREFERRED_SIZE)) ); - - layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, newRuleButton, newSetButton}); - }// //GEN-END:initComponents private void newSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newSetButtonActionPerformed @@ -753,6 +728,14 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp this.replaceFilesSet(oldSet, oldSet.getName(), oldSet.getDescription(), oldSet.ignoresKnownFiles(), rules); }//GEN-LAST:event_deleteRuleButtonActionPerformed + private void ignoreKnownFilesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ignoreKnownFilesCheckboxActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_ignoreKnownFilesCheckboxActionPerformed + + private void dirsRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dirsRadioButtonActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_dirsRadioButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JRadioButton bothRadioButton; private javax.swing.JButton deleteRuleButton; @@ -762,32 +745,34 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp private javax.swing.JButton editSetButton; private javax.swing.ButtonGroup fileNameButtonGroup; private javax.swing.JRadioButton fileNameExtensionRadioButton; - private javax.swing.JPanel fileNamePanel; private javax.swing.JRadioButton fileNameRadioButton; private javax.swing.JCheckBox fileNameRegexCheckbox; private javax.swing.JTextField fileNameTextField; private javax.swing.JRadioButton filesRadioButton; private javax.swing.JCheckBox ignoreKnownFilesCheckbox; + 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 jPanel1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JTextArea jTextArea1; private javax.swing.JButton newRuleButton; private javax.swing.JButton newSetButton; - private javax.swing.JTextField ruleNameTextField; private javax.swing.JCheckBox rulePathFilterRegexCheckBox; private javax.swing.JTextField rulePathFilterTextField; - private javax.swing.JPanel rulePathPanel; private javax.swing.JList rulesList; private javax.swing.JLabel rulesListLabel; private javax.swing.JScrollPane rulesListScrollPane; - private javax.swing.JLabel selectedRuleLabel; - private javax.swing.JLabel selectedSetLabel; private javax.swing.JSeparator separator; - private javax.swing.JPanel setDescPanel; private javax.swing.JScrollPane setDescScrollPanel; private javax.swing.JTextArea setDescriptionTextArea; - private javax.swing.JTextField setNameTextField; private javax.swing.JList setsList; private javax.swing.JLabel setsListLabel; private javax.swing.JScrollPane setsListScrollPane; - private javax.swing.JPanel typePanel; // End of variables declaration//GEN-END:variables } From 0a1380cefbf9487c67460c7501994b6176ae672d Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Tue, 18 Nov 2014 09:13:01 -0500 Subject: [PATCH 2/9] display only a small amount of large text in table view (reg-ripper related crashes), check for null in directory tree (had a crash once), show more relevant content viewer for hash and keyword hits --- .../DataContentViewerArtifact.java | 17 +++++++++++------ .../datamodel/BlackboardArtifactNode.java | 15 ++++++++++++++- .../DirectoryTreeTopComponent.java | 14 ++++++++++++++ 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java index 6f2d396397..4415a3522e 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerArtifact.java @@ -26,25 +26,25 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.logging.Level; - -import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JMenuItem; import javax.swing.JTextPane; import javax.swing.SwingWorker; import org.openide.nodes.Node; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.contentviewers.Utilities; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; +import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.ArtifactStringContent; import org.sleuthkit.datamodel.BlackboardArtifact; +import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; import org.sleuthkit.datamodel.BlackboardAttribute; -import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.Content; -import org.sleuthkit.datamodel.TskException; +import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; +import org.sleuthkit.datamodel.TskException; /** * Instances of this class display the BlackboardArtifacts associated with the Content represented by a Node. @@ -332,7 +332,12 @@ public class DataContentViewerArtifact extends javax.swing.JPanel implements Dat @Override public int isPreferred(Node node) { BlackboardArtifact artifact = node.getLookup().lookup(BlackboardArtifact.class); - if(artifact == null) { + // low priority if node doesn't have an artifact (meaning it was found from normal directory + // browsing, or if the artifact is something that means the user really wants to see the original + // file and not more details about the artifact + if ((artifact == null) || + (artifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) || + (artifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID())) { return 3; } else { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java index df07fe90bc..967ab49d1b 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java @@ -32,6 +32,7 @@ import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; +import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE; import org.sleuthkit.datamodel.Content; @@ -290,7 +291,19 @@ public class BlackboardArtifactNode extends DisplayableItemNode { || attributeTypeID == ATTRIBUTE_TYPE.TSK_DATETIME_START.getTypeID() || attributeTypeID == ATTRIBUTE_TYPE.TSK_DATETIME_END.getTypeID()) { map.put(attribute.getAttributeTypeDisplayName(), ContentUtils.getStringTime(attribute.getValueLong(), associated)); - } else { + } else if (artifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_TOOL_OUTPUT.getTypeID() && + attributeTypeID == ATTRIBUTE_TYPE.TSK_TEXT.getTypeID()) { + /* This was added because the RegRipper output would often cause the UI to + * get a black line accross it and hang if you hovered over large output + * or selected it. This reduces the amount of data in the table. + * Could consider doing this for all fields in the UI. + */ + String value = attribute.getDisplayString(); + if (value.length() > 512) + value = value.substring(0, 512); + map.put(attribute.getAttributeTypeDisplayName(), value); + } + else { map.put(attribute.getAttributeTypeDisplayName(), attribute.getDisplayString()); } } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index c48e1a581d..37a1f41595 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -937,7 +937,13 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } } Node listNode = keywordRootChilds.findChild(listName); + if (listNode == null) { + return; + } Children listChildren = listNode.getChildren(); + if (listChildren == null) { + return; + } treeNode = listChildren.findChild(keywordName); } catch (TskException ex) { logger.log(Level.WARNING, "Error retrieving attributes", ex); //NON-NLS @@ -962,8 +968,16 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } else { Node extractedContent = resultsChilds.findChild(ExtractedContent.NAME); Children extractedChilds = extractedContent.getChildren(); + if (extractedChilds == null) { + return; + } treeNode = extractedChilds.findChild(type.getLabel()); } + + if (treeNode == null) { + return; + } + try { em.setExploredContextAndSelection(treeNode, new Node[]{treeNode}); } catch (PropertyVetoException ex) { From b40efffa510b2d979510d858161fa541a51fd5f9 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Tue, 18 Nov 2014 13:29:39 -0500 Subject: [PATCH 3/9] Added ability to set default process time out from autopsy options pannel --- .../autopsy/core/UserPreferences.java | 37 ++- .../corecomponents/AutopsyOptionsPanel.form | 125 ++++++++-- .../corecomponents/AutopsyOptionsPanel.java | 171 ++++++++++++-- .../autopsy/corecomponents/Bundle.properties | 14 +- .../corecomponents/Bundle_ja.properties | 214 +++++++++--------- .../sleuthkit/autopsy/coreutils/ExecUtil.java | 31 ++- 6 files changed, 435 insertions(+), 157 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java index aee3bc5217..88492a4e9a 100755 --- a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java +++ b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java @@ -34,6 +34,15 @@ public final class UserPreferences { public static final String HIDE_KNOWN_FILES_IN_VIEWS_TREE = "HideKnownFilesInViewsTree"; //NON-NLS public static final String DISPLAY_TIMES_IN_LOCAL_TIME = "DisplayTimesInLocalTime"; //NON-NLS public static final String NUMBER_OF_FILE_INGEST_THREADS = "NumberOfFileIngestThreads"; //NON-NLS + public static final String PROCESS_TIME_OUT_HOURS = "ProcessTimeOutHours"; //NON-NLS + private static final String TIME_OUT_MODE = "TimeOutMode"; // NON-NLS + + private static final int DEFAULT_PROCESS_TIMEOUT_HR = 48; + public enum SelectedTimeOutMode { + DEFAULT, + NEVER, + CUSTOM + }; // Prevent instantiation. private UserPreferences() { @@ -85,5 +94,31 @@ public final class UserPreferences { public static void setNumberOfFileIngestThreads(int value) { preferences.putInt(NUMBER_OF_FILE_INGEST_THREADS, value); - } + } + + public static int getProcessTimeOutHrs() { + int timeOut = preferences.getInt(PROCESS_TIME_OUT_HOURS, DEFAULT_PROCESS_TIMEOUT_HR); + if (timeOut < 0) + timeOut = 0; + return timeOut; + } + + public static int getDefaultProcessTimeOutHrs() { + return DEFAULT_PROCESS_TIMEOUT_HR; + } + + public static void setProcessTimeOutHrs(int value) { + if (value < 0) + value = 0; + preferences.putInt(PROCESS_TIME_OUT_HOURS, value); + } + + public static SelectedTimeOutMode getTimeOutMode() { + int ordinal = preferences.getInt(TIME_OUT_MODE, SelectedTimeOutMode.NEVER.ordinal()); + return SelectedTimeOutMode.values()[ordinal]; + } + + public static void setTimeOutMode(SelectedTimeOutMode timeOutMode) { + preferences.putInt(TIME_OUT_MODE, timeOutMode.ordinal()); + } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form index 7a4f51e5a6..d47721ed43 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form @@ -6,6 +6,8 @@ + + @@ -42,8 +44,8 @@ - - + + @@ -51,11 +53,25 @@ - - + + + + + + + + + + + + + + + + @@ -63,30 +79,44 @@ - + - + - + - + + + + + + + + + + + + + + + @@ -119,17 +149,17 @@ - + - + - + - + @@ -154,10 +184,10 @@ - + - + @@ -175,10 +205,10 @@ - + - + @@ -202,5 +232,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java index 11e390dbbb..9438bbd792 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java @@ -18,7 +18,9 @@ */ package org.sleuthkit.autopsy.corecomponents; +import java.text.NumberFormat; import javax.swing.DefaultComboBoxModel; +import javax.swing.JFormattedTextField; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.core.UserPreferences; @@ -67,7 +69,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { recommendedFileIngestThreadCount = 1; } numberOfFileIngestThreadsComboBox.setModel(new DefaultComboBoxModel<>(fileIngestThreadCountChoices)); - restartRequiredLabel.setText(NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.restartRequiredLabel.text", recommendedFileIngestThreadCount)); + restartRequiredLabel.setText(NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.restartRequiredLabel.text", recommendedFileIngestThreadCount)); // TODO listen to changes in form fields and call controller.changed() } @@ -81,6 +83,31 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { useLocalTimeRB.setSelected(useLocalTime); useGMTTimeRB.setSelected(!useLocalTime); numberOfFileIngestThreadsComboBox.setSelectedItem(UserPreferences.numberOfFileIngestThreads()); + + UserPreferences.SelectedTimeOutMode storedTimeOutMode = UserPreferences.getTimeOutMode(); + switch (storedTimeOutMode) { + case DEFAULT: + // default time out + jRadioButtonDefaultTimeOut.setSelected(true); + jFormattedTextFieldProcTimeOutHrs.setEditable(false); + int timeOutHrs = UserPreferences.getDefaultProcessTimeOutHrs(); + jFormattedTextFieldProcTimeOutHrs.setValue((long)timeOutHrs); + break; + + case CUSTOM: + // user specified time out + jRadioButtonCustomTimeOut.setSelected(true); + jFormattedTextFieldProcTimeOutHrs.setEditable(true); + timeOutHrs = UserPreferences.getProcessTimeOutHrs(); + jFormattedTextFieldProcTimeOutHrs.setValue((long)timeOutHrs); + break; + + default: + // never time out + jRadioButtonNeverTimeOut.setSelected(true); + jFormattedTextFieldProcTimeOutHrs.setEditable(false); + jFormattedTextFieldProcTimeOutHrs.setValue((long)0); + } } void store() { @@ -89,6 +116,18 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { UserPreferences.setHideKnownFilesInViewsTree(viewsHideKnownCB.isSelected()); UserPreferences.setDisplayTimesInLocalTime(useLocalTimeRB.isSelected()); UserPreferences.setNumberOfFileIngestThreads((Integer) numberOfFileIngestThreadsComboBox.getSelectedItem()); + long timeOutHrs = (long) jFormattedTextFieldProcTimeOutHrs.getValue(); + UserPreferences.setProcessTimeOutHrs((int)timeOutHrs); + + if (jRadioButtonDefaultTimeOut.isSelected()) { + UserPreferences.setTimeOutMode(UserPreferences.SelectedTimeOutMode.DEFAULT); + } + else if (jRadioButtonNeverTimeOut.isSelected()){ + UserPreferences.setTimeOutMode(UserPreferences.SelectedTimeOutMode.NEVER); + } + else if (jRadioButtonCustomTimeOut.isSelected()) { + UserPreferences.setTimeOutMode(UserPreferences.SelectedTimeOutMode.CUSTOM); + } } boolean valid() { @@ -105,18 +144,25 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { buttonGroup1 = new javax.swing.ButtonGroup(); buttonGroup3 = new javax.swing.ButtonGroup(); + buttonGroupProcTimeOut = new javax.swing.ButtonGroup(); useBestViewerRB = new javax.swing.JRadioButton(); keepCurrentViewerRB = new javax.swing.JRadioButton(); - jLabel1 = new javax.swing.JLabel(); - jLabel2 = new javax.swing.JLabel(); + jLabelSelectFile = new javax.swing.JLabel(); + jLabelTimeDisplay = new javax.swing.JLabel(); useLocalTimeRB = new javax.swing.JRadioButton(); useGMTTimeRB = new javax.swing.JRadioButton(); - jLabel3 = new javax.swing.JLabel(); + jLabelHideKnownFiles = new javax.swing.JLabel(); dataSourcesHideKnownCB = new javax.swing.JCheckBox(); viewsHideKnownCB = new javax.swing.JCheckBox(); - jLabel4 = new javax.swing.JLabel(); + jLabelNumThreads = new javax.swing.JLabel(); numberOfFileIngestThreadsComboBox = new javax.swing.JComboBox(); restartRequiredLabel = new javax.swing.JLabel(); + jLabelSetProcessTimeOut = new javax.swing.JLabel(); + jLabelProcessTimeOutUnits = new javax.swing.JLabel(); + jFormattedTextFieldProcTimeOutHrs = new JFormattedTextField(NumberFormat.getIntegerInstance()); + jRadioButtonDefaultTimeOut = new javax.swing.JRadioButton(); + jRadioButtonNeverTimeOut = new javax.swing.JRadioButton(); + jRadioButtonCustomTimeOut = new javax.swing.JRadioButton(); buttonGroup1.add(useBestViewerRB); useBestViewerRB.setSelected(true); @@ -127,9 +173,9 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { org.openide.awt.Mnemonics.setLocalizedText(keepCurrentViewerRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.keepCurrentViewerRB.text")); // NOI18N keepCurrentViewerRB.setToolTipText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabel1.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectFile, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelSelectFile.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabel2.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabelTimeDisplay, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelTimeDisplay.text")); // NOI18N buttonGroup3.add(useLocalTimeRB); useLocalTimeRB.setSelected(true); @@ -138,17 +184,47 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { buttonGroup3.add(useGMTTimeRB); org.openide.awt.Mnemonics.setLocalizedText(useGMTTimeRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useGMTTimeRB.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabel3.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabelHideKnownFiles, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelHideKnownFiles.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(dataSourcesHideKnownCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.dataSourcesHideKnownCB.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(viewsHideKnownCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.viewsHideKnownCB.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabel4.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabelNumThreads, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelNumThreads.text")); // NOI18N - restartRequiredLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/warning16.png"))); // NOI18N NON-NLS + restartRequiredLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/warning16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(restartRequiredLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.restartRequiredLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(jLabelSetProcessTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelSetProcessTimeOut.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabelProcessTimeOutUnits, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text")); // NOI18N + + jFormattedTextFieldProcTimeOutHrs.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jFormattedTextFieldProcTimeOutHrs.text")); // NOI18N + + buttonGroupProcTimeOut.add(jRadioButtonDefaultTimeOut); + org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonDefaultTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jRadioButtonDefaultTimeOut.text")); // NOI18N + jRadioButtonDefaultTimeOut.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jRadioButtonDefaultTimeOutActionPerformed(evt); + } + }); + + buttonGroupProcTimeOut.add(jRadioButtonNeverTimeOut); + org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonNeverTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jRadioButtonNeverTimeOut.text")); // NOI18N + jRadioButtonNeverTimeOut.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jRadioButtonNeverTimeOutActionPerformed(evt); + } + }); + + buttonGroupProcTimeOut.add(jRadioButtonCustomTimeOut); + org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonCustomTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jRadioButtonCustomTimeOut.text")); // NOI18N + jRadioButtonCustomTimeOut.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jRadioButtonCustomTimeOutActionPerformed(evt); + } + }); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -156,7 +232,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel3) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -171,52 +246,100 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addContainerGap()))) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel2) + .addComponent(jLabelHideKnownFiles) + .addComponent(jLabelTimeDisplay) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(useLocalTimeRB) .addComponent(useGMTTimeRB))) - .addComponent(jLabel1) - .addComponent(jLabel4)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addComponent(jLabelSelectFile) + .addComponent(jLabelNumThreads)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jRadioButtonDefaultTimeOut) + .addComponent(jLabelSetProcessTimeOut) + .addGroup(layout.createSequentialGroup() + .addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabelProcessTimeOutUnits)) + .addComponent(jRadioButtonNeverTimeOut) + .addComponent(jRadioButtonCustomTimeOut)) + .addGap(0, 0, Short.MAX_VALUE)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(jLabel1) + .addComponent(jLabelSelectFile) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(useBestViewerRB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(keepCurrentViewerRB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel3) + .addComponent(jLabelHideKnownFiles) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dataSourcesHideKnownCB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(viewsHideKnownCB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel2) + .addComponent(jLabelTimeDisplay) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(useLocalTimeRB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(useGMTTimeRB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel4) + .addComponent(jLabelNumThreads) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(restartRequiredLabel))) + .addComponent(restartRequiredLabel)) + .addGap(18, 18, 18) + .addComponent(jLabelSetProcessTimeOut) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jRadioButtonDefaultTimeOut) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jRadioButtonNeverTimeOut) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jRadioButtonCustomTimeOut) + .addGap(5, 5, 5) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabelProcessTimeOutUnits) + .addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(27, Short.MAX_VALUE)) ); }// //GEN-END:initComponents + + private void jRadioButtonDefaultTimeOutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonDefaultTimeOutActionPerformed + int timeOutSec = UserPreferences.getDefaultProcessTimeOutHrs(); + jFormattedTextFieldProcTimeOutHrs.setValue((long)timeOutSec); + jFormattedTextFieldProcTimeOutHrs.setEditable(false); + }//GEN-LAST:event_jRadioButtonDefaultTimeOutActionPerformed + + private void jRadioButtonNeverTimeOutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonNeverTimeOutActionPerformed + jFormattedTextFieldProcTimeOutHrs.setValue((long)0); + jFormattedTextFieldProcTimeOutHrs.setEditable(false); + }//GEN-LAST:event_jRadioButtonNeverTimeOutActionPerformed + + private void jRadioButtonCustomTimeOutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonCustomTimeOutActionPerformed + jFormattedTextFieldProcTimeOutHrs.setEditable(true); + }//GEN-LAST:event_jRadioButtonCustomTimeOutActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.ButtonGroup buttonGroup1; private javax.swing.ButtonGroup buttonGroup3; + private javax.swing.ButtonGroup buttonGroupProcTimeOut; private javax.swing.JCheckBox dataSourcesHideKnownCB; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private javax.swing.JLabel jLabel4; + private javax.swing.JFormattedTextField jFormattedTextFieldProcTimeOutHrs; + private javax.swing.JLabel jLabelHideKnownFiles; + private javax.swing.JLabel jLabelNumThreads; + private javax.swing.JLabel jLabelProcessTimeOutUnits; + private javax.swing.JLabel jLabelSelectFile; + private javax.swing.JLabel jLabelSetProcessTimeOut; + private javax.swing.JLabel jLabelTimeDisplay; + private javax.swing.JRadioButton jRadioButtonCustomTimeOut; + private javax.swing.JRadioButton jRadioButtonDefaultTimeOut; + private javax.swing.JRadioButton jRadioButtonNeverTimeOut; private javax.swing.JRadioButton keepCurrentViewerRB; private javax.swing.JComboBox numberOfFileIngestThreadsComboBox; private javax.swing.JLabel restartRequiredLabel; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index 752627c572..c09223514b 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -127,16 +127,22 @@ FXVideoPanel.pauseButton.infoLabel.playbackErr=Unable to play video. GstVideoPanel.progress.infoLabel.updateErr=Error updating video progress\: {0} GstVideoPanel.ExtractMedia.progress.buffering=Buffering {0} AboutWindowPanel.actVerboseLogging.text=Activate verbose logging -AutopsyOptionsPanel.jLabel4.text=Number of threads to use for file ingest: AutopsyOptionsPanel.viewsHideKnownCB.text=Views area AutopsyOptionsPanel.dataSourcesHideKnownCB.text=Data Sources area (the directory hierarchy) -AutopsyOptionsPanel.jLabel3.text=Hide known files (i.e. those in the NIST NSRL) in the: AutopsyOptionsPanel.useBestViewerRB.toolTipText=For example, change from Hex to Media when a JPEG is selected. AutopsyOptionsPanel.useBestViewerRB.text=Change to the most specific file viewer AutopsyOptionsPanel.useGMTTimeRB.text=Use GMT AutopsyOptionsPanel.useLocalTimeRB.text=Use local time zone AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=For example, stay in Hex view when a JPEG is selected. AutopsyOptionsPanel.keepCurrentViewerRB.text=Stay on the same file viewer -AutopsyOptionsPanel.jLabel1.text=When selecting a file: -AutopsyOptionsPanel.jLabel2.text=When displaying times: AutopsyOptionsPanel.restartRequiredLabel.text=For this computer, a maximum of {0} file ingest threads should be used. Restart required to take effect. +AutopsyOptionsPanel.jLabelSetProcessTimeOut.text=Process time out: +AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text=Hours +AutopsyOptionsPanel.jLabelSelectFile.text=When selecting a file: +AutopsyOptionsPanel.jLabelHideKnownFiles.text=Hide known files (i.e. those in the NIST NSRL) in the: +AutopsyOptionsPanel.jLabelTimeDisplay.text=When displaying times: +AutopsyOptionsPanel.jLabelNumThreads.text=Number of threads to use for file ingest: +AutopsyOptionsPanel.jFormattedTextFieldProcTimeOutHrs.text=48 +AutopsyOptionsPanel.jRadioButtonDefaultTimeOut.text=Use default time out +AutopsyOptionsPanel.jRadioButtonNeverTimeOut.text=Never time out +AutopsyOptionsPanel.jRadioButtonCustomTimeOut.text=Custom time out diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties index 159ab9e542..e5e1d9762c 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties @@ -1,124 +1,126 @@ -CTL_DataContentAction=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4 +CTL_DataContentAction=\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4 OptionsCategory_Name_General=Autopsy -OptionsCategory_Keywords_General=Autopsy\u30AA\u30D7\u30B7\u30E7\u30F3 -CTL_CustomAboutAction=Autopsy\u306B\u3064\u3044\u3066 -CTL_DataContentTopComponent=\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4 -HINT_DataContentTopComponent=\u3053\u308C\u306F\u30C7\u30FC\u30BF\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059 -HINT_NodeTableTopComponent=\u3053\u308C\u306F\u30C7\u30FC\u30BF\u7D50\u679C\u306E\u30A6\u30A3\u30F3\u30C9\u30A6\u3067\u3059 -OpenIDE-Module-Name=\u4E3B\u8981\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8 -DataContentViewerHex.pageLabel.text_1=\u30DA\u30FC\u30B8\uFF1A +OptionsCategory_Keywords_General=Autopsy\u30aa\u30d7\u30b7\u30e7\u30f3 +CTL_CustomAboutAction=Autopsy\u306b\u3064\u3044\u3066 +CTL_DataContentTopComponent=\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4 +HINT_DataContentTopComponent=\u3053\u308c\u306f\u30c7\u30fc\u30bf\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059 +HINT_NodeTableTopComponent=\u3053\u308c\u306f\u30c7\u30fc\u30bf\u7d50\u679c\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059 +OpenIDE-Module-Name=\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 +DataContentViewerHex.pageLabel.text_1=\u30da\u30fc\u30b8\uff1a DataContentViewerHex.currentPageLabel.text_1=1 DataContentViewerHex.totalPageLabel.text_1=100 -DataContentViewerString.pageLabel.text_1=\u30DA\u30FC\u30B8\uFF1A +DataContentViewerString.pageLabel.text_1=\u30da\u30fc\u30b8\uff1a DataContentViewerString.currentPageLabel.text_1=1 DataContentViewerString.totalPageLabel.text_1=100 -DataContentViewerHex.pageLabel2.text=\u30DA\u30FC\u30B8 -DataContentViewerString.pageLabel2.text=\u30DA\u30FC\u30B8 -Format_OperatingSystem_Value={0} \u30D0\u30FC\u30B8\u30E7\u30F3 {1} \u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3 {2} +DataContentViewerHex.pageLabel2.text=\u30da\u30fc\u30b8 +DataContentViewerString.pageLabel2.text=\u30da\u30fc\u30b8 +Format_OperatingSystem_Value={0} \u30d0\u30fc\u30b8\u30e7\u30f3 {1} \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3 {2} URL_ON_IMG=http\://www.sleuthkit.org/ -LBL_Close=\u9589\u3058\u308B -DataContentViewerString.copyMenuItem.text=\u30B3\u30D4\u30FC -DataContentViewerHex.copyMenuItem.text=\u30B3\u30D4\u30FC -DataContentViewerString.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E -DataContentViewerHex.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E +LBL_Close=\u9589\u3058\u308b +DataContentViewerString.copyMenuItem.text=\u30b3\u30d4\u30fc +DataContentViewerHex.copyMenuItem.text=\u30b3\u30d4\u30fc +DataContentViewerString.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e +DataContentViewerHex.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e DataContentViewerArtifact.totalPageLabel.text=100 -DataContentViewerArtifact.pageLabel2.text=\u7D50\u679C +DataContentViewerArtifact.pageLabel2.text=\u7d50\u679c DataContentViewerArtifact.currentPageLabel.text=1 -DataContentViewerArtifact.copyMenuItem.text=\u30B3\u30D4\u30FC -DataContentViewerArtifact.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629E -DataContentViewerArtifact.pageLabel.text=\u7D50\u679C\uFF1A +DataContentViewerArtifact.copyMenuItem.text=\u30b3\u30d4\u30fc +DataContentViewerArtifact.selectAllMenuItem.text=\u3059\u3079\u3066\u9078\u629e +DataContentViewerArtifact.pageLabel.text=\u7d50\u679c\uff1a AdvancedConfigurationDialog.applyButton.text=OK -DataContentViewerString.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A -DataContentViewerHex.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u3078\u79FB\u52D5\uFF1A -DataContentViewerString.languageLabel.text=\u30B9\u30AF\u30EA\u30D7\u30C8\uFF1A -DataContentViewerString.languageCombo.toolTipText=\u30D0\u30A4\u30CA\u30EA\u30B9\u30C8\u30EA\u30F3\u30B0\u306E\u51E6\u7406\uFF08\u62BD\u51FA\u304A\u3088\u3073\u30C7\u30B3\u30FC\u30C9\uFF09\u306B\u4F7F\u7528\u3059\u308B\u8A00\u8A9E -DataResultViewerThumbnail.pageLabel.text=\u30DA\u30FC\u30B8\uFF1A -DataResultViewerThumbnail.pagesLabel.text=\u30DA\u30FC\u30B8\uFF1A -DataResultViewerThumbnail.imagesLabel.text=\u30A4\u30E1\u30FC\u30B8\uFF1A +DataContentViewerString.goToPageLabel.text=\u4e0b\u8a18\u306e\u30da\u30fc\u30b8\u3078\u79fb\u52d5\uff1a +DataContentViewerHex.goToPageLabel.text=\u4e0b\u8a18\u306e\u30da\u30fc\u30b8\u3078\u79fb\u52d5\uff1a +DataContentViewerString.languageLabel.text=\u30b9\u30af\u30ea\u30d7\u30c8\uff1a +DataContentViewerString.languageCombo.toolTipText=\u30d0\u30a4\u30ca\u30ea\u30b9\u30c8\u30ea\u30f3\u30b0\u306e\u51e6\u7406\uff08\u62bd\u51fa\u304a\u3088\u3073\u30c7\u30b3\u30fc\u30c9\uff09\u306b\u4f7f\u7528\u3059\u308b\u8a00\u8a9e +DataResultViewerThumbnail.pageLabel.text=\u30da\u30fc\u30b8\uff1a +DataResultViewerThumbnail.pagesLabel.text=\u30da\u30fc\u30b8\uff1a +DataResultViewerThumbnail.imagesLabel.text=\u30a4\u30e1\u30fc\u30b8\uff1a DataResultViewerThumbnail.imagesRangeLabel.text=- DataResultViewerThumbnail.pageNumLabel.text=- -DataResultViewerThumbnail.goToPageLabel.text=\u4E0B\u8A18\u306E\u30DA\u30FC\u30B8\u306B\u79FB\u52D5\uFF1A -AdvancedConfigurationDialog.cancelButton.text=\u30AD\u30E3\u30F3\u30BB\u30EB -DataResultPanel.directoryTablePath.text=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30D1\u30B9 +DataResultViewerThumbnail.goToPageLabel.text=\u4e0b\u8a18\u306e\u30da\u30fc\u30b8\u306b\u79fb\u52d5\uff1a +AdvancedConfigurationDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb +DataResultPanel.directoryTablePath.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9 DataResultPanel.numberMatchLabel.text=0 -DataResultPanel.matchLabel.text=\u7D50\u679C -MediaViewVideoPanel.pauseButton.text=\u25BA +DataResultPanel.matchLabel.text=\u7d50\u679c +MediaViewVideoPanel.pauseButton.text=\u25ba MediaViewVideoPanel.progressLabel.text=00\:00 -MediaViewVideoPanel.infoLabel.text=\u60C5\u5831 -DataContentViewerArtifact.waitText=\u30C7\u30FC\u30BF\u3092\u53D6\u8FBC\u307F\u304A\u3088\u3073\u6E96\u5099\u4E2D\u3002\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u4E0B\u3055\u3044\u2026 -DataContentViewerArtifact.errorText=\u7D50\u679C\u306E\u53D6\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F -DataContentViewerArtifact.title=\u7D50\u679C -DataContentViewerArtifact.toolTip=\u30D5\u30A1\u30A4\u30EB\u306B\u95A2\u9023\u3059\u308B\u7D50\u679C\u3092\u8868\u793A\u3057\u307E\u3059 -DataContentViewerHex.goToPageTextField.msgDlg=\uFF11\u304B\u3089 {0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044 -DataContentViewerHex.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570 -DataContentViewerHex.setDataView.errorText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306F\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF09 +MediaViewVideoPanel.infoLabel.text=\u60c5\u5831 +DataContentViewerArtifact.waitText=\u30c7\u30fc\u30bf\u3092\u53d6\u8fbc\u307f\u304a\u3088\u3073\u6e96\u5099\u4e2d\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u4e0b\u3055\u3044\u2026 +DataContentViewerArtifact.errorText=\u7d50\u679c\u306e\u53d6\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f +DataContentViewerArtifact.title=\u7d50\u679c +DataContentViewerArtifact.toolTip=\u30d5\u30a1\u30a4\u30eb\u306b\u95a2\u9023\u3059\u308b\u7d50\u679c\u3092\u8868\u793a\u3057\u307e\u3059 +DataContentViewerHex.goToPageTextField.msgDlg=\uff11\u304b\u3089 {0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044 +DataContentViewerHex.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570 +DataContentViewerHex.setDataView.errorText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306f\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff09 DataContentViewerHex.title=HEX -DataContentViewerHex.toolTip=\u30D0\u30A4\u30CA\u30EA\u30B3\u30F3\u30C6\u30F3\u30C4\u3092HEX\u30D5\u30A1\u30A4\u30EB\u3068\u3057\u3066\u8868\u793A\u3057\u3001ASCII\u3068\u3057\u3066\u8868\u793A\u3067\u304D\u308B\u30D0\u30A4\u30C8\u306F\u53F3\u5074\u306B\u8868\u793A\u3057\u307E\u3059\u3002 -DataContentViewerMedia.title=\u30E1\u30C7\u30A3\u30A2 -DataContentViewerMedia.toolTip=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u30DE\u30EB\u30C1\u30E1\u30C7\u30A3\u30A2\u30D5\u30A1\u30A4\u30EB\uFF08\u30A4\u30E1\u30FC\u30B8\u3001\u30D3\u30C7\u30AA\u3001\u30AA\u30FC\u30C7\u30A3\u30AA\uFF09\u3092\u8868\u793A\u3057\u307E\u3059\u3002 -DataContentViewerString.goToPageTextField.msgDlg=\uFF11\u304B\u3089{0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044 -DataContentViewerString.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570 -DataContentViewerString.setDataView.errorText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306F\u8AAD\u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF09 -DataContentViewerString.title=\u30B9\u30C8\u30EA\u30F3\u30B0 -DataContentViewerString.toolTip=\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u62BD\u51FA\u3055\u308C\u305FASCII\u304A\u3088\u3073\u30E6\u30CB\u30B3\u30FC\u30C9\u306E\u30B9\u30C8\u30EA\u30F3\u30B0\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002 -DataResultPanel.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026 -DataResultViewerTable.firstColLbl=\u540D\u524D -DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5B9A\u3055\u308C\u305F\u30DA\u30A2\u30EC\u30F3\u30C8\u304B\u3089\u30C1\u30E3\u30A4\u30EB\u30C9\u30CE\u30FC\u30C9\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 -DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u30C1\u30E3\u30A4\u30EB\u30C9\u30CE\u30FC\u30C9\u306F\u901A\u5E38\u306EPropertySet\u3092\u6301\u3063\u3066\u3044\u307E\u305B\u3093\u3002 -DataResultViewerTable.title=\u30C6\u30FC\u30D6\u30EB -DataResultViewerTable.dummyNodeDisplayName=\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u2026 -DataResultViewerThumbnail.title=\u30B5\u30E0\u30CD\u30A4\u30EB -DataResultViewerThumbnail.goToPageTextField.msgDlg=\uFF11\u304B\u3089{0}\u306E\u9593\u306E\u6709\u52B9\u306A\u30DA\u30FC\u30B8\u6570\u3092\u5165\u529B\u3057\u3066\u4E0B\u3055\u3044 -DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52B9\u306A\u30DA\u30FC\u30B8\u6570 -DataResultViewerThumbnail.genThumbs=\u30B5\u30E0\u30CD\u30A4\u30EB\u3092\u4F5C\u6210\u4E2D\u2026 -DataResultViewerThumbnail.pageNumbers.curOfTotal={0}\uFF0F{1}\u3064\u76EE -FXVideoPanel.mediaPane.infoLabel=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002 -FXVideoPanel.progress.bufferingFile={0}\u3092\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0 -FXVideoPanel.progressLabel.buffering=\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D\u2026 -FXVideoPanel.media.unsupportedFormat=\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3067\u3059\u3002 -GeneralOptionsPanelController.moduleErr=\u30E2\u30B8\u30E5\u30FC\u30EB\u30A8\u30E9\u30FC -GeneralOptionsPanelController.moduleErr.msg=GeneralOptionsPanelController\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3092\u78BA\u8A8D\u4E2D\u306B\u30E2\u30B8\u30E5\u30FC\u30EB\u304C\u30A8\u30E9\u30FC\u3092\u8D77\u3053\u3057\u307E\u3057\u305F\u3002\u3069\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u30ED\u30B0\u3067\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002\u4E00\u90E8\u306E\u30C7\u30FC\u30BF\u304C\u4E0D\u5B8C\u5168\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 -GstVideoPanel.cannotProcFile.err=\u30E1\u30C7\u30A4\u30A2\u30D7\u30EC\u30FC\u30E4\u30FC\u304C\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u51E6\u7406\u3067\u304D\u307E\u305B\u3093\u3002 -GstVideoPanel.initGst.gstException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002 -GstVideoPanel.initGst.otherException.msg=\u30AA\u30FC\u30C7\u30A3\u30AA\uFF0F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u304A\u3088\u3073\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u306B\u4F7F\u7528\u3059\u308BGStreamer\u306E\u521D\u671F\u5316\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D3\u30C7\u30AA\u304A\u3088\u3073\u30AA\u30FC\u30C7\u30A3\u30AA\u518D\u751F\u304C\u7121\u52B9\u5316\u3055\u308C\u307E\u3059\u3002 -GstVideoPanel.setupVideo.infoLabel.text=\u524A\u9664\u3055\u308C\u305F\u30D3\u30C7\u30AA\u306E\u518D\u751F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5916\u90E8\u30D7\u30EC\u30FC\u30E4\u30FC\u3092\u4F7F\u7528\u3057\u3066\u4E0B\u3055\u3044\u3002 -GstVideoPanel.exception.problemFile.msg=\u30D5\u30A1\u30A4\u30EB({0})\u304B\u3089\u306F\u30D5\u30EC\u30FC\u30E0\u3092\u62BD\u51FA\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 -GstVideoPanel.exception.problemPlay.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u9577\u3055\u3092\u78BA\u8A8D\u4E2D\u306B\u518D\u751F\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 -LBL_Description=
\n \u88FD\u54C1\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A {0} ({9})
Sleuth Kit\u30D0\u30FC\u30B8\u30E7\u30F3\uFF1A {7}
Netbeans RCP\u30D3\u30EB\u30C9\: {8}
Java\: {1}; {2}
\u30B7\u30B9\u30C6\u30E0\uFF1A {3}; {4}; {5}
\u30E6\u30FC\u30B6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D {6}
-LBL_Copyright=
Autopsy™\u306FSleuth Kit™\u3084\u305D\u306E\u4ED6\u30C4\u30FC\u30EB\u3092\u57FA\u306B\u3057\u305F\u30C7\u30B8\u30BF\u30EB\u30FB\u30D5\u30A9\u30EC\u30F3\u30B8\u30C3\u30AF\u30FB\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3067\u3059\u3002

Copyright © 2003-2013. \u8A73\u7D30\u306F\u4E0B\u8A18\u3092\u3054\u89A7\u4E0B\u3055\u3044\u3002 http\://www.sleuthkit.org.
-GstVideoPanel.exception.problemPause.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u9577\u3055\u3092\u78BA\u8A8D\u4E2D\u306B\u4E00\u6642\u505C\u6B62\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 -GstVideoPanel.exception.problemPauseCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u4E00\u6642\u505C\u6B62\u3092\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 -GstVideoPanel.exception.problemPlayCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u518D\u751F\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 -GstVideoPanel.exception.problemStopCaptFrame.msg=\u30D3\u30C7\u30AA\u30D5\u30A1\u30A4\u30EB\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u30D5\u30EC\u30FC\u30E0\u306E\u62BD\u51FA\u4E2D\u306B\u505C\u6B62\u3057\u3088\u3046\u3068\u3057\u305F\u969B\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 -GstVideoPanel.progress.buffering=\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D\u2026 -GstVideoPanel.progressLabel.bufferingErr=\u30D5\u30A1\u30A4\u30EB\u306E\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u30A8\u30E9\u30FC -MediaViewImagePanel.imgFileTooLarge.msg=\u30A4\u30E1\u30FC\u30B8\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5927\u304D\u3059\u304E\u3067\u3059\uFF09\uFF1A {0} -ProductInformationPanel.verbLoggingEnabled.text=Verbose\u30ED\u30B0\u304C\u6709\u52B9\u3067\u3059 -ProductInformationPanel.propertyUnknown.text=\u4E0D\u660E +DataContentViewerHex.toolTip=\u30d0\u30a4\u30ca\u30ea\u30b3\u30f3\u30c6\u30f3\u30c4\u3092HEX\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u8868\u793a\u3057\u3001ASCII\u3068\u3057\u3066\u8868\u793a\u3067\u304d\u308b\u30d0\u30a4\u30c8\u306f\u53f3\u5074\u306b\u8868\u793a\u3057\u307e\u3059\u3002 +DataContentViewerMedia.title=\u30e1\u30c7\u30a3\u30a2 +DataContentViewerMedia.toolTip=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u30de\u30eb\u30c1\u30e1\u30c7\u30a3\u30a2\u30d5\u30a1\u30a4\u30eb\uff08\u30a4\u30e1\u30fc\u30b8\u3001\u30d3\u30c7\u30aa\u3001\u30aa\u30fc\u30c7\u30a3\u30aa\uff09\u3092\u8868\u793a\u3057\u307e\u3059\u3002 +DataContentViewerString.goToPageTextField.msgDlg=\uff11\u304b\u3089{0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044 +DataContentViewerString.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570 +DataContentViewerString.setDataView.errorText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306f\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff09 +DataContentViewerString.title=\u30b9\u30c8\u30ea\u30f3\u30b0 +DataContentViewerString.toolTip=\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u62bd\u51fa\u3055\u308c\u305fASCII\u304a\u3088\u3073\u30e6\u30cb\u30b3\u30fc\u30c9\u306e\u30b9\u30c8\u30ea\u30f3\u30b0\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002 +DataResultPanel.dummyNodeDisplayName=\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u2026 +DataResultViewerTable.firstColLbl=\u540d\u524d +DataResultViewerTable.illegalArgExc.noChildFromParent=\u6307\u5b9a\u3055\u308c\u305f\u30da\u30a2\u30ec\u30f3\u30c8\u304b\u3089\u30c1\u30e3\u30a4\u30eb\u30c9\u30ce\u30fc\u30c9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +DataResultViewerTable.illegalArgExc.childWithoutPropertySet=\u30c1\u30e3\u30a4\u30eb\u30c9\u30ce\u30fc\u30c9\u306f\u901a\u5e38\u306ePropertySet\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\u3002 +DataResultViewerTable.title=\u30c6\u30fc\u30d6\u30eb +DataResultViewerTable.dummyNodeDisplayName=\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u2026 +DataResultViewerThumbnail.title=\u30b5\u30e0\u30cd\u30a4\u30eb +DataResultViewerThumbnail.goToPageTextField.msgDlg=\uff11\u304b\u3089{0}\u306e\u9593\u306e\u6709\u52b9\u306a\u30da\u30fc\u30b8\u6570\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044 +DataResultViewerThumbnail.goToPageTextField.err=\u7121\u52b9\u306a\u30da\u30fc\u30b8\u6570 +DataResultViewerThumbnail.genThumbs=\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u4f5c\u6210\u4e2d\u2026 +DataResultViewerThumbnail.pageNumbers.curOfTotal={0}\uff0f{1}\u3064\u76ee +FXVideoPanel.mediaPane.infoLabel=\u524a\u9664\u3055\u308c\u305f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u4e0b\u3055\u3044\u3002 +FXVideoPanel.progress.bufferingFile={0}\u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0 +FXVideoPanel.progressLabel.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u2026 +FXVideoPanel.media.unsupportedFormat=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u3059\u3002 +GeneralOptionsPanelController.moduleErr=\u30e2\u30b8\u30e5\u30fc\u30eb\u30a8\u30e9\u30fc +GeneralOptionsPanelController.moduleErr.msg=GeneralOptionsPanelController\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u78ba\u8a8d\u4e2d\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30a8\u30e9\u30fc\u3092\u8d77\u3053\u3057\u307e\u3057\u305f\u3002\u3069\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u304b\u30ed\u30b0\u3067\u78ba\u8a8d\u3057\u3066\u4e0b\u3055\u3044\u3002\u4e00\u90e8\u306e\u30c7\u30fc\u30bf\u304c\u4e0d\u5b8c\u5168\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002 +GstVideoPanel.cannotProcFile.err=\u30e1\u30c7\u30a4\u30a2\u30d7\u30ec\u30fc\u30e4\u30fc\u304c\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002 +GstVideoPanel.initGst.gstException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa\uff0f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u304a\u3088\u3073\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u306b\u4f7f\u7528\u3059\u308bGStreamer\u306e\u521d\u671f\u5316\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d3\u30c7\u30aa\u304a\u3088\u3073\u30aa\u30fc\u30c7\u30a3\u30aa\u518d\u751f\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002 +GstVideoPanel.initGst.otherException.msg=\u30aa\u30fc\u30c7\u30a3\u30aa\uff0f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u304a\u3088\u3073\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u306b\u4f7f\u7528\u3059\u308bGStreamer\u306e\u521d\u671f\u5316\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d3\u30c7\u30aa\u304a\u3088\u3073\u30aa\u30fc\u30c7\u30a3\u30aa\u518d\u751f\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3059\u3002 +GstVideoPanel.setupVideo.infoLabel.text=\u524a\u9664\u3055\u308c\u305f\u30d3\u30c7\u30aa\u306e\u518d\u751f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u5916\u90e8\u30d7\u30ec\u30fc\u30e4\u30fc\u3092\u4f7f\u7528\u3057\u3066\u4e0b\u3055\u3044\u3002 +GstVideoPanel.exception.problemFile.msg=\u30d5\u30a1\u30a4\u30eb({0})\u304b\u3089\u306f\u30d5\u30ec\u30fc\u30e0\u3092\u62bd\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +GstVideoPanel.exception.problemPlay.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u9577\u3055\u3092\u78ba\u8a8d\u4e2d\u306b\u518d\u751f\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +LBL_Description=
\n \u88fd\u54c1\u30d0\u30fc\u30b8\u30e7\u30f3\uff1a {0} ({9})
Sleuth Kit\u30d0\u30fc\u30b8\u30e7\u30f3\uff1a {7}
Netbeans RCP\u30d3\u30eb\u30c9\: {8}
Java\: {1}; {2}
\u30b7\u30b9\u30c6\u30e0\uff1a {3}; {4}; {5}
\u30e6\u30fc\u30b6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u540d {6}
+LBL_Copyright=
Autopsy™\u306fSleuth Kit™\u3084\u305d\u306e\u4ed6\u30c4\u30fc\u30eb\u3092\u57fa\u306b\u3057\u305f\u30c7\u30b8\u30bf\u30eb\u30fb\u30d5\u30a9\u30ec\u30f3\u30b8\u30c3\u30af\u30fb\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u3002

Copyright © 2003-2013. \u8a73\u7d30\u306f\u4e0b\u8a18\u3092\u3054\u89a7\u4e0b\u3055\u3044\u3002 http\://www.sleuthkit.org.
+GstVideoPanel.exception.problemPause.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u9577\u3055\u3092\u78ba\u8a8d\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +GstVideoPanel.exception.problemPauseCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u4e00\u6642\u505c\u6b62\u3092\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +GstVideoPanel.exception.problemPlayCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u518d\u751f\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +GstVideoPanel.exception.problemStopCaptFrame.msg=\u30d3\u30c7\u30aa\u30d5\u30a1\u30a4\u30eb\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d5\u30ec\u30fc\u30e0\u306e\u62bd\u51fa\u4e2d\u306b\u505c\u6b62\u3057\u3088\u3046\u3068\u3057\u305f\u969b\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 +GstVideoPanel.progress.buffering=\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d\u2026 +GstVideoPanel.progressLabel.bufferingErr=\u30d5\u30a1\u30a4\u30eb\u306e\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u30a8\u30e9\u30fc +MediaViewImagePanel.imgFileTooLarge.msg=\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\uff08\u5927\u304d\u3059\u304e\u3067\u3059\uff09\uff1a {0} +ProductInformationPanel.verbLoggingEnabled.text=Verbose\u30ed\u30b0\u304c\u6709\u52b9\u3067\u3059 +ProductInformationPanel.propertyUnknown.text=\u4e0d\u660e ProductInformationPanel.getVMValue.text={0} {1} -TableFilterNode.displayName.text=\u540D\u524D +TableFilterNode.displayName.text=\u540d\u524d DataContentViewerHex.ofLabel.text_1=of DataContentViewerString.ofLabel.text_1=of DataContentViewerArtifact.ofLabel.text=of -DataContentViewerString.setDataView.errorNoText=\uFF08\u30AA\u30D5\u30BB\u30C3\u30C8{0}-{1}\u306B\u306F\u30C6\u30AD\u30B9\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\uFF09 -DataResultViewerThumbnail.comboBox.smallThumbnails=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u5C0F\uFF09 -DataResultViewerThumbnail.comboBox.mediumThumbnails=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u4E2D\uFF09 -DataResultViewerThumbnail.comboBox.largeThumbnails=\u30B5\u30E0\u30CD\u30A4\u30EB\uFF08\u5927\uFF09 -DataResultViewerThumbnail.switchPage.done.errMsg=\u30B5\u30E0\u30CD\u30A4\u30EB\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A {0} -FXVideoPanel.pauseButton.infoLabel.playbackErr=\u518D\u751F\u30A8\u30E9\u30FC\u3002 -GstVideoPanel.progress.infoLabel.updateErr=\u30D3\u30C7\u30AA\u30D7\u30ED\u30B0\u30EC\u30B9\u306E\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\uFF1A {0} -GstVideoPanel.ExtractMedia.progress.buffering={0}\u3092\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D -AboutWindowPanel.actVerboseLogging.text=Verbose\u30ED\u30B0\u3092\u30A2\u30AF\u30C6\u30A3\u30D9\u30FC\u30C8 -AutopsyOptionsPanel.jLabel4.text=\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u306B\u4F7F\u7528\u3059\u308B\u30B9\u30EC\u30C3\u30C9\u6570\uFF1A -AutopsyOptionsPanel.viewsHideKnownCB.text=\u30D3\u30E5\u30FC\u304B\u3089\u9078\u629E\u3057\u3066\u3044\u308B\u5834\u5408 -AutopsyOptionsPanel.dataSourcesHideKnownCB.text=\u30C7\u30FC\u30BF\u30BD\u30FC\u30B9\u30A8\u30EA\u30A2\uFF08\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u968E\u5C64\uFF09 -AutopsyOptionsPanel.jLabel3.text=\u65E2\u77E5\u30D5\u30A1\u30A4\u30EB\uFF08NIST NSRL\u5185\u306E\uFF09\u3092\u4E0B\u8A18\u306B\u96A0\u3059\uFF1A -AutopsyOptionsPanel.useBestViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u5834\u5408\u306B\u306FHEX\u304B\u3089\u30E1\u30C7\u30A3\u30A2\u306B\u5909\u66F4\u3059\u308B\u3002 -AutopsyOptionsPanel.useBestViewerRB.text=\u6700\u3082\u5C02\u9580\u7684\u306A\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u306B\u5909\u66F4 -AutopsyOptionsPanel.useGMTTimeRB.text=GMT\u3092\u4F7F\u7528 -AutopsyOptionsPanel.useLocalTimeRB.text=\u30ED\u30FC\u30AB\u30EB\u30BF\u30A4\u30E0\u30BE\u30FC\u30F3\u3092\u4F7F\u7528 -AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=\u4F8B\u3048\u3070\u3001JPEG\u304C\u9078\u629E\u3055\u308C\u305F\u5834\u5408\u306B\u305D\u306E\u307E\u307EHEX\u30D3\u30E5\u30FC\u3092\u4F7F\u7528\u3002 -AutopsyOptionsPanel.keepCurrentViewerRB.text=\u305D\u306E\u307E\u307E\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u30D3\u30E5\u30FC\u30A2\u3092\u4F7F\u7528 -AutopsyOptionsPanel.jLabel1.text=\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B\u5834\u5408\uFF1A -AutopsyOptionsPanel.jLabel2.text=\u30A2\u30A4\u30C6\u30E0\u3092\u8868\u793A\u3059\u308B\u5834\u5408\uFF1A -AutopsyOptionsPanel.restartRequiredLabel.text=\u3053\u306E\u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u30FC\u3067\u306F\u6700\u5927{0}\u3064\u306E\u30D5\u30A1\u30A4\u30EB\u30A4\u30F3\u30B8\u30A7\u30B9\u30C8\u30B9\u30EC\u30C3\u30C9\u3092\u4F7F\u7528\u3059\u3079\u304D\u3067\u3059\u3002\u6709\u52B9\u306B\u3059\u308B\u306B\u306F\u518D\u8D77\u52D5\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 +DataContentViewerString.setDataView.errorNoText=\uff08\u30aa\u30d5\u30bb\u30c3\u30c8{0}-{1}\u306b\u306f\u30c6\u30ad\u30b9\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\uff09 +DataResultViewerThumbnail.comboBox.smallThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5c0f\uff09 +DataResultViewerThumbnail.comboBox.mediumThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u4e2d\uff09 +DataResultViewerThumbnail.comboBox.largeThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5927\uff09 +DataResultViewerThumbnail.switchPage.done.errMsg=\u30b5\u30e0\u30cd\u30a4\u30eb\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a {0} +FXVideoPanel.pauseButton.infoLabel.playbackErr=\u518d\u751f\u30a8\u30e9\u30fc\u3002 +GstVideoPanel.progress.infoLabel.updateErr=\u30d3\u30c7\u30aa\u30d7\u30ed\u30b0\u30ec\u30b9\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a {0} +GstVideoPanel.ExtractMedia.progress.buffering={0}\u3092\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u4e2d +AboutWindowPanel.actVerboseLogging.text=Verbose\u30ed\u30b0\u3092\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8 +AutopsyOptionsPanel.viewsHideKnownCB.text=\u30d3\u30e5\u30fc\u304b\u3089\u9078\u629e\u3057\u3066\u3044\u308b\u5834\u5408 +AutopsyOptionsPanel.dataSourcesHideKnownCB.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30a8\u30ea\u30a2\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u968e\u5c64\uff09 +AutopsyOptionsPanel.useBestViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u306fHEX\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5909\u66f4\u3059\u308b\u3002 +AutopsyOptionsPanel.useBestViewerRB.text=\u6700\u3082\u5c02\u9580\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u306b\u5909\u66f4 +AutopsyOptionsPanel.useGMTTimeRB.text=GMT\u3092\u4f7f\u7528 +AutopsyOptionsPanel.useLocalTimeRB.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528 +AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u305d\u306e\u307e\u307eHEX\u30d3\u30e5\u30fc\u3092\u4f7f\u7528\u3002 +AutopsyOptionsPanel.keepCurrentViewerRB.text=\u305d\u306e\u307e\u307e\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528 +AutopsyOptionsPanel.restartRequiredLabel.text=\u3053\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u3067\u306f\u6700\u5927{0}\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b9\u30ec\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u3079\u304d\u3067\u3059\u3002\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +AutopsyOptionsPanel.jLabelSetProcessTimeOut.text=\u30a2\u30a4\u30c6\u30e0\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a +AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text=\u30a2\u30a4\u30c6\u30e0\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a +AutopsyOptionsPanel.jLabelSelectFile.text=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5834\u5408\uff1a +AutopsyOptionsPanel.jLabelHideKnownFiles.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\uff08NIST NSRL\u5185\u306e\uff09\u3092\u4e0b\u8a18\u306b\u96a0\u3059\uff1a +AutopsyOptionsPanel.jLabelTimeDisplay.text=\u30a2\u30a4\u30c6\u30e0\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a +AutopsyOptionsPanel.jLabelNumThreads.text=\u30d5\u30a1\u30a4\u30eb\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u306b\u4f7f\u7528\u3059\u308b\u30b9\u30ec\u30c3\u30c9\u6570\uff1a diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java index 7b457f1c67..ce05f6f336 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java @@ -28,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.logging.Level; +import org.sleuthkit.autopsy.core.UserPreferences; /** * Executes a command line using an operating system process with a configurable @@ -159,7 +160,7 @@ public final class ExecUtil { private final long creationTimeSec; // time when TimedProcessTerminator was constructed private final long timeoutSec; // time out value (seconds) - private static final long DEFAULT_TIMEOUT_SEC = 172800; // 48 hours + private final boolean neverTimeOut; // flag that is set if process should never be timed out /** * Constructs a process terminator for an ingest module. Uses default @@ -167,7 +168,18 @@ public final class ExecUtil { */ public TimedProcessTerminator() { creationTimeSec = (new Date().getTime()) / 1000; - timeoutSec = DEFAULT_TIMEOUT_SEC; + long defaultTimeoutSec = UserPreferences.getProcessTimeOutHrs() * 3600; + + // check if user ever wants process to be terminated after time out + if (defaultTimeoutSec > 0) { + neverTimeOut = false; + timeoutSec = defaultTimeoutSec; + } else { + // never time out + logger.log(Level.INFO, "Process will never be terminated due to time out"); // NON-NLS + neverTimeOut = true; + timeoutSec = Long.MAX_VALUE; + } } /** @@ -177,12 +189,16 @@ public final class ExecUtil { */ public TimedProcessTerminator(long userSpecifiedTimeoutSec) { creationTimeSec = (new Date().getTime()) / 1000; - - if (userSpecifiedTimeoutSec > 0) { + long defaultTimeoutSec = UserPreferences.getProcessTimeOutHrs() * 3600; + + // check if user ever wants process to be terminated after time out + if (defaultTimeoutSec > 0 && userSpecifiedTimeoutSec > 0) { timeoutSec = userSpecifiedTimeoutSec; + neverTimeOut = false; } else { - logger.log(Level.WARNING, "Process time out value must be greater than zero. Using default time out instead."); // NON-NLS - timeoutSec = DEFAULT_TIMEOUT_SEC; + neverTimeOut = true; + logger.log(Level.INFO, "Process will never be terminated due to time out"); // NON-NLS + timeoutSec = Long.MAX_VALUE; } } @@ -191,6 +207,9 @@ public final class ExecUtil { */ @Override public boolean shouldTerminateProcess() { + + if (neverTimeOut) + return false; // check if maximum execution time elapsed long currentTimeSec = (new Date().getTime()) / 1000; From 383157fc783d309a041c7439d11e147646dd9cda Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Wed, 19 Nov 2014 13:21:25 -0500 Subject: [PATCH 4/9] Fix error message bug in IngestFactoryModuleLoader class --- .../org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java index 862ba5bcf0..6a6a4ca562 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleFactoryLoader.java @@ -110,7 +110,7 @@ final class IngestModuleFactoryLoader { if (coreFactory != null) { factories.add(coreFactory); } else { - logger.log(Level.SEVERE, "Core factory {0} not loaded", coreFactory); + logger.log(Level.SEVERE, "Core factory {0} not loaded", className); } } From 503e06b49c6c01b20661dde270733848232beefd Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Wed, 19 Nov 2014 15:28:21 -0500 Subject: [PATCH 5/9] Make module firewall catch throwable instead of just exception --- .../sleuthkit/autopsy/ingest/DataSourceIngestPipeline.java | 4 ++-- .../org/sleuthkit/autopsy/ingest/FileIngestPipeline.java | 6 +++--- .../src/org/sleuthkit/autopsy/ingest/IngestModuleError.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestPipeline.java b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestPipeline.java index 702e3b63b4..54d06023ee 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestPipeline.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestPipeline.java @@ -55,7 +55,7 @@ final class DataSourceIngestPipeline { for (DataSourceIngestModuleDecorator module : modules) { try { module.startUp(new IngestJobContext(this.job)); - } catch (Exception ex) { // Catch-all exception firewall + } catch (Throwable ex) { // Catch-all exception firewall errors.add(new IngestModuleError(module.getDisplayName(), ex)); } } @@ -74,7 +74,7 @@ final class DataSourceIngestPipeline { this.job.switchDataSourceIngestProgressBarToIndeterminate(); ingestManager.setIngestTaskProgress(task, module.getDisplayName()); module.process(dataSource, new DataSourceIngestModuleProgress(this.job)); - } catch (Exception ex) { // Catch-all exception firewall + } catch (Throwable ex) { // Catch-all exception firewall errors.add(new IngestModuleError(module.getDisplayName(), ex)); } if (this.job.isCancelled()) { diff --git a/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java b/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java index 795ff0b1b9..329c717d5c 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java @@ -58,7 +58,7 @@ final class FileIngestPipeline { for (FileIngestModuleDecorator module : this.modules) { try { module.startUp(new IngestJobContext(this.job)); - } catch (Exception ex) { // Catch-all exception firewall + } catch (Throwable ex) { // Catch-all exception firewall errors.add(new IngestModuleError(module.getDisplayName(), ex)); } } @@ -79,7 +79,7 @@ final class FileIngestPipeline { try { FileIngestPipeline.ingestManager.setIngestTaskProgress(task, module.getDisplayName()); module.process(file); - } catch (Exception ex) { // Catch-all exception firewall + } catch (Throwable ex) { // Catch-all exception firewall errors.add(new IngestModuleError(module.getDisplayName(), ex)); } if (this.job.isCancelled()) { @@ -99,7 +99,7 @@ final class FileIngestPipeline { for (FileIngestModuleDecorator module : this.modules) { try { module.shutDown(); - } catch (Exception ex) { + } catch (Throwable ex) { // Catch-all exception firewall errors.add(new IngestModuleError(module.getDisplayName(), ex)); } } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleError.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleError.java index 9c9910b405..37e38ff72d 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleError.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleError.java @@ -24,9 +24,9 @@ package org.sleuthkit.autopsy.ingest; */ final class IngestModuleError { private final String moduleDisplayName; - private final Exception error; + private final Throwable error; - IngestModuleError(String moduleDisplayName, Exception error) { + IngestModuleError(String moduleDisplayName, Throwable error) { this.moduleDisplayName = moduleDisplayName; this.error = error; } @@ -35,7 +35,7 @@ final class IngestModuleError { return this.moduleDisplayName; } - Exception getModuleError() { + Throwable getModuleError() { return this.error; } } From c2456c33d851e459d91eae79d30474f16e2b9bee Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Wed, 19 Nov 2014 17:24:34 -0500 Subject: [PATCH 6/9] updated to use TSK Data model HashUtil method for no data hash check --- .../hashdatabase/AddContentToHashDbAction.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/AddContentToHashDbAction.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/AddContentToHashDbAction.java index ce63ab8f85..28efc22d75 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/AddContentToHashDbAction.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/AddContentToHashDbAction.java @@ -27,15 +27,16 @@ import javax.swing.AbstractAction; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; - import org.openide.util.NbBundle; import org.openide.util.Utilities; import org.openide.util.actions.Presenter; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.datamodel.AbstractFile; -import org.sleuthkit.datamodel.TskCoreException; -import static org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.HashDb; import org.sleuthkit.autopsy.ingest.IngestManager; +import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.HashDb; +import static org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager.HashDb; +import org.sleuthkit.datamodel.AbstractFile; +import org.sleuthkit.datamodel.HashUtility; +import org.sleuthkit.datamodel.TskCoreException; /** * Instances of this Action allow users to content to a hash database. @@ -149,7 +150,7 @@ final class AddContentToHashDbAction extends AbstractAction implements Presenter String md5Hash = file.getMd5Hash(); if (null != md5Hash) { // don't let them add the hash for an empty file to the DB - if (md5Hash.toLowerCase().equals("d41d8cd98f00b204e9800998ecf8427e")) { //NON-NLS + if (HashUtility.isNoDataMd5(md5Hash)) { //NON-NLS Logger.getLogger(AddContentToHashDbAction.class.getName()).log(Level.INFO, "Not adding " + file.getName() + " to database (empty content)"); //NON-NLS JOptionPane.showMessageDialog(null, NbBundle.getMessage(this.getClass(), From 86168539039b25fd145891a0b81506e99af412d1 Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Wed, 19 Nov 2014 22:07:12 -0500 Subject: [PATCH 7/9] push IngestSettings into IngestJob --- Core/src/org/sleuthkit/autopsy/ingest/IngestJob.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestJob.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestJob.java index 720c43af46..cd1e6e3480 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestJob.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestJob.java @@ -65,7 +65,7 @@ final class IngestJob { */ private final long id; private final Content dataSource; - private final boolean processUnallocatedSpace; + private final IngestJobSettings ingestJobSettings; private final Object dataSourceIngestPipelineLock; private DataSourceIngestPipeline firstStageDataSourceIngestPipeline; private DataSourceIngestPipeline secondStageDataSourceIngestPipeline; @@ -148,7 +148,7 @@ final class IngestJob { List errors = new ArrayList<>(); if (IngestJob.jobCreationIsEnabled) { long jobId = nextJobId.incrementAndGet(); - IngestJob job = new IngestJob(jobId, dataSource, settings.getProcessUnallocatedSpace()); + IngestJob job = new IngestJob(jobId, dataSource, settings); IngestJob.jobsById.put(jobId, job); errors = job.start(settings.getEnabledIngestModuleTemplates()); if (errors.isEmpty() && job.hasIngestPipeline()) { @@ -200,10 +200,11 @@ final class IngestJob { * @param processUnallocatedSpace Whether or not unallocated space should be * processed during the ingest job. */ - private IngestJob(long id, Content dataSource, boolean processUnallocatedSpace) { + private IngestJob(long id, Content dataSource, IngestJobSettings settings) { this.id = id; this.dataSource = dataSource; - this.processUnallocatedSpace = processUnallocatedSpace; + + this.ingestJobSettings = settings; this.dataSourceIngestPipelineLock = new Object(); this.fileIngestPipelines = new LinkedBlockingQueue<>(); this.filesInProgress = new ArrayList<>(); @@ -239,7 +240,7 @@ final class IngestJob { * @return True or false. */ boolean shouldProcessUnallocatedSpace() { - return this.processUnallocatedSpace; + return this.ingestJobSettings.getProcessUnallocatedSpace(); } /** From 7f8d2dea5d374f5e6494aef1270310ebda1dd02d Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Thu, 20 Nov 2014 21:49:33 -0500 Subject: [PATCH 8/9] Fix warnings in run ingest modules dialog, reports --- .../org/sleuthkit/autopsy/ingest/RunIngestModulesDialog.java | 2 +- .../org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java | 1 + Core/src/org/sleuthkit/autopsy/report/ReportVisualPanel2.java | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestModulesDialog.java b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestModulesDialog.java index 2578f9b35c..f726a1d525 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestModulesDialog.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestModulesDialog.java @@ -128,7 +128,7 @@ public final class RunIngestModulesDialog extends JDialog { * them to create and add an ingest job settings panel. */ IngestJobSettings ingestJobSettings = new IngestJobSettings(RunIngestModulesDialog.class.getCanonicalName()); - this.showWarnings(ingestJobSettings); + RunIngestModulesDialog.showWarnings(ingestJobSettings); this.ingestJobSettingsPanel = new IngestJobSettingsPanel(ingestJobSettings); add(this.ingestJobSettingsPanel, BorderLayout.PAGE_START); diff --git a/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java b/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java index 11ca18705d..e7ba75bfc0 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java +++ b/Core/src/org/sleuthkit/autopsy/report/ArtifactSelectionDialog.java @@ -63,6 +63,7 @@ public class ArtifactSelectionDialog extends javax.swing.JDialog { /** * Populate the list of artifacts with all important artifacts. */ + @SuppressWarnings("deprecation") private void populateList() { try { ArrayList doNotReport = new ArrayList<>(); diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportVisualPanel2.java b/Core/src/org/sleuthkit/autopsy/report/ReportVisualPanel2.java index b5cd0499f8..8e2ef59e77 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportVisualPanel2.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportVisualPanel2.java @@ -105,6 +105,7 @@ final class ReportVisualPanel2 extends JPanel { } // Initialize the list of Artifacts + @SuppressWarnings("deprecation") private void initArtifactTypes() { try { From 2a5691cf12048e10baa389b9216c72409e7760bb Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Thu, 20 Nov 2014 23:39:02 -0500 Subject: [PATCH 9/9] Change timed process terminator implementation for ExecUtils --- .../autopsy/core/UserPreferences.java | 36 +---- .../corecomponents/AutopsyOptionsPanel.form | 94 +------------ .../corecomponents/AutopsyOptionsPanel.java | 127 +---------------- .../autopsy/corecomponents/Bundle.properties | 6 - .../corecomponents/Bundle_ja.properties | 2 - .../sleuthkit/autopsy/coreutils/ExecUtil.java | 128 ++++++------------ ...taSourceIngestModuleProcessTerminator.java | 42 +++--- .../FileIngestModuleProcessTerminator.java | 46 ++++--- 8 files changed, 96 insertions(+), 385 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java index 88492a4e9a..7ce18930a4 100755 --- a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java +++ b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java @@ -34,16 +34,7 @@ public final class UserPreferences { public static final String HIDE_KNOWN_FILES_IN_VIEWS_TREE = "HideKnownFilesInViewsTree"; //NON-NLS public static final String DISPLAY_TIMES_IN_LOCAL_TIME = "DisplayTimesInLocalTime"; //NON-NLS public static final String NUMBER_OF_FILE_INGEST_THREADS = "NumberOfFileIngestThreads"; //NON-NLS - public static final String PROCESS_TIME_OUT_HOURS = "ProcessTimeOutHours"; //NON-NLS - private static final String TIME_OUT_MODE = "TimeOutMode"; // NON-NLS - - private static final int DEFAULT_PROCESS_TIMEOUT_HR = 48; - public enum SelectedTimeOutMode { - DEFAULT, - NEVER, - CUSTOM - }; - + // Prevent instantiation. private UserPreferences() { } @@ -96,29 +87,4 @@ public final class UserPreferences { preferences.putInt(NUMBER_OF_FILE_INGEST_THREADS, value); } - public static int getProcessTimeOutHrs() { - int timeOut = preferences.getInt(PROCESS_TIME_OUT_HOURS, DEFAULT_PROCESS_TIMEOUT_HR); - if (timeOut < 0) - timeOut = 0; - return timeOut; - } - - public static int getDefaultProcessTimeOutHrs() { - return DEFAULT_PROCESS_TIMEOUT_HR; - } - - public static void setProcessTimeOutHrs(int value) { - if (value < 0) - value = 0; - preferences.putInt(PROCESS_TIME_OUT_HOURS, value); - } - - public static SelectedTimeOutMode getTimeOutMode() { - int ordinal = preferences.getInt(TIME_OUT_MODE, SelectedTimeOutMode.NEVER.ordinal()); - return SelectedTimeOutMode.values()[ordinal]; - } - - public static void setTimeOutMode(SelectedTimeOutMode timeOutMode) { - preferences.putInt(TIME_OUT_MODE, timeOutMode.ordinal()); - } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form index d47721ed43..153a137748 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form @@ -24,7 +24,7 @@ - + @@ -58,20 +58,6 @@ - - - - - - - - - - - - - - @@ -103,20 +89,7 @@ - - - - - - - - - - - - - - + @@ -232,68 +205,5 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java index 9438bbd792..5dc357fbc7 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java @@ -18,9 +18,7 @@ */ package org.sleuthkit.autopsy.corecomponents; -import java.text.NumberFormat; import javax.swing.DefaultComboBoxModel; -import javax.swing.JFormattedTextField; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.core.UserPreferences; @@ -32,7 +30,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { AutopsyOptionsPanel(AutopsyOptionsPanelController controller) { initComponents(); int availableProcessors = Runtime.getRuntime().availableProcessors(); - Integer fileIngestThreadCountChoices[] = null; + Integer fileIngestThreadCountChoices[]; int recommendedFileIngestThreadCount; if (availableProcessors >= 16) { fileIngestThreadCountChoices = new Integer[]{1, 2, 4, 6, 8, 12, 16}; @@ -82,32 +80,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { boolean useLocalTime = UserPreferences.displayTimesInLocalTime(); useLocalTimeRB.setSelected(useLocalTime); useGMTTimeRB.setSelected(!useLocalTime); - numberOfFileIngestThreadsComboBox.setSelectedItem(UserPreferences.numberOfFileIngestThreads()); - - UserPreferences.SelectedTimeOutMode storedTimeOutMode = UserPreferences.getTimeOutMode(); - switch (storedTimeOutMode) { - case DEFAULT: - // default time out - jRadioButtonDefaultTimeOut.setSelected(true); - jFormattedTextFieldProcTimeOutHrs.setEditable(false); - int timeOutHrs = UserPreferences.getDefaultProcessTimeOutHrs(); - jFormattedTextFieldProcTimeOutHrs.setValue((long)timeOutHrs); - break; - - case CUSTOM: - // user specified time out - jRadioButtonCustomTimeOut.setSelected(true); - jFormattedTextFieldProcTimeOutHrs.setEditable(true); - timeOutHrs = UserPreferences.getProcessTimeOutHrs(); - jFormattedTextFieldProcTimeOutHrs.setValue((long)timeOutHrs); - break; - - default: - // never time out - jRadioButtonNeverTimeOut.setSelected(true); - jFormattedTextFieldProcTimeOutHrs.setEditable(false); - jFormattedTextFieldProcTimeOutHrs.setValue((long)0); - } + numberOfFileIngestThreadsComboBox.setSelectedItem(UserPreferences.numberOfFileIngestThreads()); } void store() { @@ -116,18 +89,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { UserPreferences.setHideKnownFilesInViewsTree(viewsHideKnownCB.isSelected()); UserPreferences.setDisplayTimesInLocalTime(useLocalTimeRB.isSelected()); UserPreferences.setNumberOfFileIngestThreads((Integer) numberOfFileIngestThreadsComboBox.getSelectedItem()); - long timeOutHrs = (long) jFormattedTextFieldProcTimeOutHrs.getValue(); - UserPreferences.setProcessTimeOutHrs((int)timeOutHrs); - - if (jRadioButtonDefaultTimeOut.isSelected()) { - UserPreferences.setTimeOutMode(UserPreferences.SelectedTimeOutMode.DEFAULT); - } - else if (jRadioButtonNeverTimeOut.isSelected()){ - UserPreferences.setTimeOutMode(UserPreferences.SelectedTimeOutMode.NEVER); - } - else if (jRadioButtonCustomTimeOut.isSelected()) { - UserPreferences.setTimeOutMode(UserPreferences.SelectedTimeOutMode.CUSTOM); - } } boolean valid() { @@ -157,12 +118,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { jLabelNumThreads = new javax.swing.JLabel(); numberOfFileIngestThreadsComboBox = new javax.swing.JComboBox(); restartRequiredLabel = new javax.swing.JLabel(); - jLabelSetProcessTimeOut = new javax.swing.JLabel(); - jLabelProcessTimeOutUnits = new javax.swing.JLabel(); - jFormattedTextFieldProcTimeOutHrs = new JFormattedTextField(NumberFormat.getIntegerInstance()); - jRadioButtonDefaultTimeOut = new javax.swing.JRadioButton(); - jRadioButtonNeverTimeOut = new javax.swing.JRadioButton(); - jRadioButtonCustomTimeOut = new javax.swing.JRadioButton(); buttonGroup1.add(useBestViewerRB); useBestViewerRB.setSelected(true); @@ -195,36 +150,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { restartRequiredLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/corecomponents/warning16.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(restartRequiredLabel, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.restartRequiredLabel.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(jLabelSetProcessTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelSetProcessTimeOut.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabelProcessTimeOutUnits, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text")); // NOI18N - - jFormattedTextFieldProcTimeOutHrs.setText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jFormattedTextFieldProcTimeOutHrs.text")); // NOI18N - - buttonGroupProcTimeOut.add(jRadioButtonDefaultTimeOut); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonDefaultTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jRadioButtonDefaultTimeOut.text")); // NOI18N - jRadioButtonDefaultTimeOut.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jRadioButtonDefaultTimeOutActionPerformed(evt); - } - }); - - buttonGroupProcTimeOut.add(jRadioButtonNeverTimeOut); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonNeverTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jRadioButtonNeverTimeOut.text")); // NOI18N - jRadioButtonNeverTimeOut.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jRadioButtonNeverTimeOutActionPerformed(evt); - } - }); - - buttonGroupProcTimeOut.add(jRadioButtonCustomTimeOut); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonCustomTimeOut, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jRadioButtonCustomTimeOut.text")); // NOI18N - jRadioButtonCustomTimeOut.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jRadioButtonCustomTimeOutActionPerformed(evt); - } - }); - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -255,18 +180,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addComponent(useGMTTimeRB))) .addComponent(jLabelSelectFile) .addComponent(jLabelNumThreads)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jRadioButtonDefaultTimeOut) - .addComponent(jLabelSetProcessTimeOut) - .addGroup(layout.createSequentialGroup() - .addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabelProcessTimeOutUnits)) - .addComponent(jRadioButtonNeverTimeOut) - .addComponent(jRadioButtonCustomTimeOut)) - .addGap(0, 0, Short.MAX_VALUE)))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -294,52 +208,19 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(restartRequiredLabel)) - .addGap(18, 18, 18) - .addComponent(jLabelSetProcessTimeOut) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jRadioButtonDefaultTimeOut) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jRadioButtonNeverTimeOut) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jRadioButtonCustomTimeOut) - .addGap(5, 5, 5) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabelProcessTimeOutUnits) - .addComponent(jFormattedTextFieldProcTimeOutHrs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(27, Short.MAX_VALUE)) + .addContainerGap(155, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - private void jRadioButtonDefaultTimeOutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonDefaultTimeOutActionPerformed - int timeOutSec = UserPreferences.getDefaultProcessTimeOutHrs(); - jFormattedTextFieldProcTimeOutHrs.setValue((long)timeOutSec); - jFormattedTextFieldProcTimeOutHrs.setEditable(false); - }//GEN-LAST:event_jRadioButtonDefaultTimeOutActionPerformed - - private void jRadioButtonNeverTimeOutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonNeverTimeOutActionPerformed - jFormattedTextFieldProcTimeOutHrs.setValue((long)0); - jFormattedTextFieldProcTimeOutHrs.setEditable(false); - }//GEN-LAST:event_jRadioButtonNeverTimeOutActionPerformed - - private void jRadioButtonCustomTimeOutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonCustomTimeOutActionPerformed - jFormattedTextFieldProcTimeOutHrs.setEditable(true); - }//GEN-LAST:event_jRadioButtonCustomTimeOutActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.ButtonGroup buttonGroup1; private javax.swing.ButtonGroup buttonGroup3; private javax.swing.ButtonGroup buttonGroupProcTimeOut; private javax.swing.JCheckBox dataSourcesHideKnownCB; - private javax.swing.JFormattedTextField jFormattedTextFieldProcTimeOutHrs; private javax.swing.JLabel jLabelHideKnownFiles; private javax.swing.JLabel jLabelNumThreads; - private javax.swing.JLabel jLabelProcessTimeOutUnits; private javax.swing.JLabel jLabelSelectFile; - private javax.swing.JLabel jLabelSetProcessTimeOut; private javax.swing.JLabel jLabelTimeDisplay; - private javax.swing.JRadioButton jRadioButtonCustomTimeOut; - private javax.swing.JRadioButton jRadioButtonDefaultTimeOut; - private javax.swing.JRadioButton jRadioButtonNeverTimeOut; private javax.swing.JRadioButton keepCurrentViewerRB; private javax.swing.JComboBox numberOfFileIngestThreadsComboBox; private javax.swing.JLabel restartRequiredLabel; diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index c09223514b..a595cbc1e5 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -136,13 +136,7 @@ AutopsyOptionsPanel.useLocalTimeRB.text=Use local time zone AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=For example, stay in Hex view when a JPEG is selected. AutopsyOptionsPanel.keepCurrentViewerRB.text=Stay on the same file viewer AutopsyOptionsPanel.restartRequiredLabel.text=For this computer, a maximum of {0} file ingest threads should be used. Restart required to take effect. -AutopsyOptionsPanel.jLabelSetProcessTimeOut.text=Process time out: -AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text=Hours AutopsyOptionsPanel.jLabelSelectFile.text=When selecting a file: AutopsyOptionsPanel.jLabelHideKnownFiles.text=Hide known files (i.e. those in the NIST NSRL) in the: AutopsyOptionsPanel.jLabelTimeDisplay.text=When displaying times: AutopsyOptionsPanel.jLabelNumThreads.text=Number of threads to use for file ingest: -AutopsyOptionsPanel.jFormattedTextFieldProcTimeOutHrs.text=48 -AutopsyOptionsPanel.jRadioButtonDefaultTimeOut.text=Use default time out -AutopsyOptionsPanel.jRadioButtonNeverTimeOut.text=Never time out -AutopsyOptionsPanel.jRadioButtonCustomTimeOut.text=Custom time out diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties index e5e1d9762c..2ae9e5fab1 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties @@ -118,8 +118,6 @@ AutopsyOptionsPanel.useLocalTimeRB.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30 AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u305d\u306e\u307e\u307eHEX\u30d3\u30e5\u30fc\u3092\u4f7f\u7528\u3002 AutopsyOptionsPanel.keepCurrentViewerRB.text=\u305d\u306e\u307e\u307e\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528 AutopsyOptionsPanel.restartRequiredLabel.text=\u3053\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u3067\u306f\u6700\u5927{0}\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u30b9\u30ec\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u3079\u304d\u3067\u3059\u3002\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -AutopsyOptionsPanel.jLabelSetProcessTimeOut.text=\u30a2\u30a4\u30c6\u30e0\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a -AutopsyOptionsPanel.jLabelProcessTimeOutUnits.text=\u30a2\u30a4\u30c6\u30e0\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a AutopsyOptionsPanel.jLabelSelectFile.text=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5834\u5408\uff1a AutopsyOptionsPanel.jLabelHideKnownFiles.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\uff08NIST NSRL\u5185\u306e\uff09\u3092\u4e0b\u8a18\u306b\u96a0\u3059\uff1a AutopsyOptionsPanel.jLabelTimeDisplay.text=\u30a2\u30a4\u30c6\u30e0\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java index ce05f6f336..b33231d909 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java @@ -28,7 +28,6 @@ import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.logging.Level; -import org.sleuthkit.autopsy.core.UserPreferences; /** * Executes a command line using an operating system process with a configurable @@ -38,24 +37,53 @@ public final class ExecUtil { private static final long DEFAULT_TIMEOUT = 5; private static final TimeUnit DEFAULT_TIMEOUT_UNITS = TimeUnit.SECONDS; - + /** - * The execute() methods do a wait with a timeout on the executing process - * and query the terminator each time the timeout expires to determine - * whether or not to kill the process or allow it to continue. + * The execute() methods do a wait() with a timeout on the executing process + * and query a process terminator each time the timeout expires to determine + * whether or not to kill the process. */ public interface ProcessTerminator { /** - * An implementation of this interface is called by the run() methods at - * every timeout to determine whether or not to kill the running - * process. + * Decides whether or not to terminate a process being run by a + * ExcUtil.execute() methods. * * @return True or false. */ boolean shouldTerminateProcess(); } + /** + * Process terminator that can be used to kill a processes after it exceeds + * a maximum allowable run time. + */ + public static class TimedProcessTerminator implements ProcessTerminator { + + private final long startTimeInSeconds; + private final long maxRunTimeInSeconds; + + /** + * Creates a process terminator that can be used to kill a process after + * it has run for a given period of time. + * + * @param maxRunTimeInSeconds The maximum allowable run time in seconds. + */ + public TimedProcessTerminator(long maxRunTimeInSeconds) { + this.maxRunTimeInSeconds = maxRunTimeInSeconds; + this.startTimeInSeconds = (new Date().getTime()) / 1000; + } + + /** + * @inheritDoc + */ + @Override + public boolean shouldTerminateProcess() { + long currentTimeInSeconds = (new Date().getTime()) / 1000; + return (currentTimeInSeconds - this.startTimeInSeconds) > this.maxRunTimeInSeconds; + } + } + /** * Runs a process without a timeout and terminator. * @@ -126,13 +154,15 @@ public final class ExecUtil { } /** - * Kill a process and its children + * Kills a process and its children + * * @param process The parent process to kill */ public static void killProcess(Process process) { - if (process == null) + if (process == null) { return; - + } + try { if (PlatformUtil.isWindows()) { Win32Process parentProcess = new Win32Process(process); @@ -142,86 +172,14 @@ public final class ExecUtil { child.terminate(); }); parentProcess.terminate(); - } - else { + } else { process.destroyForcibly(); } - } - catch (Exception ex) { + } catch (Exception ex) { logger.log(Level.WARNING, "Error occurred when attempting to kill process: {0}", ex.getMessage()); // NON-NLS } } - /** - * Timed process terminator that triggers either based on default process time out value - * or user specified time out value. - */ - public static class TimedProcessTerminator implements ProcessTerminator { - - private final long creationTimeSec; // time when TimedProcessTerminator was constructed - private final long timeoutSec; // time out value (seconds) - private final boolean neverTimeOut; // flag that is set if process should never be timed out - - /** - * Constructs a process terminator for an ingest module. Uses default - * process execution timeout value. - */ - public TimedProcessTerminator() { - creationTimeSec = (new Date().getTime()) / 1000; - long defaultTimeoutSec = UserPreferences.getProcessTimeOutHrs() * 3600; - - // check if user ever wants process to be terminated after time out - if (defaultTimeoutSec > 0) { - neverTimeOut = false; - timeoutSec = defaultTimeoutSec; - } else { - // never time out - logger.log(Level.INFO, "Process will never be terminated due to time out"); // NON-NLS - neverTimeOut = true; - timeoutSec = Long.MAX_VALUE; - } - } - - /** - * Constructs a process terminator for an ingest module. - * - * @param userSpecifiedTimeoutSec Process execution timeout value (seconds) - */ - public TimedProcessTerminator(long userSpecifiedTimeoutSec) { - creationTimeSec = (new Date().getTime()) / 1000; - long defaultTimeoutSec = UserPreferences.getProcessTimeOutHrs() * 3600; - - // check if user ever wants process to be terminated after time out - if (defaultTimeoutSec > 0 && userSpecifiedTimeoutSec > 0) { - timeoutSec = userSpecifiedTimeoutSec; - neverTimeOut = false; - } else { - neverTimeOut = true; - logger.log(Level.INFO, "Process will never be terminated due to time out"); // NON-NLS - timeoutSec = Long.MAX_VALUE; - } - } - - /** - * @return true if process should be terminated, false otherwise - */ - @Override - public boolean shouldTerminateProcess() { - - if (neverTimeOut) - return false; - - // check if maximum execution time elapsed - long currentTimeSec = (new Date().getTime()) / 1000; - if (currentTimeSec - creationTimeSec > timeoutSec) { - return true; - } - - return false; - } - } - - /** * EVERYTHING FOLLOWING THIS LINE IS DEPRECATED AND SLATED FOR REMOVAL */ diff --git a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestModuleProcessTerminator.java b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestModuleProcessTerminator.java index 51bcae1e9c..94f1deb972 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestModuleProcessTerminator.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestModuleProcessTerminator.java @@ -18,48 +18,50 @@ */ package org.sleuthkit.autopsy.ingest; -import org.sleuthkit.autopsy.coreutils.ExecUtil; +import org.sleuthkit.autopsy.coreutils.ExecUtil.ProcessTerminator; +import org.sleuthkit.autopsy.coreutils.ExecUtil.TimedProcessTerminator; /** - * A timed process terminator for data source ingest modules. Checks for - * ingest job cancellation as well. + * A process terminator for data source ingest modules that checks for ingest + * job cancellation and optionally checks for process run time in excess of a + * specified maximum. */ -public final class DataSourceIngestModuleProcessTerminator extends ExecUtil.TimedProcessTerminator { +public final class DataSourceIngestModuleProcessTerminator implements ProcessTerminator { + + private final IngestJobContext context; + private TimedProcessTerminator timedTerminator; - public final IngestJobContext context; - /** * Constructs a process terminator for a data source ingest module. - * Uses default process execution timeout value. * * @param context The ingest job context for the ingest module. */ public DataSourceIngestModuleProcessTerminator(IngestJobContext context) { - super(); this.context = context; } /** - * Constructs a process terminator for a data source ingest module. + * Constructs a process terminator for a data source ingest module. * * @param context The ingest job context for the ingest module. - * @param timeoutSec Process execution timeout value (seconds) + * @param maxRunTimeInSeconds Maximum allowable run time of process. */ - public DataSourceIngestModuleProcessTerminator(IngestJobContext context, long timeoutSec) { - super(timeoutSec); - this.context = context; - } - + public DataSourceIngestModuleProcessTerminator(IngestJobContext context, long maxRunTimeInSeconds) { + this(context); + this.timedTerminator = new TimedProcessTerminator(maxRunTimeInSeconds); + } + /** - * @return true if process should be terminated, false otherwise + * @inheritDoc */ @Override public boolean shouldTerminateProcess() { - - if (this.context.dataSourceIngestIsCancelled()) + + if (this.context.dataSourceIngestIsCancelled()) { return true; - - return super.shouldTerminateProcess(); + } + + return this.timedTerminator != null ? this.timedTerminator.shouldTerminateProcess() : false; } } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/FileIngestModuleProcessTerminator.java b/Core/src/org/sleuthkit/autopsy/ingest/FileIngestModuleProcessTerminator.java index 765ad15917..28851a1956 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/FileIngestModuleProcessTerminator.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/FileIngestModuleProcessTerminator.java @@ -19,47 +19,49 @@ package org.sleuthkit.autopsy.ingest; import org.sleuthkit.autopsy.coreutils.ExecUtil; +import org.sleuthkit.autopsy.coreutils.ExecUtil.ProcessTerminator; /** - * A timed process terminator for data source ingest modules. Checks for - * ingest job cancellation as well. + * A process terminator for file ingest modules that checks for ingest job + * cancellation and optionally checks for process run time in excess of a + * specified maximum. */ -public final class FileIngestModuleProcessTerminator extends ExecUtil.TimedProcessTerminator { +public final class FileIngestModuleProcessTerminator implements ProcessTerminator { + + private final IngestJobContext context; + private ExecUtil.TimedProcessTerminator timedTerminator; - public final IngestJobContext context; - /** * Constructs a process terminator for a file ingest module. - * Uses default process execution timeout value. * * @param context The ingest job context for the ingest module. */ public FileIngestModuleProcessTerminator(IngestJobContext context) { - super(); this.context = context; } - - /** - * Constructs a process terminator for a file ingest module. - * - * @param context The ingest job context for the ingest module. - * @param timeoutSec Process execution timeout value (seconds) - */ - public FileIngestModuleProcessTerminator(IngestJobContext context, long timeoutSec) { - super(timeoutSec); - this.context = context; - } /** - * @return true if process should be terminated, false otherwise + * Constructs a process terminator for a file ingest module. + * + * @param context The ingest job context for the ingest module. + * @param maxRunTimeInSeconds Maximum allowable run time of process. + */ + public FileIngestModuleProcessTerminator(IngestJobContext context, long maxRunTimeInSeconds) { + this(context); + this.timedTerminator = new ExecUtil.TimedProcessTerminator(maxRunTimeInSeconds); + } + + /** + * @inheritDoc */ @Override public boolean shouldTerminateProcess() { - if (this.context.fileIngestIsCancelled()) + if (this.context.fileIngestIsCancelled()) { return true; - - return super.shouldTerminateProcess(); + } + + return this.timedTerminator != null ? this.timedTerminator.shouldTerminateProcess() : false; } }