From 36b7a24ea10a824018fa5d98485400adfd6ab1a5 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 7 Nov 2017 13:52:13 -0500 Subject: [PATCH 1/8] 3201 initial revisions to Tag Options Panel to allow editing --- .../casemodule/services/Bundle.properties | 20 +- ...eDefiniton.java => TagNameDefinition.java} | 30 +- ...wTagNameDialog.form => TagNameDialog.form} | 66 +++- ...wTagNameDialog.java => TagNameDialog.java} | 145 ++++--- .../casemodule/services/TagOptionsPanel.form | 218 +++++++++-- .../casemodule/services/TagOptionsPanel.java | 234 ++++++++--- .../casemodule/services/TagsManager.java | 16 +- .../optionspanel/Bundle.properties | 3 - .../optionspanel/GlobalSettingsPanel.form | 108 +----- .../optionspanel/GlobalSettingsPanel.java | 76 ---- .../optionspanel/ManageTagsDialog.form | 147 ------- .../optionspanel/ManageTagsDialog.java | 364 ------------------ 12 files changed, 552 insertions(+), 875 deletions(-) rename Core/src/org/sleuthkit/autopsy/casemodule/services/{TagNameDefiniton.java => TagNameDefinition.java} (83%) rename Core/src/org/sleuthkit/autopsy/casemodule/services/{NewTagNameDialog.form => TagNameDialog.form} (57%) rename Core/src/org/sleuthkit/autopsy/casemodule/services/{NewTagNameDialog.java => TagNameDialog.java} (58%) delete mode 100755 Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.form delete mode 100755 Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties index 0dd66e8c59..6242c6793d 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties @@ -7,10 +7,16 @@ NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.title=Invalid character in NewTagNameDialog.JOptionPane.tagNameEmpty.message=The tag name cannot be empty NewTagNameDialog.JOptionPane.tagNameEmpty.title=Empty tag name TagOptionsPanel.tagTypesListLabel.text=Tag Names: -TagOptionsPanel.panelDescriptionLabel.text=Autopsy keeps a list of the tag names you have created in the past. Add more or delete them here. -NewTagNameDialog.okButton.text=OK -NewTagNameDialog.cancelButton.text=Cancel -NewTagNameDialog.tagNameTextField.text= -NewTagNameDialog.newTagNameLabel.text=New Tag Name: -TagOptionsPanel.deleteTagNameButton.text=Delete Tag Name -TagOptionsPanel.newTagNameButton.text=New Tag Name +TagOptionsPanel.deleteTagNameButton.text=Delete Tag +TagOptionsPanel.newTagNameButton.text=New Tag +TagOptionsPanel.editTagNameButton.text=Edit Tag +TagNameDialog.descriptionLabel.text=Description: +TagNameDialog.okButton.text=OK +TagNameDialog.cancelButton.text=Cancel +TagNameDialog.tagNameTextField.text= +TagNameDialog.newTagNameLabel.text=New Tag Name: +TagNameDialog.notableCheckbox.text=Tag indicates item is notable. +TagOptionsPanel.isNotableLabel.text=Tag indicates item is notable: +TagOptionsPanel.notableYesOrNoLabel.text= +TagOptionsPanel.descriptionLabel.text=Tag Description: +TagOptionsPanel.jTextArea1.text=Autopsy keeps a list of the tag names you have created in the past. Add more or delete them here. diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefiniton.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java similarity index 83% rename from Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefiniton.java rename to Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java index c22b380f96..84ae34c4f7 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefiniton.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java @@ -33,12 +33,12 @@ import org.sleuthkit.autopsy.datamodel.tags.Category; * A tag name definition consisting of a display name, description and color. */ @Immutable -final class TagNameDefiniton implements Comparable { +final class TagNameDefinition implements Comparable { private static final String TAGS_SETTINGS_NAME = "Tags"; //NON-NLS private static final String TAG_NAMES_SETTING_KEY = "TagNames"; //NON-NLS private static final List STANDARD_NOTABLE_TAG_DISPLAY_NAMES = Arrays.asList(TagsManager.getNotableItemText(), Category.ONE.getDisplayName(), Category.TWO.getDisplayName(), Category.THREE.getDisplayName()); // NON-NLS - private static final List STANDARD_TAG_DISPLAY_NAMES = Arrays.asList(TagsManager.getBookmarkText(), TagsManager.getFollowUpText(), + static final List STANDARD_TAG_DISPLAY_NAMES = Arrays.asList(TagsManager.getBookmarkText(), TagsManager.getFollowUpText(), TagsManager.getNotableItemText(), Category.ONE.getDisplayName(), Category.TWO.getDisplayName(), Category.THREE.getDisplayName(), Category.FOUR.getDisplayName(), Category.FIVE.getDisplayName()); @@ -57,7 +57,7 @@ final class TagNameDefiniton implements Comparable { * @param color The color for the tag name. * @param knownStatus The status denoted by the tag. */ - TagNameDefiniton(String displayName, String description, TagName.HTML_COLOR color, String knownStatus) { + TagNameDefinition(String displayName, String description, TagName.HTML_COLOR color, String knownStatus) { this.displayName = displayName; this.description = description; this.color = color; @@ -114,7 +114,7 @@ final class TagNameDefiniton implements Comparable { * the specified tag name definition. */ @Override - public int compareTo(TagNameDefiniton other) { + public int compareTo(TagNameDefinition other) { return this.getDisplayName().toLowerCase().compareTo(other.getDisplayName().toLowerCase()); } @@ -140,10 +140,10 @@ final class TagNameDefiniton implements Comparable { */ @Override public boolean equals(Object obj) { - if (!(obj instanceof TagNameDefiniton)) { + if (!(obj instanceof TagNameDefinition)) { return false; } - TagNameDefiniton thatTagName = (TagNameDefiniton) obj; + TagNameDefinition thatTagName = (TagNameDefinition) obj; return this.getDisplayName().equals(thatTagName.getDisplayName()); } @@ -171,8 +171,8 @@ final class TagNameDefiniton implements Comparable { * * @return A set of tag name definition objects. */ - static synchronized Set getTagNameDefinitions() { - Set tagNames = new HashSet<>(); + static synchronized Set getTagNameDefinitions() { + Set tagNames = new HashSet<>(); List standardTags = new ArrayList<>(STANDARD_TAG_DISPLAY_NAMES); String setting = ModuleSettings.getConfigSetting(TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY); if (null != setting && !setting.isEmpty()) { @@ -189,21 +189,21 @@ final class TagNameDefiniton implements Comparable { if (tagNameAttributes.length == 3) { standardTags.remove(tagNameAttributes[0]); //Use standard tag's saved settings instead of default settings if (badTags.contains(tagNameAttributes[0])) { - tagNames.add(new TagNameDefiniton(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.valueOf(tagNameAttributes[2]), NOTABLE)); + tagNames.add(new TagNameDefinition(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.valueOf(tagNameAttributes[2]), NOTABLE)); } else { - tagNames.add(new TagNameDefiniton(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.valueOf(tagNameAttributes[2]), "")); //add the default value for that tag + tagNames.add(new TagNameDefinition(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.valueOf(tagNameAttributes[2]), "")); //add the default value for that tag } } else if (tagNameAttributes.length == 4) { standardTags.remove(tagNameAttributes[0]); //Use standard tag's saved settings instead of default settings - tagNames.add(new TagNameDefiniton(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.valueOf(tagNameAttributes[2]), tagNameAttributes[3])); + tagNames.add(new TagNameDefinition(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.valueOf(tagNameAttributes[2]), tagNameAttributes[3])); } } } for (String standardTagName : standardTags) { if (STANDARD_NOTABLE_TAG_DISPLAY_NAMES.contains(standardTagName)) { - tagNames.add(new TagNameDefiniton(standardTagName, "", TagName.HTML_COLOR.NONE, NOTABLE)); + tagNames.add(new TagNameDefinition(standardTagName, "", TagName.HTML_COLOR.NONE, NOTABLE)); } else { - tagNames.add(new TagNameDefiniton(standardTagName, "", TagName.HTML_COLOR.NONE, "")); //add the default value for that tag + tagNames.add(new TagNameDefinition(standardTagName, "", TagName.HTML_COLOR.NONE, "")); //add the default value for that tag } } return tagNames; @@ -214,9 +214,9 @@ final class TagNameDefiniton implements Comparable { * * @param tagNames A set of tag name definition objects. */ - static synchronized void setTagNameDefinitions(Set tagNames) { + static synchronized void setTagNameDefinitions(Set tagNames) { StringBuilder setting = new StringBuilder(); - for (TagNameDefiniton tagName : tagNames) { + for (TagNameDefinition tagName : tagNames) { if (setting.length() != 0) { setting.append(";"); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/NewTagNameDialog.form b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.form similarity index 57% rename from Core/src/org/sleuthkit/autopsy/casemodule/services/NewTagNameDialog.form rename to Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.form index b6400b7c31..e8162e6b3b 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/NewTagNameDialog.form +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.form @@ -23,10 +23,10 @@ - + - + @@ -34,6 +34,14 @@ + + + + + + + + @@ -41,20 +49,22 @@ - + - - - - + + + + + + + - @@ -63,21 +73,21 @@ - + - + - + @@ -87,12 +97,44 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/NewTagNameDialog.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java similarity index 58% rename from Core/src/org/sleuthkit/autopsy/casemodule/services/NewTagNameDialog.java rename to Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java index ff21ac283b..e79004af6e 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/NewTagNameDialog.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java @@ -1,24 +1,25 @@ /* -* Autopsy Forensic Browser -* -* Copyright 2011-2016 Basis Technology Corp. -* Contact: carrier sleuthkit org -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. + * Autopsy Forensic Browser + * + * Copyright 2011-2016 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.sleuthkit.autopsy.casemodule.services; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.WindowAdapter; @@ -28,11 +29,14 @@ import javax.swing.JOptionPane; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.openide.util.NbBundle; +import org.sleuthkit.datamodel.TskData; -final class NewTagNameDialog extends javax.swing.JDialog { +final class TagNameDialog extends javax.swing.JDialog { private static final long serialVersionUID = 1L; private String userTagDisplayName; + private String userTagDescription; + private boolean userTagIsNotable; private BUTTON_PRESSED result; enum BUTTON_PRESSED { @@ -42,13 +46,24 @@ final class NewTagNameDialog extends javax.swing.JDialog { /** * Creates a new NewUserTagNameDialog dialog. */ - NewTagNameDialog() { - super(new JFrame(NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.title.text")), - NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.title.text"), true); + TagNameDialog() { + super(new JFrame(NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.title.text")), + NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.title.text"), true); initComponents(); this.display(); } + TagNameDialog(TagNameDefinition tagNameToEdit) { + super(new JFrame("Edit 1"), + "Edit 2", true); + initComponents(); + tagNameTextField.setText(tagNameToEdit.getDisplayName()); + descriptionTextArea.setText(tagNameToEdit.getDescription()); + notableCheckbox.setSelected(tagNameToEdit.isNotable()); + tagNameTextField.setEnabled(false); + this.display(); + } + /** * Sets display settings for the dialog and adds appropriate listeners. */ @@ -56,7 +71,7 @@ final class NewTagNameDialog extends javax.swing.JDialog { setLayout(new BorderLayout()); /* - * Center the dialog + * Center the dialog */ Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); int width = this.getSize().width; @@ -81,14 +96,17 @@ final class NewTagNameDialog extends javax.swing.JDialog { public void changedUpdate(DocumentEvent e) { fire(); } + @Override public void removeUpdate(DocumentEvent e) { fire(); } + @Override public void insertUpdate(DocumentEvent e) { fire(); } + private void fire() { enableOkButton(); } @@ -105,6 +123,7 @@ final class NewTagNameDialog extends javax.swing.JDialog { /** * Called when a button is pressed or when the dialog is closed. + * * @param okPressed whether the OK button was pressed. */ private void doButtonAction(boolean okPressed) { @@ -112,38 +131,50 @@ final class NewTagNameDialog extends javax.swing.JDialog { String newTagDisplayName = tagNameTextField.getText().trim(); if (newTagDisplayName.isEmpty()) { JOptionPane.showMessageDialog(null, - NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameEmpty.message"), - NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameEmpty.title"), + NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameEmpty.message"), + NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameEmpty.title"), JOptionPane.ERROR_MESSAGE); return; } - if (TagsManager.containsIllegalCharacters(newTagDisplayName)) { + + //if a tag name contains illegal characters and is not the name of one of the standard tags + if (TagsManager.containsIllegalCharacters(newTagDisplayName) && !TagNameDefinition.STANDARD_TAG_DISPLAY_NAMES.contains(newTagDisplayName)) { JOptionPane.showMessageDialog(null, - NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.message"), - NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.title"), + NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.message"), + NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.title"), JOptionPane.ERROR_MESSAGE); return; } + userTagDescription = descriptionTextArea.getText(); userTagDisplayName = newTagDisplayName; + userTagIsNotable = notableCheckbox.isSelected(); result = BUTTON_PRESSED.OK; } else { result = BUTTON_PRESSED.CANCEL; } - setVisible(false); + setVisible(false); } /** * Returns the tag name entered by the user. - * - * @return a new user tag name + * + * @return a new user tag name */ String getTagName() { return userTagDisplayName; } + String getTagDesciption() { + return userTagDescription; + } + + boolean isTagNotable() { + return userTagIsNotable; + } + /** * Returns information about which button was pressed. - * + * * @return BUTTON_PRESSED (OK, CANCEL) */ BUTTON_PRESSED getResult() { @@ -151,9 +182,9 @@ final class NewTagNameDialog extends javax.swing.JDialog { } /** - * Enable the OK button if the tag name text field is not empty. - * Sets the enter button as default, so user can press enter to activate - * an okButton press and add the tag name. + * Enable the OK button if the tag name text field is not empty. Sets the + * enter button as default, so user can press enter to activate an okButton + * press and add the tag name. */ private void enableOkButton() { okButton.setEnabled(!tagNameTextField.getText().isEmpty()); @@ -173,27 +204,40 @@ final class NewTagNameDialog extends javax.swing.JDialog { tagNameTextField = new javax.swing.JTextField(); cancelButton = new javax.swing.JButton(); okButton = new javax.swing.JButton(); + descriptionScrollPane = new javax.swing.JScrollPane(); + descriptionTextArea = new javax.swing.JTextArea(); + descriptionLabel = new javax.swing.JLabel(); + notableCheckbox = new javax.swing.JCheckBox(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - org.openide.awt.Mnemonics.setLocalizedText(newTagNameLabel, org.openide.util.NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.newTagNameLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(newTagNameLabel, org.openide.util.NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.newTagNameLabel.text")); // NOI18N - tagNameTextField.setText(org.openide.util.NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.tagNameTextField.text")); // NOI18N + tagNameTextField.setText(org.openide.util.NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.tagNameTextField.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.cancelButton.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.cancelButton.text")); // NOI18N cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); - org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(NewTagNameDialog.class, "NewTagNameDialog.okButton.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.okButton.text")); // NOI18N okButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { okButtonActionPerformed(evt); } }); + descriptionTextArea.setColumns(20); + descriptionTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N + descriptionTextArea.setRows(5); + descriptionScrollPane.setViewportView(descriptionTextArea); + + org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel, org.openide.util.NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.descriptionLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(notableCheckbox, org.openide.util.NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.notableCheckbox.text")); // NOI18N + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( @@ -201,13 +245,19 @@ final class NewTagNameDialog extends javax.swing.JDialog { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tagNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE) + .addComponent(tagNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(okButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cancelButton)) - .addComponent(newTagNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(newTagNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(notableCheckbox) + .addComponent(descriptionLabel)) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( @@ -217,13 +267,16 @@ final class NewTagNameDialog extends javax.swing.JDialog { .addComponent(newTagNameLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tagNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(50, Short.MAX_VALUE)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(descriptionLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(notableCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 42, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cancelButton) - .addComponent(okButton)) - .addContainerGap()) + .addComponent(okButton))) ); pack(); @@ -240,7 +293,11 @@ final class NewTagNameDialog extends javax.swing.JDialog { // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; + private javax.swing.JLabel descriptionLabel; + private javax.swing.JScrollPane descriptionScrollPane; + private javax.swing.JTextArea descriptionTextArea; private javax.swing.JLabel newTagNameLabel; + private javax.swing.JCheckBox notableCheckbox; private javax.swing.JButton okButton; private javax.swing.JTextField tagNameTextField; // End of variables declaration//GEN-END:variables diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form index c58201621a..c2e5c06cab 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form @@ -16,7 +16,7 @@ - + @@ -29,7 +29,7 @@ - + @@ -37,43 +37,39 @@ - - - - - - + + + - - - + - + - + - - + + - - - + + + + @@ -89,34 +85,46 @@ - + - - + - - - - + + + + + + + + + + + + + + - + - - + + + + - - - + + + - - + + + - + @@ -144,7 +152,7 @@ - + @@ -157,6 +165,15 @@ + + + + + + + + + @@ -170,11 +187,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -187,15 +260,86 @@ - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java index 8fc6a5ff4d..da774f7161 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java @@ -36,15 +36,15 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { private static final long serialVersionUID = 1L; private static final String DEFAULT_DESCRIPTION = ""; private static final TagName.HTML_COLOR DEFAULT_COLOR = TagName.HTML_COLOR.NONE; - private final DefaultListModel tagTypesListModel; - private Set tagTypes; + private final DefaultListModel tagTypesListModel; + private Set tagTypes; /** * Creates new form TagsManagerOptionsPanel */ TagOptionsPanel() { tagTypesListModel = new DefaultListModel<>(); - tagTypes = new TreeSet<>(TagNameDefiniton.getTagNameDefinitions()); + tagTypes = new TreeSet<>(TagNameDefinition.getTagNameDefinitions()); initComponents(); customizeComponents(); } @@ -52,7 +52,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { private void customizeComponents() { tagNamesList.setModel(tagTypesListModel); tagNamesList.addListSelectionListener((ListSelectionEvent event) -> { - enableButtons(); + updatePanel(); }); } @@ -66,7 +66,6 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { private void initComponents() { jPanel1 = new javax.swing.JPanel(); - panelDescriptionLabel = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); jSplitPane1 = new javax.swing.JSplitPane(); modifyTagTypesListPanel = new javax.swing.JPanel(); @@ -75,14 +74,23 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { tagNamesList = new javax.swing.JList<>(); newTagNameButton = new javax.swing.JButton(); deleteTagNameButton = new javax.swing.JButton(); + editTagNameButton = new javax.swing.JButton(); + jScrollPane3 = new javax.swing.JScrollPane(); + jTextArea1 = new javax.swing.JTextArea(); tagTypesAdditionalPanel = new javax.swing.JPanel(); + descriptionLabel = new javax.swing.JLabel(); + descriptionScrollPane = new javax.swing.JScrollPane(); + descriptionTextArea = new javax.swing.JTextArea(); + isNotableLabel = new javax.swing.JLabel(); + notableYesOrNoLabel = new javax.swing.JLabel(); - jPanel1.setPreferredSize(new java.awt.Dimension(750, 500)); + jPanel1.setPreferredSize(new java.awt.Dimension(750, 490)); - org.openide.awt.Mnemonics.setLocalizedText(panelDescriptionLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.panelDescriptionLabel.text")); // NOI18N + jScrollPane2.setPreferredSize(new java.awt.Dimension(750, 490)); - jSplitPane1.setDividerLocation(400); + jSplitPane1.setDividerLocation(365); jSplitPane1.setDividerSize(1); + jSplitPane1.setPreferredSize(new java.awt.Dimension(748, 488)); org.openide.awt.Mnemonics.setLocalizedText(tagTypesListLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.tagTypesListLabel.text")); // NOI18N @@ -91,6 +99,9 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { newTagNameButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add-tag.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(newTagNameButton, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.newTagNameButton.text")); // NOI18N + newTagNameButton.setMaximumSize(new java.awt.Dimension(111, 25)); + newTagNameButton.setMinimumSize(new java.awt.Dimension(111, 25)); + newTagNameButton.setPreferredSize(new java.awt.Dimension(111, 25)); newTagNameButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { newTagNameButtonActionPerformed(evt); @@ -99,12 +110,36 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { deleteTagNameButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete-tag.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(deleteTagNameButton, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.deleteTagNameButton.text")); // NOI18N + deleteTagNameButton.setMaximumSize(new java.awt.Dimension(111, 25)); + deleteTagNameButton.setMinimumSize(new java.awt.Dimension(111, 25)); + deleteTagNameButton.setPreferredSize(new java.awt.Dimension(111, 25)); deleteTagNameButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteTagNameButtonActionPerformed(evt); } }); + org.openide.awt.Mnemonics.setLocalizedText(editTagNameButton, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.editTagNameButton.text")); // NOI18N + editTagNameButton.setMaximumSize(new java.awt.Dimension(111, 25)); + editTagNameButton.setMinimumSize(new java.awt.Dimension(111, 25)); + editTagNameButton.setPreferredSize(new java.awt.Dimension(111, 25)); + editTagNameButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + editTagNameButtonActionPerformed(evt); + } + }); + + jTextArea1.setEditable(false); + 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(TagOptionsPanel.class, "TagOptionsPanel.jTextArea1.text")); // NOI18N + jTextArea1.setWrapStyleWord(true); + jTextArea1.setFocusable(false); + jScrollPane3.setViewportView(jTextArea1); + javax.swing.GroupLayout modifyTagTypesListPanelLayout = new javax.swing.GroupLayout(modifyTagTypesListPanel); modifyTagTypesListPanel.setLayout(modifyTagTypesListPanelLayout); modifyTagTypesListPanelLayout.setHorizontalGroup( @@ -112,40 +147,88 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(tagTypesListLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup() - .addComponent(newTagNameButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(deleteTagNameButton) - .addGap(0, 113, Short.MAX_VALUE))) - .addContainerGap()) - ); - modifyTagTypesListPanelLayout.setVerticalGroup( - modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(tagTypesListLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 381, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(newTagNameButton) - .addComponent(deleteTagNameButton)) + .addGroup(modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, modifyTagTypesListPanelLayout.createSequentialGroup() + .addComponent(newTagNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(editTagNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(deleteTagNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); + modifyTagTypesListPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {deleteTagNameButton, editTagNameButton, newTagNameButton}); + + modifyTagTypesListPanelLayout.setVerticalGroup( + modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(tagTypesListLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 355, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(newTagNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(editTagNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(deleteTagNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + + modifyTagTypesListPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteTagNameButton, editTagNameButton, newTagNameButton}); + jSplitPane1.setLeftComponent(modifyTagTypesListPanel); + org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.descriptionLabel.text")); // NOI18N + + descriptionTextArea.setEditable(false); + descriptionTextArea.setBackground(new java.awt.Color(240, 240, 240)); + descriptionTextArea.setColumns(20); + descriptionTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N + descriptionTextArea.setLineWrap(true); + descriptionTextArea.setRows(5); + descriptionTextArea.setWrapStyleWord(true); + descriptionTextArea.setFocusable(false); + descriptionScrollPane.setViewportView(descriptionTextArea); + + org.openide.awt.Mnemonics.setLocalizedText(isNotableLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.isNotableLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(notableYesOrNoLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.notableYesOrNoLabel.text")); // NOI18N + javax.swing.GroupLayout tagTypesAdditionalPanelLayout = new javax.swing.GroupLayout(tagTypesAdditionalPanel); tagTypesAdditionalPanel.setLayout(tagTypesAdditionalPanelLayout); tagTypesAdditionalPanelLayout.setHorizontalGroup( tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 354, Short.MAX_VALUE) + .addGroup(tagTypesAdditionalPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE) + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(tagTypesAdditionalPanelLayout.createSequentialGroup() + .addComponent(isNotableLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(notableYesOrNoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) ); tagTypesAdditionalPanelLayout.setVerticalGroup( tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 454, Short.MAX_VALUE) + .addGroup(tagTypesAdditionalPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(isNotableLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(notableYesOrNoLabel)) + .addContainerGap(351, Short.MAX_VALUE)) ); jSplitPane1.setRightComponent(tagTypesAdditionalPanel); @@ -157,27 +240,23 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(panelDescriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jScrollPane2)) - .addContainerGap()) + .addGap(0, 0, 0) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(0, 0, 0)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(panelDescriptionLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 458, Short.MAX_VALUE) - .addContainerGap()) + .addGap(0, 0, 0) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(0, 0, 0)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 778, Short.MAX_VALUE) + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -186,11 +265,11 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { }// //GEN-END:initComponents private void newTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newTagNameButtonActionPerformed - NewTagNameDialog dialog = new NewTagNameDialog(); - NewTagNameDialog.BUTTON_PRESSED result = dialog.getResult(); - if (result == NewTagNameDialog.BUTTON_PRESSED.OK) { - String newTagDisplayName = dialog.getTagName(); - TagNameDefiniton newTagType = new TagNameDefiniton(newTagDisplayName, DEFAULT_DESCRIPTION, DEFAULT_COLOR, ""); + TagNameDialog dialog = new TagNameDialog(); + TagNameDialog.BUTTON_PRESSED result = dialog.getResult(); + if (result == TagNameDialog.BUTTON_PRESSED.OK) { + String status = dialog.isTagNotable() ? "(Notable)" : ""; + TagNameDefinition newTagType = new TagNameDefinition(dialog.getTagName(), dialog.getTagDesciption(), DEFAULT_COLOR, status); /* * If tag name already exists, don't add the tag name. */ @@ -198,7 +277,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { tagTypes.add(newTagType); updateTagNamesListModel(); tagNamesList.setSelectedValue(newTagType, true); - enableButtons(); + updatePanel(); firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } else { JOptionPane.showMessageDialog(null, @@ -210,23 +289,51 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { }//GEN-LAST:event_newTagNameButtonActionPerformed private void deleteTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTagNameButtonActionPerformed - TagNameDefiniton tagName = tagNamesList.getSelectedValue(); + TagNameDefinition tagName = tagNamesList.getSelectedValue(); tagTypes.remove(tagName); updateTagNamesListModel(); - enableButtons(); + updatePanel(); firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); + }//GEN-LAST:event_deleteTagNameButtonActionPerformed + private void editTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editTagNameButtonActionPerformed + TagNameDefinition originalTagName = tagNamesList.getSelectedValue(); + TagNameDialog dialog = new TagNameDialog(originalTagName); + TagNameDialog.BUTTON_PRESSED result = dialog.getResult(); + if (result == TagNameDialog.BUTTON_PRESSED.OK) { + String status = dialog.isTagNotable() ? "(Notable)" : ""; + TagNameDefinition newTagType = new TagNameDefinition(dialog.getTagName(), dialog.getTagDesciption(), DEFAULT_COLOR, status); + /* + * If tag name already exists, don't add the tag name. + */ + + tagTypes.remove(originalTagName); + tagTypes.add(newTagType); + updateTagNamesListModel(); + tagNamesList.setSelectedValue(newTagType, true); + updatePanel(); + firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); + } + }//GEN-LAST:event_editTagNameButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton deleteTagNameButton; + private javax.swing.JLabel descriptionLabel; + private javax.swing.JScrollPane descriptionScrollPane; + private javax.swing.JTextArea descriptionTextArea; + private javax.swing.JButton editTagNameButton; + private javax.swing.JLabel isNotableLabel; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JScrollPane jScrollPane3; private javax.swing.JSplitPane jSplitPane1; + private javax.swing.JTextArea jTextArea1; private javax.swing.JPanel modifyTagTypesListPanel; private javax.swing.JButton newTagNameButton; - private javax.swing.JLabel panelDescriptionLabel; - private javax.swing.JList tagNamesList; + private javax.swing.JLabel notableYesOrNoLabel; + private javax.swing.JList tagNamesList; private javax.swing.JPanel tagTypesAdditionalPanel; private javax.swing.JLabel tagTypesListLabel; // End of variables declaration//GEN-END:variables @@ -236,7 +343,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { */ private void updateTagNamesListModel() { tagTypesListModel.clear(); - for (TagNameDefiniton tagName : tagTypes) { + for (TagNameDefinition tagName : tagTypes) { tagTypesListModel.addElement(tagName); } } @@ -246,9 +353,9 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { */ @Override public void load() { - tagTypes = new TreeSet<>(TagNameDefiniton.getTagNameDefinitions()); + tagTypes = new TreeSet<>(TagNameDefinition.getTagNameDefinitions()); updateTagNamesListModel(); - enableButtons(); + updatePanel(); } /** @@ -256,19 +363,36 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { */ @Override public void store() { - TagNameDefiniton.setTagNameDefinitions(tagTypes); + TagNameDefinition.setTagNameDefinitions(tagTypes); } /** * Enables the button components based on the state of the tag types list * component. */ - private void enableButtons() { + private void updatePanel() { /* * Only enable the delete button when there is a tag type selected in * the tag types JList. */ - deleteTagNameButton.setEnabled(tagNamesList.getSelectedIndex() != -1); + boolean isSelected = tagNamesList.getSelectedIndex() != -1; + editTagNameButton.setEnabled(isSelected); + boolean enableDelete = isSelected && !TagNameDefinition.STANDARD_TAG_DISPLAY_NAMES.contains(tagNamesList.getSelectedValue().getDisplayName()); + deleteTagNameButton.setEnabled(enableDelete); + if (isSelected){ + + descriptionTextArea.setText(tagNamesList.getSelectedValue().getDescription()); + if (tagNamesList.getSelectedValue().isNotable()){ + notableYesOrNoLabel.setText("Yes"); + } + else { + notableYesOrNoLabel.setText("No"); + } + } + else { + descriptionTextArea.setText(""); + notableYesOrNoLabel.setText(""); + } } } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java index b9f63983fa..5ee847cfa9 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java @@ -115,7 +115,7 @@ public class TagsManager implements Closeable { */ public static Set getTagDisplayNames() throws TskCoreException { Set tagDisplayNames = new HashSet<>(); - Set customNames = TagNameDefiniton.getTagNameDefinitions(); + Set customNames = TagNameDefinition.getTagNameDefinitions(); customNames.forEach((tagType) -> { tagDisplayNames.add(tagType.getDisplayName()); }); @@ -134,7 +134,7 @@ public class TagsManager implements Closeable { public static List getNotableTagDisplayNames() { List tagDisplayNames = new ArrayList<>(); - for (TagNameDefiniton tagDef : TagNameDefiniton.getTagNameDefinitions()) { + for (TagNameDefinition tagDef : TagNameDefinition.getTagNameDefinitions()) { if (tagDef.isNotable()) { tagDisplayNames.add(tagDef.getDisplayName()); } @@ -203,8 +203,8 @@ public class TagsManager implements Closeable { * map. */ Map tagNames = new HashMap<>(); - Set customTypes = TagNameDefiniton.getTagNameDefinitions(); - for (TagNameDefiniton tagType : customTypes) { + Set customTypes = TagNameDefinition.getTagNameDefinitions(); + for (TagNameDefinition tagType : customTypes) { tagNames.put(tagType.getDisplayName(), null); } for (TagName tagName : caseDb.getAllTagNames()) { @@ -268,7 +268,7 @@ public class TagsManager implements Closeable { public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException { String knownStatus = ""; if (getNotableTagDisplayNames().contains(displayName)) { - knownStatus = TagNameDefiniton.NOTABLE; + knownStatus = TagNameDefinition.NOTABLE; } return addTagName(displayName, description, color, knownStatus); } @@ -293,9 +293,9 @@ public class TagsManager implements Closeable { public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color, String knownStatus) throws TagNameAlreadyExistsException, TskCoreException { try { TagName tagName = caseDb.addTagName(displayName, description, color); - Set customTypes = TagNameDefiniton.getTagNameDefinitions(); - customTypes.add(new TagNameDefiniton(displayName, description, color, knownStatus)); - TagNameDefiniton.setTagNameDefinitions(customTypes); + Set customTypes = TagNameDefinition.getTagNameDefinitions(); + customTypes.add(new TagNameDefinition(displayName, description, color, knownStatus)); + TagNameDefinition.setTagNameDefinitions(customTypes); return tagName; } catch (TskCoreException ex) { List existingTagNames = caseDb.getAllTagNames(); diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties index 7ab2c9b2e4..597e896a2a 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties @@ -33,9 +33,6 @@ ImportHashDatabaseDialog.bnNewOrganization.text=Add New Organization ImportHashDatabaseDialog.tfDatabaseName.tooltip=Name for this database ImportHashDatabaseDialog.tfDatabaseVersion.tooltip.text=Database Version Number GlobalSettingsPanel.bnImportDatabase.actionCommand= -GlobalSettingsPanel.bnManageTags.actionCommand= -GlobalSettingsPanel.bnManageTags.toolTipText= -GlobalSettingsPanel.bnManageTags.text=Manage Tags GlobalSettingsPanel.tbOops.text= GlobalSettingsPanel.lbDatabaseSettings.text=Database Settings GlobalSettingsPanel.bnImportDatabase.label=Import Hash Database diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form index 49d525511b..b4a50fc91c 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form @@ -28,7 +28,6 @@ - @@ -48,8 +47,6 @@ - - @@ -193,109 +190,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -415,7 +309,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java index 58eb9fbe40..57c02fc614 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java @@ -57,12 +57,8 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i @Messages({"GlobalSettingsPanel.title=Central Repository Settings", "GlobalSettingsPanel.cbUseCentralRepo.text=Use a central repository", - "GlobalSettingsPanel.pnTagManagement.border.title=Tags", "GlobalSettingsPanel.pnCorrelationProperties.border.title=Correlation Properties", "GlobalSettingsPanel.lbCentralRepository.text=A central repository allows you to correlate files and results between cases.", - "GlobalSettingsPanel.manageTagsTextArea.text=Configure which tag names are associated with notable items. " - + "When these tags are used, the file or result will be recorded in the central repository. " - + "If that file or result is seen again in future cases, it will be flagged.", "GlobalSettingsPanel.correlationPropertiesTextArea.text=Choose which file and result properties to store in the central repository for later correlation.", "GlobalSettingsPanel.organizationPanel.border.title=Organizations", "GlobalSettingsPanel.manageOrganizationButton.text=Manage Organizations", @@ -100,10 +96,6 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i lbDbLocationValue = new javax.swing.JLabel(); cbUseCentralRepo = new javax.swing.JCheckBox(); bnImportDatabase = new javax.swing.JButton(); - pnTagManagement = new javax.swing.JPanel(); - bnManageTags = new javax.swing.JButton(); - manageTagsScrollPane = new javax.swing.JScrollPane(); - manageTagsTextArea = new javax.swing.JTextArea(); tbOops = new javax.swing.JTextField(); pnCorrelationProperties = new javax.swing.JPanel(); bnManageTypes = new javax.swing.JButton(); @@ -189,56 +181,6 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i } }); - pnTagManagement.setBorder(javax.swing.BorderFactory.createTitledBorder(null, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.pnTagManagement.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N - pnTagManagement.setPreferredSize(new java.awt.Dimension(674, 97)); - - org.openide.awt.Mnemonics.setLocalizedText(bnManageTags, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.bnManageTags.text")); // NOI18N - bnManageTags.setToolTipText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.bnManageTags.toolTipText")); // NOI18N - bnManageTags.setActionCommand(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.bnManageTags.actionCommand")); // NOI18N - bnManageTags.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - bnManageTagsActionPerformed(evt); - } - }); - - manageTagsScrollPane.setBorder(null); - - manageTagsTextArea.setEditable(false); - manageTagsTextArea.setBackground(new java.awt.Color(240, 240, 240)); - manageTagsTextArea.setColumns(20); - manageTagsTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N - manageTagsTextArea.setLineWrap(true); - manageTagsTextArea.setRows(2); - manageTagsTextArea.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.manageTagsTextArea.text")); // NOI18N - manageTagsTextArea.setToolTipText(""); - manageTagsTextArea.setWrapStyleWord(true); - manageTagsTextArea.setBorder(null); - manageTagsScrollPane.setViewportView(manageTagsTextArea); - - javax.swing.GroupLayout pnTagManagementLayout = new javax.swing.GroupLayout(pnTagManagement); - pnTagManagement.setLayout(pnTagManagementLayout); - pnTagManagementLayout.setHorizontalGroup( - pnTagManagementLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnTagManagementLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pnTagManagementLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnTagManagementLayout.createSequentialGroup() - .addComponent(bnManageTags) - .addGap(0, 555, Short.MAX_VALUE)) - .addGroup(pnTagManagementLayout.createSequentialGroup() - .addComponent(manageTagsScrollPane) - .addContainerGap()))) - ); - pnTagManagementLayout.setVerticalGroup( - pnTagManagementLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnTagManagementLayout.createSequentialGroup() - .addGap(7, 7, 7) - .addComponent(manageTagsScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(bnManageTags, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(8, 8, 8)) - ); - tbOops.setEditable(false); tbOops.setFont(tbOops.getFont().deriveFont(tbOops.getFont().getStyle() | java.awt.Font.BOLD, 12)); tbOops.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.tbOops.text")); // NOI18N @@ -351,7 +293,6 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i .addComponent(organizationPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lbCentralRepository, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(pnCorrelationProperties, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(pnTagManagement, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(pnDatabaseConfiguration, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(cbUseCentralRepo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 186, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(bnImportDatabase, javax.swing.GroupLayout.Alignment.LEADING)) @@ -366,8 +307,6 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pnDatabaseConfiguration, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) - .addComponent(pnTagManagement, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, 0) .addComponent(pnCorrelationProperties, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) .addComponent(organizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -377,8 +316,6 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i .addComponent(bnImportDatabase) .addContainerGap()) ); - - pnTagManagement.getAccessibleContext().setAccessibleName(""); }// //GEN-END:initComponents private void bnImportDatabaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnImportDatabaseActionPerformed @@ -387,12 +324,6 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i firePropertyChange(OptionsPanelController.PROP_VALID, null, null); }//GEN-LAST:event_bnImportDatabaseActionPerformed - private void bnManageTagsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnManageTagsActionPerformed - store(); - ManageTagsDialog dialog = new ManageTagsDialog(); - firePropertyChange(OptionsPanelController.PROP_VALID, null, null); - }//GEN-LAST:event_bnManageTagsActionPerformed - private void bnManageTypesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnManageTypesActionPerformed store(); ManageCorrelationPropertiesDialog dialog = new ManageCorrelationPropertiesDialog(); @@ -565,11 +496,8 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i private boolean enableButtonSubComponents(Boolean enable) { boolean ingestRunning = IngestManager.getInstance().isIngestRunning(); pnCorrelationProperties.setEnabled(enable && !ingestRunning); - pnTagManagement.setEnabled(enable && !ingestRunning); bnManageTypes.setEnabled(enable && !ingestRunning); bnImportDatabase.setEnabled(enable && !ingestRunning); - bnManageTags.setEnabled(enable && !ingestRunning); - manageTagsTextArea.setEnabled(enable && !ingestRunning); correlationPropertiesTextArea.setEnabled(enable && !ingestRunning); organizationPanel.setEnabled(enable && !ingestRunning); organizationTextArea.setEnabled(enable && !ingestRunning); @@ -580,7 +508,6 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton bnDbConfigure; private javax.swing.JButton bnImportDatabase; - private javax.swing.JButton bnManageTags; private javax.swing.JButton bnManageTypes; private javax.swing.JCheckBox cbUseCentralRepo; private javax.swing.JScrollPane correlationPropertiesScrollPane; @@ -593,14 +520,11 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i private javax.swing.JLabel lbDbPlatformTypeLabel; private javax.swing.JLabel lbDbPlatformValue; private javax.swing.JButton manageOrganizationButton; - private javax.swing.JScrollPane manageTagsScrollPane; - private javax.swing.JTextArea manageTagsTextArea; private javax.swing.JPanel organizationPanel; private javax.swing.JScrollPane organizationScrollPane; private javax.swing.JTextArea organizationTextArea; private javax.swing.JPanel pnCorrelationProperties; private javax.swing.JPanel pnDatabaseConfiguration; - private javax.swing.JPanel pnTagManagement; private javax.swing.JTextField tbOops; // End of variables declaration//GEN-END:variables } diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.form deleted file mode 100755 index f1ad5a38e4..0000000000 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.form +++ /dev/null @@ -1,147 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java deleted file mode 100755 index ff179c3032..0000000000 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageTagsDialog.java +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Central Repository - * - * Copyright 2015-2017 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.centralrepository.optionspanel; - -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Toolkit; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.logging.Level; -import javax.swing.JFrame; -import javax.swing.table.DefaultTableModel; -import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; -import javax.swing.JOptionPane; -import org.openide.util.NbBundle.Messages; -import org.openide.windows.WindowManager; -import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.casemodule.services.TagsManager; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; -import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.datamodel.TskCoreException; -import org.sleuthkit.datamodel.BlackboardArtifactTag; -import org.sleuthkit.datamodel.TagName; -import org.sleuthkit.datamodel.ContentTag; -import org.sleuthkit.datamodel.TskData; - -/** - * Instances of this class allow a user to select an existing hash database and - * add it to the set of hash databases used to classify files as unknown, known, - * or notable. - */ -final class ManageTagsDialog extends javax.swing.JDialog { - - private static final Logger LOGGER = Logger.getLogger(ManageTagsDialog.class.getName()); - - /** - * Displays a dialog that allows a user to select an existing hash database - * and add it to the set of hash databases used to classify files as - * unknown, known, or notable. - */ - @Messages({"ManageTagDialog.title=Manage Tags", - "ManageTagDialog.tagInfo.text=Select the tags that cause files and results to be recorded in the central repository. Additional tags can be created in the Tags options panel."}) - ManageTagsDialog() { - super((JFrame) WindowManager.getDefault().getMainWindow(), - Bundle.ManageTagDialog_title(), - true); // NON-NLS - initComponents(); - customizeComponents(); - setupHelpTextArea(); - display(); - } - - - @Messages({"ManageTagsDialog.init.failedConnection.msg=Cannot connect to central cepository.", - "ManageTagsDialog.init.failedGettingTags.msg=Unable to retrieve list of tags.", - "ManageTagsDialog.tagColumn.header.text=Tags", - "ManageTagsDialog.notableColumn.header.text=Notable"}) - private void setupHelpTextArea() { - helpTextArea.setText(Bundle.ManageTagDialog_tagInfo_text()); - } - - private void customizeComponents() { - lbWarnings.setText(""); - EamDb dbManager; - try { - dbManager = EamDb.getInstance(); - } catch (EamDbException ex) { - LOGGER.log(Level.SEVERE, "Failed to connect to central repository database."); - lbWarnings.setText(Bundle.ManageTagsDialog_init_failedConnection_msg()); - return; - } - List badTags = TagsManager.getNotableTagDisplayNames(); - - List tagNames = new ArrayList<>(); - try { - tagNames.addAll(TagsManager.getTagDisplayNames()); - } catch (TskCoreException ex) { - LOGGER.log(Level.WARNING, "Could not get list of tags in case", ex); - lbWarnings.setText(Bundle.ManageTagsDialog_init_failedGettingTags_msg()); - } - - Collections.sort(tagNames); - - DefaultTableModel model = (DefaultTableModel) tblTagNames.getModel(); - model.setColumnIdentifiers(new String[] {Bundle.ManageTagsDialog_tagColumn_header_text(), Bundle.ManageTagsDialog_notableColumn_header_text()}); - for (String tagName : tagNames) { - boolean enabled = badTags.contains(tagName); - model.addRow(new Object[]{tagName, enabled}); - } - CheckBoxModelListener listener = new CheckBoxModelListener(this); - model.addTableModelListener(listener); - } - - private void display() { - Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); - setLocation((screenDimension.width - getSize().width) / 2, (screenDimension.height - getSize().height) / 2); - setVisible(true); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings({"unchecked", "rawtypes"}) - // //GEN-BEGIN:initComponents - private void initComponents() { - - buttonGroup1 = new javax.swing.ButtonGroup(); - okButton = new javax.swing.JButton(); - cancelButton = new javax.swing.JButton(); - tagScrollArea = new javax.swing.JScrollPane(); - tblTagNames = new javax.swing.JTable(); - lbWarnings = new javax.swing.JLabel(); - helpScrollPane = new javax.swing.JScrollPane(); - helpTextArea = new javax.swing.JTextArea(); - - setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - - org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(ManageTagsDialog.class, "ManageTagsDialog.okButton.text")); // NOI18N - okButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - okButtonActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(ManageTagsDialog.class, "ManageTagsDialog.cancelButton.text")); // NOI18N - cancelButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - cancelButtonActionPerformed(evt); - } - }); - - tblTagNames.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { - - }, - new String [] { - "", "" - } - ) { - Class[] types = new Class [] { - java.lang.Object.class, java.lang.Boolean.class - }; - boolean[] canEdit = new boolean [] { - false, true - }; - - public Class getColumnClass(int columnIndex) { - return types [columnIndex]; - } - - public boolean isCellEditable(int rowIndex, int columnIndex) { - return canEdit [columnIndex]; - } - }); - tagScrollArea.setViewportView(tblTagNames); - - helpScrollPane.setBorder(null); - - helpTextArea.setEditable(false); - helpTextArea.setBackground(new java.awt.Color(240, 240, 240)); - helpTextArea.setColumns(20); - helpTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N - helpTextArea.setLineWrap(true); - helpTextArea.setRows(3); - helpTextArea.setWrapStyleWord(true); - helpTextArea.setBorder(null); - helpTextArea.setFocusable(false); - helpScrollPane.setViewportView(helpTextArea); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); - getContentPane().setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(okButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cancelButton)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(helpScrollPane, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tagScrollArea, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE) - .addComponent(lbWarnings, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(2, 2, 2))) - .addContainerGap()) - ); - - layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, okButton}); - - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(helpScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, 0) - .addComponent(tagScrollArea, javax.swing.GroupLayout.DEFAULT_SIZE, 341, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(lbWarnings, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(okButton) - .addComponent(cancelButton)) - .addContainerGap()) - ); - - pack(); - }// //GEN-END:initComponents - - private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed - dispose(); - }//GEN-LAST:event_cancelButtonActionPerformed - - - private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed - if (setBadTags()) { - dispose(); - } - }//GEN-LAST:event_okButtonActionPerformed - - private boolean setBadTags() { - List badTags = new ArrayList<>(); - - DefaultTableModel model = (DefaultTableModel) tblTagNames.getModel(); - for (int i = 0; i < model.getRowCount(); ++i) { - String tagName = (String) model.getValueAt(i, 0); - boolean enabled = (boolean) model.getValueAt(i, 1); - - if (enabled) { - badTags.add(tagName); - } - } - try { - EamDb dbManager = EamDb.getInstance(); - dbManager.saveSettings(); - } catch (EamDbException ex) { - LOGGER.log(Level.SEVERE, "Failed to connect to central repository database."); // NON-NLS - lbWarnings.setText(Bundle.ManageTagsDialog_init_failedConnection_msg()); - return false; - } - return true; - } - - /** - * If the user sets a tag to "Notable", give them the option to update - * any existing tagged items (in the current case only) in the central repo. - */ - public class CheckBoxModelListener implements TableModelListener { - @Messages({"ManageTagsDialog.updateCurrentCase.msg=Mark as notable any files/results in the current case that have this tag?", - "ManageTagsDialog.updateCurrentCase.title=Update current case?", - "ManageTagsDialog.updateCurrentCase.error=Error updating existing central repository entries"}) - - javax.swing.JDialog dialog; - public CheckBoxModelListener(javax.swing.JDialog dialog){ - this.dialog = dialog; - } - - @Override - public void tableChanged(TableModelEvent e) { - int row = e.getFirstRow(); - int column = e.getColumn(); - if (column == 1) { - DefaultTableModel model = (DefaultTableModel) e.getSource(); - String tagName = (String) model.getValueAt(row, 0); - Boolean checked = (Boolean) model.getValueAt(row, column); - if (checked) { - - // Don't do anything if there's no case open - if(Case.isCaseOpen()){ - int dialogButton = JOptionPane.YES_NO_OPTION; - int dialogResult = JOptionPane.showConfirmDialog ( - null, - Bundle.ManageTagsDialog_updateCurrentCase_msg(), - Bundle.ManageTagsDialog_updateCurrentCase_title(), - dialogButton); - if(dialogResult == JOptionPane.YES_OPTION){ - try{ - dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - setArtifactsKnownBadByTag(tagName, Case.getCurrentCase()); - } catch (EamDbException ex) { - LOGGER.log(Level.SEVERE, "Failed to apply notable status to artifacts in current case", ex); - JOptionPane.showMessageDialog(null, Bundle.ManageTagsDialog_updateCurrentCase_error()); - } finally { - dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - } - } - } - } - } - } - - /** - * Set knownBad status for all files/artifacts in the given case that - * are tagged with the given tag name. - * Files/artifacts that are not already in the database will be added. - * @param tagName The name of the tag to search for - * @param curCase The case to search in - */ - public void setArtifactsKnownBadByTag(String tagNameString, Case curCase) throws EamDbException{ - try{ - TagName tagName = curCase.getServices().getTagsManager().getDisplayNamesToTagNamesMap().get(tagNameString); - - // First find any matching artifacts - List artifactTags = curCase.getSleuthkitCase().getBlackboardArtifactTagsByTagName(tagName); - - for(BlackboardArtifactTag bbTag:artifactTags){ - List convertedArtifacts = EamArtifactUtil.getCorrelationAttributeFromBlackboardArtifact(bbTag.getArtifact(), true, true); - for (CorrelationAttribute eamArtifact : convertedArtifacts) { - EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact,TskData.FileKnown.BAD); - } - } - - // Now search for files - List fileTags = curCase.getSleuthkitCase().getContentTagsByTagName(tagName); - for(ContentTag contentTag:fileTags){ - final CorrelationAttribute eamArtifact = EamArtifactUtil.getEamArtifactFromContent(contentTag.getContent(), - TskData.FileKnown.BAD, ""); - if(eamArtifact != null){ - EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact, TskData.FileKnown.BAD); - } - } - } catch (TskCoreException ex){ - throw new EamDbException("Error updating artifacts", ex); - } - - } - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JButton cancelButton; - private javax.swing.JScrollPane helpScrollPane; - private javax.swing.JTextArea helpTextArea; - private javax.swing.JLabel lbWarnings; - private javax.swing.JButton okButton; - private javax.swing.JScrollPane tagScrollArea; - private javax.swing.JTable tblTagNames; - // End of variables declaration//GEN-END:variables -} From d49b1667afc9c61fc3aecf8537edf8506e1a0745 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 8 Nov 2017 09:58:03 -0500 Subject: [PATCH 2/8] 3201 disable tag deletion and editing during ingest --- .../casemodule/services/Bundle.properties | 7 +- .../casemodule/services/Bundle_ja.properties | 3 +- .../casemodule/services/TagOptionsPanel.form | 44 ++++++++-- .../casemodule/services/TagOptionsPanel.java | 86 +++++++++++++++---- 4 files changed, 112 insertions(+), 28 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties index 6242c6793d..74938a677a 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties @@ -1,7 +1,7 @@ OptionsCategory_Name_TagNamesOptions=Tags OptionsCategory_TagNames=TagNames Blackboard.unableToIndexArtifact.error.msg=Unable to index blackboard artifact {0} -NewTagNameDialog.title.text=New Tag Name +NewTagNameDialog.title.text=New Tag NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.message=Tag name may not contain any of the following symbols\: \\ \: * ? " < > | , ; NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.title=Invalid character in tag name NewTagNameDialog.JOptionPane.tagNameEmpty.message=The tag name cannot be empty @@ -14,9 +14,10 @@ TagNameDialog.descriptionLabel.text=Description: TagNameDialog.okButton.text=OK TagNameDialog.cancelButton.text=Cancel TagNameDialog.tagNameTextField.text= -TagNameDialog.newTagNameLabel.text=New Tag Name: +TagNameDialog.newTagNameLabel.text=Name: TagNameDialog.notableCheckbox.text=Tag indicates item is notable. TagOptionsPanel.isNotableLabel.text=Tag indicates item is notable: TagOptionsPanel.notableYesOrNoLabel.text= TagOptionsPanel.descriptionLabel.text=Tag Description: -TagOptionsPanel.jTextArea1.text=Autopsy keeps a list of the tag names you have created in the past. Add more or delete them here. +TagOptionsPanel.jTextArea1.text=Create and manage tags, which can be applied to files and results in the case. Notable tags will cause items tagged with them to be flagged as notable when using a central repository. +TagOptionsPanel.ingestRunningWarningLabel.text=Cannot make changes to existing tags when ingest is running! diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle_ja.properties index a27e3ca586..41e871691b 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle_ja.properties @@ -1,2 +1,3 @@ TagsManager.predefTagNames.bookmark.text=\u30d6\u30c3\u30af\u30de\u30fc\u30af -Blackboard.unableToIndexArtifact.error.msg=blackboard\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8{0}\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \ No newline at end of file +Blackboard.unableToIndexArtifact.error.msg=blackboard\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8{0}\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 +TagOptionsPanel.ingestRunningWarningLabel.text=\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3092\u5b9f\u884c\u4e2d\u306b\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5b9a\u7fa9\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\uff01 diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form index c2e5c06cab..541bd90cda 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.form @@ -203,6 +203,9 @@
+ + + @@ -260,18 +263,24 @@ - - + + - - - - - + + + + + + + + + + + - + @@ -287,7 +296,9 @@ - + + + @@ -339,6 +350,21 @@ + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java index da774f7161..ec2caa8d20 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java @@ -18,6 +18,9 @@ */ package org.sleuthkit.autopsy.casemodule.services; +import java.awt.EventQueue; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Set; import java.util.TreeSet; import javax.swing.DefaultListModel; @@ -26,6 +29,7 @@ import javax.swing.event.ListSelectionEvent; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; +import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.datamodel.TagName; /** @@ -38,6 +42,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { private static final TagName.HTML_COLOR DEFAULT_COLOR = TagName.HTML_COLOR.NONE; private final DefaultListModel tagTypesListModel; private Set tagTypes; + private IngestJobEventPropertyChangeListener ingestJobEventsListener; /** * Creates new form TagsManagerOptionsPanel @@ -54,6 +59,18 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { tagNamesList.addListSelectionListener((ListSelectionEvent event) -> { updatePanel(); }); + addIngestJobEventsListener(); + } + + /** + * Add a property change listener that listens to ingest job events to + * disable the buttons on the panel if ingest is running. This is done to + * prevent changes to user-defined types while the type definitions are in + * use. + */ + private void addIngestJobEventsListener() { + ingestJobEventsListener = new IngestJobEventPropertyChangeListener(); + IngestManager.getInstance().addIngestJobEventListener(ingestJobEventsListener); } /** @@ -83,6 +100,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { descriptionTextArea = new javax.swing.JTextArea(); isNotableLabel = new javax.swing.JLabel(); notableYesOrNoLabel = new javax.swing.JLabel(); + ingestRunningWarningLabel = new javax.swing.JLabel(); jPanel1.setPreferredSize(new java.awt.Dimension(750, 490)); @@ -119,6 +137,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { } }); + editTagNameButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit-tag.png"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(editTagNameButton, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.editTagNameButton.text")); // NOI18N editTagNameButton.setMaximumSize(new java.awt.Dimension(111, 25)); editTagNameButton.setMinimumSize(new java.awt.Dimension(111, 25)); @@ -202,6 +221,10 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { org.openide.awt.Mnemonics.setLocalizedText(notableYesOrNoLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.notableYesOrNoLabel.text")); // NOI18N + ingestRunningWarningLabel.setFont(ingestRunningWarningLabel.getFont().deriveFont(ingestRunningWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); + ingestRunningWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/filetypeid/warning16.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(ingestRunningWarningLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.ingestRunningWarningLabel.text")); // NOI18N + javax.swing.GroupLayout tagTypesAdditionalPanelLayout = new javax.swing.GroupLayout(tagTypesAdditionalPanel); tagTypesAdditionalPanel.setLayout(tagTypesAdditionalPanelLayout); tagTypesAdditionalPanelLayout.setHorizontalGroup( @@ -210,11 +233,15 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { .addContainerGap() .addGroup(tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(descriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE) - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(tagTypesAdditionalPanelLayout.createSequentialGroup() - .addComponent(isNotableLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(notableYesOrNoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(tagTypesAdditionalPanelLayout.createSequentialGroup() + .addComponent(isNotableLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(notableYesOrNoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(ingestRunningWarningLabel)) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); tagTypesAdditionalPanelLayout.setVerticalGroup( @@ -228,7 +255,9 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { .addGroup(tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(isNotableLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(notableYesOrNoLabel)) - .addContainerGap(351, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 304, Short.MAX_VALUE) + .addComponent(ingestRunningWarningLabel) + .addGap(31, 31, 31)) ); jSplitPane1.setRightComponent(tagTypesAdditionalPanel); @@ -323,6 +352,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { private javax.swing.JScrollPane descriptionScrollPane; private javax.swing.JTextArea descriptionTextArea; private javax.swing.JButton editTagNameButton; + private javax.swing.JLabel ingestRunningWarningLabel; private javax.swing.JLabel isNotableLabel; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; @@ -371,28 +401,54 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { * component. */ private void updatePanel() { + boolean ingestIsRunning = IngestManager.getInstance().isIngestRunning(); /* * Only enable the delete button when there is a tag type selected in * the tag types JList. */ + ingestRunningWarningLabel.setVisible(ingestIsRunning); boolean isSelected = tagNamesList.getSelectedIndex() != -1; - editTagNameButton.setEnabled(isSelected); - boolean enableDelete = isSelected && !TagNameDefinition.STANDARD_TAG_DISPLAY_NAMES.contains(tagNamesList.getSelectedValue().getDisplayName()); + boolean enableEdit = !ingestIsRunning && isSelected; + editTagNameButton.setEnabled(enableEdit); + boolean enableDelete = enableEdit && !TagNameDefinition.STANDARD_TAG_DISPLAY_NAMES.contains(tagNamesList.getSelectedValue().getDisplayName()); deleteTagNameButton.setEnabled(enableDelete); - if (isSelected){ - + if (isSelected) { + descriptionTextArea.setText(tagNamesList.getSelectedValue().getDescription()); - if (tagNamesList.getSelectedValue().isNotable()){ + if (tagNamesList.getSelectedValue().isNotable()) { notableYesOrNoLabel.setText("Yes"); + } else { + notableYesOrNoLabel.setText("No"); } - else { - notableYesOrNoLabel.setText("No"); - } - } - else { + } else { descriptionTextArea.setText(""); notableYesOrNoLabel.setText(""); } } + /** + * @inheritDoc + */ + @Override + @SuppressWarnings("FinalizeDeclaration") + protected void finalize() throws Throwable { + IngestManager.getInstance().removeIngestJobEventListener(ingestJobEventsListener); + super.finalize(); + } + + /** + * A property change listener that listens to ingest job events. + */ + private class IngestJobEventPropertyChangeListener implements PropertyChangeListener { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + updatePanel(); + } + }); + } + } } From feb12e304b2a7e15a6467d0db75f6220fb51e3ed Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 8 Nov 2017 17:18:22 -0500 Subject: [PATCH 3/8] 3201 fix title for Edit Tag dialog --- .../casemodule/services/Bundle.properties | 10 +++++----- .../casemodule/services/TagNameDialog.java | 20 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties index 74938a677a..4cca7e78d6 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Bundle.properties @@ -1,11 +1,11 @@ OptionsCategory_Name_TagNamesOptions=Tags OptionsCategory_TagNames=TagNames Blackboard.unableToIndexArtifact.error.msg=Unable to index blackboard artifact {0} -NewTagNameDialog.title.text=New Tag -NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.message=Tag name may not contain any of the following symbols\: \\ \: * ? " < > | , ; -NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.title=Invalid character in tag name -NewTagNameDialog.JOptionPane.tagNameEmpty.message=The tag name cannot be empty -NewTagNameDialog.JOptionPane.tagNameEmpty.title=Empty tag name +TagNameDialog.title.text=New Tag +TagNameDialog.JOptionPane.tagNameIllegalCharacters.message=Tag name may not contain any of the following symbols\: \\ \: * ? " < > | , ; +TagNameDialog.JOptionPane.tagNameIllegalCharacters.title=Invalid character in tag name +TagNameDialog.JOptionPane.tagNameEmpty.message=The tag name cannot be empty +TagNameDialog.JOptionPane.tagNameEmpty.title=Empty tag name TagOptionsPanel.tagTypesListLabel.text=Tag Names: TagOptionsPanel.deleteTagNameButton.text=Delete Tag TagOptionsPanel.newTagNameButton.text=New Tag diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java index e79004af6e..e310c066e5 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java @@ -19,7 +19,6 @@ package org.sleuthkit.autopsy.casemodule.services; import java.awt.BorderLayout; -import java.awt.Color; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.WindowAdapter; @@ -29,7 +28,7 @@ import javax.swing.JOptionPane; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.openide.util.NbBundle; -import org.sleuthkit.datamodel.TskData; +import org.openide.util.NbBundle.Messages; final class TagNameDialog extends javax.swing.JDialog { @@ -47,15 +46,16 @@ final class TagNameDialog extends javax.swing.JDialog { * Creates a new NewUserTagNameDialog dialog. */ TagNameDialog() { - super(new JFrame(NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.title.text")), - NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.title.text"), true); + super(new JFrame(NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.title.text")), + NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.title.text"), true); initComponents(); this.display(); } + @Messages({"TagNameDialog.editTitle.text=Edit Tag"}) TagNameDialog(TagNameDefinition tagNameToEdit) { - super(new JFrame("Edit 1"), - "Edit 2", true); + super(new JFrame(NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.editTitle.text")), + NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.editTitle.text"), true); initComponents(); tagNameTextField.setText(tagNameToEdit.getDisplayName()); descriptionTextArea.setText(tagNameToEdit.getDescription()); @@ -131,8 +131,8 @@ final class TagNameDialog extends javax.swing.JDialog { String newTagDisplayName = tagNameTextField.getText().trim(); if (newTagDisplayName.isEmpty()) { JOptionPane.showMessageDialog(null, - NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameEmpty.message"), - NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameEmpty.title"), + NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameEmpty.message"), + NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameEmpty.title"), JOptionPane.ERROR_MESSAGE); return; } @@ -140,8 +140,8 @@ final class TagNameDialog extends javax.swing.JDialog { //if a tag name contains illegal characters and is not the name of one of the standard tags if (TagsManager.containsIllegalCharacters(newTagDisplayName) && !TagNameDefinition.STANDARD_TAG_DISPLAY_NAMES.contains(newTagDisplayName)) { JOptionPane.showMessageDialog(null, - NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.message"), - NbBundle.getMessage(TagNameDialog.class, "NewTagNameDialog.JOptionPane.tagNameIllegalCharacters.title"), + NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameIllegalCharacters.message"), + NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameIllegalCharacters.title"), JOptionPane.ERROR_MESSAGE); return; } From 1a63dc413c5d233712b5fc5b645ef4e6c51385aa Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 10 Nov 2017 09:46:47 -0500 Subject: [PATCH 4/8] 3201 attribute storing knownStatus for TagName renamed to knownStatus --- .../casemodule/services/TagNameDefinition.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java index 7dd4b5309a..b24913b4e0 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java @@ -46,7 +46,7 @@ final class TagNameDefinition implements Comparable { private final String displayName; private final String description; private final TagName.HTML_COLOR color; - private final TskData.FileKnown knownStatusDenoted; + private final TskData.FileKnown knownStatus; /** * Constructs a tag name definition consisting of a display name, @@ -55,14 +55,14 @@ final class TagNameDefinition implements Comparable { * @param displayName The display name for the tag name. * @param description The description for the tag name. * @param color The color for the tag name. - * @param knownStatus The status denoted by the tag. + * @param knownStatus The status denoted by the tag name. */ TagNameDefinition(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown status) { this.displayName = displayName; this.description = description; this.color = color; - this.knownStatusDenoted = status; + this.knownStatus = status; } /** @@ -93,13 +93,13 @@ final class TagNameDefinition implements Comparable { } /** - * Whether or not the status that this tag implies is the Notable status + * Whether or not the status that this tag implies Notable status * * @return true if the Notable status is implied by this tag, false * otherwise. */ boolean isNotable() { - return knownStatusDenoted == TskData.FileKnown.BAD; + return knownStatus == TskData.FileKnown.BAD; } /** @@ -162,7 +162,7 @@ final class TagNameDefinition implements Comparable { * that is used by the tags settings file. */ private String toSettingsFormat() { - return displayName + "," + description + "," + color.name() + "," + knownStatusDenoted.toString(); + return displayName + "," + description + "," + color.name() + "," + knownStatus.toString(); } /** From 7f205b3ae4c37bab1980bc8ef22ab3e83cf1af8b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 15 Nov 2017 12:34:05 -0500 Subject: [PATCH 5/8] 3201 move fix for blank description on new tag into 3201 from 3202 --- .../sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java index 6505fec9df..fd3663ea7a 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java @@ -299,7 +299,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { TagNameDialog.BUTTON_PRESSED result = dialog.getResult(); if (result == TagNameDialog.BUTTON_PRESSED.OK) { TskData.FileKnown status = dialog.isTagNotable() ? TskData.FileKnown.BAD : TskData.FileKnown.UNKNOWN; - TagNameDefinition newTagType = new TagNameDefinition(dialog.getTagName(), DEFAULT_DESCRIPTION, DEFAULT_COLOR, status); + TagNameDefinition newTagType = new TagNameDefinition(dialog.getTagName(), dialog.getTagDesciption(), DEFAULT_COLOR, status); /* * If tag name already exists, don't add the tag name. */ From 0b27196ad415bca34d7baac43cb6312e98f919e4 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 17 Nov 2017 15:37:19 -0500 Subject: [PATCH 6/8] 3201 merge changes from 3199 and resolve conflicts --- .../services/TagNameDefinition.java | 34 +++++++++++++++--- .../casemodule/services/TagNameDialog.java | 8 ++--- .../casemodule/services/TagOptionsPanel.java | 2 +- .../casemodule/services/TagsManager.java | 35 +------------------ .../datamodel/DrawableTagsManager.java | 4 +-- 5 files changed, 38 insertions(+), 45 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java index 211bbe82e4..c9458dfbd7 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2016 Basis Technology Corp. + * Copyright 2011-2017 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,9 +25,14 @@ import java.util.List; import java.util.Objects; import java.util.Set; import javax.annotation.concurrent.Immutable; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.datamodel.TagName; import org.sleuthkit.autopsy.datamodel.tags.Category; +import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; /** @@ -36,11 +41,14 @@ import org.sleuthkit.datamodel.TskData; @Immutable final class TagNameDefinition implements Comparable { + @NbBundle.Messages({"TagNameDefinition.predefTagNames.bookmark.text=Bookmark", + "TagNameDefinition.predefTagNames.followUp.text=Follow Up", + "TagNameDefinition.predefTagNames.notableItem.text=Notable Item"}) private static final String TAGS_SETTINGS_NAME = "Tags"; //NON-NLS private static final String TAG_NAMES_SETTING_KEY = "TagNames"; //NON-NLS - private static final List STANDARD_NOTABLE_TAG_DISPLAY_NAMES = Arrays.asList(TagsManager.getNotableItemText(), Category.ONE.getDisplayName(), Category.TWO.getDisplayName(), Category.THREE.getDisplayName()); // NON-NLS - static final List STANDARD_TAG_DISPLAY_NAMES = Arrays.asList(TagsManager.getBookmarkText(), TagsManager.getFollowUpText(), - TagsManager.getNotableItemText(), Category.ONE.getDisplayName(), + private static final List STANDARD_NOTABLE_TAG_DISPLAY_NAMES = Arrays.asList(Bundle.TagNameDefinition_predefTagNames_notableItem_text(), Category.ONE.getDisplayName(), Category.TWO.getDisplayName(), Category.THREE.getDisplayName()); // NON-NLS + private static final List STANDARD_TAG_DISPLAY_NAMES = Arrays.asList(Bundle.TagNameDefinition_predefTagNames_bookmark_text(), Bundle.TagNameDefinition_predefTagNames_followUp_text(), + Bundle.TagNameDefinition_predefTagNames_notableItem_text(), Category.ONE.getDisplayName(), Category.TWO.getDisplayName(), Category.THREE.getDisplayName(), Category.FOUR.getDisplayName(), Category.FIVE.getDisplayName()); private final String displayName; @@ -65,6 +73,10 @@ final class TagNameDefinition implements Comparable { this.knownStatus = status; } + static List getStandardTagNames() { + return STANDARD_TAG_DISPLAY_NAMES; + } + /** * Gets the display name for the tag name. * @@ -165,6 +177,16 @@ final class TagNameDefinition implements Comparable { return displayName + "," + description + "," + color.name() + "," + knownStatus.toString(); } + private TagName saveToCase(SleuthkitCase caseDb) { + TagName tagName = null; + try { + tagName = caseDb.addTagName(displayName, description, color, knownStatus); + } catch (TskCoreException ex) { + Exceptions.printStackTrace(ex); + } + return tagName; + } + /** * Gets tag name definitions from the tag settings file as well as the * default tag name definitions. @@ -221,6 +243,10 @@ final class TagNameDefinition implements Comparable { setting.append(";"); } setting.append(tagName.toSettingsFormat()); + if (Case.isCaseOpen()) { + SleuthkitCase caseDb = Case.getCurrentCase().getSleuthkitCase(); + tagName.saveToCase(caseDb); + } } ModuleSettings.setConfigSetting(TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY, setting.toString()); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java index e310c066e5..c8d1351763 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2016 Basis Technology Corp. + * Copyright 2011-2017 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -135,10 +135,10 @@ final class TagNameDialog extends javax.swing.JDialog { NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameEmpty.title"), JOptionPane.ERROR_MESSAGE); return; - } - + } //if a tag name contains illegal characters and is not the name of one of the standard tags - if (TagsManager.containsIllegalCharacters(newTagDisplayName) && !TagNameDefinition.STANDARD_TAG_DISPLAY_NAMES.contains(newTagDisplayName)) { + if (TagsManager.containsIllegalCharacters(newTagDisplayName) && !TagNameDefinition.getStandardTagNames().contains(newTagDisplayName)) { + JOptionPane.showMessageDialog(null, NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameIllegalCharacters.message"), NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameIllegalCharacters.title"), diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java index fd3663ea7a..61314e6f1f 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagOptionsPanel.java @@ -411,7 +411,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel { boolean isSelected = tagNamesList.getSelectedIndex() != -1; boolean enableEdit = !ingestIsRunning && isSelected; editTagNameButton.setEnabled(enableEdit); - boolean enableDelete = enableEdit && !TagNameDefinition.STANDARD_TAG_DISPLAY_NAMES.contains(tagNamesList.getSelectedValue().getDisplayName()); + boolean enableDelete = enableEdit && !TagNameDefinition.getStandardTagNames().contains(tagNamesList.getSelectedValue().getDisplayName()); deleteTagNameButton.setEnabled(enableDelete); if (isSelected) { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java index 49b25b54db..5699034f7b 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; -import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.datamodel.BlackboardArtifact; @@ -46,41 +45,9 @@ import org.sleuthkit.datamodel.TskData; public class TagsManager implements Closeable { private static final Logger LOGGER = Logger.getLogger(TagsManager.class.getName()); - @NbBundle.Messages({"TagsManager.predefTagNames.bookmark.text=Bookmark", - "TagsManager.predefTagNames.followUp.text=Follow Up", - "TagsManager.predefTagNames.notableItem.text=Notable Item"}) - private static final String FOLLOW_UP = Bundle.TagsManager_predefTagNames_followUp_text(); - private static final String BOOKMARK = Bundle.TagsManager_predefTagNames_bookmark_text(); - private static final String NOTABLE_ITEM = Bundle.TagsManager_predefTagNames_notableItem_text(); + private final SleuthkitCase caseDb; - /** - * Get the text for the Follow Up tag. - * - * @return FOLLOW_UP - */ - public static String getFollowUpText() { - return FOLLOW_UP; - } - - /** - * Get the text for the Bookmark tag. - * - * @return BOOKMARK - */ - public static String getBookmarkText() { - return BOOKMARK; - } - - /** - * Get the text for the Notable Item tag. - * - * @return NOTABLE_ITEM - */ - static String getNotableItemText() { - return NOTABLE_ITEM; - } - /** * Tests whether or not a given tag display name contains an illegal * character. diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableTagsManager.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableTagsManager.java index 6859a12830..0497068924 100755 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableTagsManager.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableTagsManager.java @@ -138,7 +138,7 @@ public class DrawableTagsManager { public TagName getFollowUpTagName() throws TskCoreException { synchronized (autopsyTagsManagerLock) { if (Objects.isNull(followUpTagName)) { - followUpTagName = getTagName(TagsManager.getFollowUpText()); + followUpTagName = getTagName(NbBundle.getMessage(DrawableTagsManager.class, "DrawableTagsManager.followUp")); } return followUpTagName; } @@ -147,7 +147,7 @@ public class DrawableTagsManager { private Object getBookmarkTagName() throws TskCoreException { synchronized (autopsyTagsManagerLock) { if (Objects.isNull(bookmarkTagName)) { - bookmarkTagName = getTagName(TagsManager.getBookmarkText()); + bookmarkTagName = getTagName(NbBundle.getMessage(DrawableTagsManager.class, "DrawableTagsManager.bookMark")); } return bookmarkTagName; } From 8533ce98fb56bf14ecdb55e4c4ed3017e918f88e Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 17 Nov 2017 17:13:02 -0500 Subject: [PATCH 7/8] 3201 merge changes from 3199 regarding refactor of addTagName method name --- .../autopsy/casemodule/services/TagNameDefinition.java | 2 +- .../sleuthkit/autopsy/casemodule/services/TagNameDialog.java | 3 +-- .../org/sleuthkit/autopsy/casemodule/services/TagsManager.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java index c9458dfbd7..2153b35522 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDefinition.java @@ -180,7 +180,7 @@ final class TagNameDefinition implements Comparable { private TagName saveToCase(SleuthkitCase caseDb) { TagName tagName = null; try { - tagName = caseDb.addTagName(displayName, description, color, knownStatus); + tagName = caseDb.addOrUpdateTagName(displayName, description, color, knownStatus); } catch (TskCoreException ex) { Exceptions.printStackTrace(ex); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java index c8d1351763..f923717760 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagNameDialog.java @@ -135,10 +135,9 @@ final class TagNameDialog extends javax.swing.JDialog { NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameEmpty.title"), JOptionPane.ERROR_MESSAGE); return; - } + } //if a tag name contains illegal characters and is not the name of one of the standard tags if (TagsManager.containsIllegalCharacters(newTagDisplayName) && !TagNameDefinition.getStandardTagNames().contains(newTagDisplayName)) { - JOptionPane.showMessageDialog(null, NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameIllegalCharacters.message"), NbBundle.getMessage(TagNameDialog.class, "TagNameDialog.JOptionPane.tagNameIllegalCharacters.title"), diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java index 5699034f7b..de16d9456f 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java @@ -255,7 +255,7 @@ public class TagsManager implements Closeable { */ public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus) throws TagNameAlreadyExistsException, TskCoreException { try { - TagName tagName = caseDb.addTagName(displayName, description, color, knownStatus); + TagName tagName = caseDb.addOrUpdateTagName(displayName, description, color, knownStatus); Set customTypes = TagNameDefinition.getTagNameDefinitions(); customTypes.add(new TagNameDefinition(displayName, description, color, knownStatus)); TagNameDefinition.setTagNameDefinitions(customTypes); From 8623c96b4595b508ab90d0142f14536f5f07951b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 20 Nov 2017 18:28:45 -0500 Subject: [PATCH 8/8] 3201 remove calls to buttons that no longer exist for managing tags --- .../centralrepository/optionspanel/GlobalSettingsPanel.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java index 79373bc4d8..8b6ce90e96 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java @@ -478,10 +478,7 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i private boolean enableButtonSubComponents(Boolean enable) { boolean ingestRunning = IngestManager.getInstance().isIngestRunning(); pnCorrelationProperties.setEnabled(enable && !ingestRunning); - pnTagManagement.setEnabled(enable && !ingestRunning); bnManageTypes.setEnabled(enable && !ingestRunning); - bnManageTags.setEnabled(enable && !ingestRunning); - manageTagsTextArea.setEnabled(enable && !ingestRunning); correlationPropertiesTextArea.setEnabled(enable && !ingestRunning); organizationPanel.setEnabled(enable && !ingestRunning); organizationTextArea.setEnabled(enable && !ingestRunning);