Autopsy  4.4
Graphical digital forensics platform for The Sleuth Kit and other tools.
TagOptionsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2016 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.casemodule.services;
20 
21 import java.util.Set;
22 import java.util.TreeSet;
23 import javax.swing.DefaultListModel;
24 import javax.swing.JOptionPane;
25 import javax.swing.event.ListSelectionEvent;
26 import org.netbeans.spi.options.OptionsPanelController;
27 import org.openide.util.NbBundle;
29 import org.sleuthkit.datamodel.TagName;
30 
34 final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
35 
36  private static final long serialVersionUID = 1L;
37  private static final String DEFAULT_DESCRIPTION = "";
38  private static final TagName.HTML_COLOR DEFAULT_COLOR = TagName.HTML_COLOR.NONE;
39  private final DefaultListModel<TagNameDefiniton> tagTypesListModel;
40  private Set<TagNameDefiniton> tagTypes;
41 
45  TagOptionsPanel() {
46  tagTypesListModel = new DefaultListModel<>();
47  tagTypes = new TreeSet<>(TagNameDefiniton.getTagNameDefinitions());
48  initComponents();
49  customizeComponents();
50  }
51 
52  private void customizeComponents() {
53  tagNamesList.setModel(tagTypesListModel);
54  tagNamesList.addListSelectionListener((ListSelectionEvent event) -> {
55  enableButtons();
56  });
57  }
58 
64  @SuppressWarnings("unchecked")
65  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
66  private void initComponents() {
67 
68  jPanel1 = new javax.swing.JPanel();
69  panelDescriptionLabel = new javax.swing.JLabel();
70  jScrollPane2 = new javax.swing.JScrollPane();
71  jSplitPane1 = new javax.swing.JSplitPane();
72  modifyTagTypesListPanel = new javax.swing.JPanel();
73  tagTypesListLabel = new javax.swing.JLabel();
74  jScrollPane1 = new javax.swing.JScrollPane();
75  tagNamesList = new javax.swing.JList<>();
76  newTagNameButton = new javax.swing.JButton();
77  deleteTagNameButton = new javax.swing.JButton();
78  tagTypesAdditionalPanel = new javax.swing.JPanel();
79 
80  jPanel1.setPreferredSize(new java.awt.Dimension(750, 500));
81 
82  org.openide.awt.Mnemonics.setLocalizedText(panelDescriptionLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.panelDescriptionLabel.text")); // NOI18N
83 
84  jSplitPane1.setDividerLocation(400);
85  jSplitPane1.setDividerSize(1);
86 
87  org.openide.awt.Mnemonics.setLocalizedText(tagTypesListLabel, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.tagTypesListLabel.text")); // NOI18N
88 
89  tagNamesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
90  jScrollPane1.setViewportView(tagNamesList);
91 
92  newTagNameButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add-tag.png"))); // NOI18N
93  org.openide.awt.Mnemonics.setLocalizedText(newTagNameButton, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.newTagNameButton.text")); // NOI18N
94  newTagNameButton.addActionListener(new java.awt.event.ActionListener() {
95  public void actionPerformed(java.awt.event.ActionEvent evt) {
96  newTagNameButtonActionPerformed(evt);
97  }
98  });
99 
100  deleteTagNameButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete-tag.png"))); // NOI18N
101  org.openide.awt.Mnemonics.setLocalizedText(deleteTagNameButton, org.openide.util.NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.deleteTagNameButton.text")); // NOI18N
102  deleteTagNameButton.addActionListener(new java.awt.event.ActionListener() {
103  public void actionPerformed(java.awt.event.ActionEvent evt) {
104  deleteTagNameButtonActionPerformed(evt);
105  }
106  });
107 
108  javax.swing.GroupLayout modifyTagTypesListPanelLayout = new javax.swing.GroupLayout(modifyTagTypesListPanel);
109  modifyTagTypesListPanel.setLayout(modifyTagTypesListPanelLayout);
110  modifyTagTypesListPanelLayout.setHorizontalGroup(
111  modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
112  .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup()
113  .addContainerGap()
114  .addGroup(modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
115  .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
116  .addComponent(tagTypesListLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
117  .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup()
118  .addComponent(newTagNameButton)
119  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
120  .addComponent(deleteTagNameButton)
121  .addGap(0, 113, Short.MAX_VALUE)))
122  .addContainerGap())
123  );
124  modifyTagTypesListPanelLayout.setVerticalGroup(
125  modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
126  .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup()
127  .addContainerGap()
128  .addComponent(tagTypesListLabel)
129  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
130  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 381, Short.MAX_VALUE)
131  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
132  .addGroup(modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
133  .addComponent(newTagNameButton)
134  .addComponent(deleteTagNameButton))
135  .addContainerGap())
136  );
137 
138  jSplitPane1.setLeftComponent(modifyTagTypesListPanel);
139 
140  javax.swing.GroupLayout tagTypesAdditionalPanelLayout = new javax.swing.GroupLayout(tagTypesAdditionalPanel);
141  tagTypesAdditionalPanel.setLayout(tagTypesAdditionalPanelLayout);
142  tagTypesAdditionalPanelLayout.setHorizontalGroup(
143  tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
144  .addGap(0, 354, Short.MAX_VALUE)
145  );
146  tagTypesAdditionalPanelLayout.setVerticalGroup(
147  tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
148  .addGap(0, 454, Short.MAX_VALUE)
149  );
150 
151  jSplitPane1.setRightComponent(tagTypesAdditionalPanel);
152 
153  jScrollPane2.setViewportView(jSplitPane1);
154 
155  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
156  jPanel1.setLayout(jPanel1Layout);
157  jPanel1Layout.setHorizontalGroup(
158  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
159  .addGroup(jPanel1Layout.createSequentialGroup()
160  .addContainerGap()
161  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
162  .addComponent(panelDescriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
163  .addComponent(jScrollPane2))
164  .addContainerGap())
165  );
166  jPanel1Layout.setVerticalGroup(
167  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
168  .addGroup(jPanel1Layout.createSequentialGroup()
169  .addContainerGap()
170  .addComponent(panelDescriptionLabel)
171  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
172  .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 458, Short.MAX_VALUE)
173  .addContainerGap())
174  );
175 
176  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
177  this.setLayout(layout);
178  layout.setHorizontalGroup(
179  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
180  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 778, Short.MAX_VALUE)
181  );
182  layout.setVerticalGroup(
183  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
184  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
185  );
186  }// </editor-fold>//GEN-END:initComponents
187 
188  private void newTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newTagNameButtonActionPerformed
189  NewTagNameDialog dialog = new NewTagNameDialog();
190  NewTagNameDialog.BUTTON_PRESSED result = dialog.getResult();
191  if (result == NewTagNameDialog.BUTTON_PRESSED.OK) {
192  String newTagDisplayName = dialog.getTagName();
193  TagNameDefiniton newTagType = new TagNameDefiniton(newTagDisplayName, DEFAULT_DESCRIPTION, DEFAULT_COLOR);
194  /*
195  * If tag name already exists, don't add the tag name.
196  */
197  if (!tagTypes.contains(newTagType)) {
198  tagTypes.add(newTagType);
199  updateTagNamesListModel();
200  tagNamesList.setSelectedValue(newTagType, true);
201  enableButtons();
202  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
203  } else {
204  JOptionPane.showMessageDialog(null,
205  NbBundle.getMessage(TagOptionsPanel.class, "TagNamesSettingsPanel.JOptionPane.tagNameAlreadyExists.message"),
206  NbBundle.getMessage(TagOptionsPanel.class, "TagNamesSettingsPanel.JOptionPane.tagNameAlreadyExists.title"),
207  JOptionPane.INFORMATION_MESSAGE);
208  }
209  }
210  }//GEN-LAST:event_newTagNameButtonActionPerformed
211 
212  private void deleteTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTagNameButtonActionPerformed
213  TagNameDefiniton tagName = tagNamesList.getSelectedValue();
214  tagTypes.remove(tagName);
215  updateTagNamesListModel();
216  enableButtons();
217  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
218  }//GEN-LAST:event_deleteTagNameButtonActionPerformed
219 
220  // Variables declaration - do not modify//GEN-BEGIN:variables
221  private javax.swing.JButton deleteTagNameButton;
222  private javax.swing.JPanel jPanel1;
223  private javax.swing.JScrollPane jScrollPane1;
224  private javax.swing.JScrollPane jScrollPane2;
225  private javax.swing.JSplitPane jSplitPane1;
226  private javax.swing.JPanel modifyTagTypesListPanel;
227  private javax.swing.JButton newTagNameButton;
228  private javax.swing.JLabel panelDescriptionLabel;
229  private javax.swing.JList<org.sleuthkit.autopsy.casemodule.services.TagNameDefiniton> tagNamesList;
230  private javax.swing.JPanel tagTypesAdditionalPanel;
231  private javax.swing.JLabel tagTypesListLabel;
232  // End of variables declaration//GEN-END:variables
233 
237  private void updateTagNamesListModel() {
238  tagTypesListModel.clear();
239  for (TagNameDefiniton tagName : tagTypes) {
240  tagTypesListModel.addElement(tagName);
241  }
242  }
243 
247  @Override
248  public void load() {
249  tagTypes = new TreeSet<>(TagNameDefiniton.getTagNameDefinitions());
250  updateTagNamesListModel();
251  enableButtons();
252  }
253 
257  @Override
258  public void store() {
259  TagNameDefiniton.setTagNameDefinitions(tagTypes);
260  }
261 
266  private void enableButtons() {
267  /*
268  * Only enable the delete button when there is a tag type selected in
269  * the tag types JList.
270  */
271  deleteTagNameButton.setEnabled(tagNamesList.getSelectedIndex() != -1);
272  }
273 
274 }

Copyright © 2012-2016 Basis Technology. Generated on: Tue Jun 13 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.