19 package org.sleuthkit.autopsy.casemodule.services;
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;
34 final class TagOptionsPanel
extends javax.swing.JPanel implements OptionsPanel {
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;
46 tagTypesListModel =
new DefaultListModel<>();
47 tagTypes =
new TreeSet<>(TagNameDefiniton.getTagNameDefinitions());
49 customizeComponents();
52 private void customizeComponents() {
53 tagNamesList.setModel(tagTypesListModel);
54 tagNamesList.addListSelectionListener((ListSelectionEvent event) -> {
64 @SuppressWarnings(
"unchecked")
66 private
void initComponents() {
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();
80 jPanel1.setPreferredSize(
new java.awt.Dimension(750, 500));
82 org.openide.awt.Mnemonics.setLocalizedText(panelDescriptionLabel,
org.openide.util.NbBundle.getMessage(TagOptionsPanel.class,
"TagOptionsPanel.panelDescriptionLabel.text"));
84 jSplitPane1.setDividerLocation(400);
85 jSplitPane1.setDividerSize(1);
87 org.openide.awt.Mnemonics.setLocalizedText(tagTypesListLabel,
org.openide.util.NbBundle.getMessage(TagOptionsPanel.class,
"TagOptionsPanel.tagTypesListLabel.text"));
89 tagNamesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
90 jScrollPane1.setViewportView(tagNamesList);
92 newTagNameButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add-tag.png")));
93 org.openide.awt.Mnemonics.setLocalizedText(newTagNameButton,
org.openide.util.NbBundle.getMessage(TagOptionsPanel.class,
"TagOptionsPanel.newTagNameButton.text"));
94 newTagNameButton.addActionListener(
new java.awt.event.ActionListener() {
95 public void actionPerformed(java.awt.event.ActionEvent evt) {
96 newTagNameButtonActionPerformed(evt);
100 deleteTagNameButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete-tag.png")));
101 org.openide.awt.Mnemonics.setLocalizedText(deleteTagNameButton,
org.openide.util.NbBundle.getMessage(TagOptionsPanel.class,
"TagOptionsPanel.deleteTagNameButton.text"));
102 deleteTagNameButton.addActionListener(
new java.awt.event.ActionListener() {
103 public void actionPerformed(java.awt.event.ActionEvent evt) {
104 deleteTagNameButtonActionPerformed(evt);
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()
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)))
124 modifyTagTypesListPanelLayout.setVerticalGroup(
125 modifyTagTypesListPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
126 .addGroup(modifyTagTypesListPanelLayout.createSequentialGroup()
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))
138 jSplitPane1.setLeftComponent(modifyTagTypesListPanel);
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)
146 tagTypesAdditionalPanelLayout.setVerticalGroup(
147 tagTypesAdditionalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
148 .addGap(0, 454, Short.MAX_VALUE)
151 jSplitPane1.setRightComponent(tagTypesAdditionalPanel);
153 jScrollPane2.setViewportView(jSplitPane1);
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()
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))
166 jPanel1Layout.setVerticalGroup(
167 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
168 .addGroup(jPanel1Layout.createSequentialGroup()
170 .addComponent(panelDescriptionLabel)
171 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
172 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 458, Short.MAX_VALUE)
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)
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)
188 private void newTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {
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);
197 if (!tagTypes.contains(newTagType)) {
198 tagTypes.add(newTagType);
199 updateTagNamesListModel();
200 tagNamesList.setSelectedValue(newTagType,
true);
202 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
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);
212 private void deleteTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {
213 TagNameDefiniton tagName = tagNamesList.getSelectedValue();
214 tagTypes.remove(tagName);
215 updateTagNamesListModel();
217 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
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;
230 private javax.swing.JPanel tagTypesAdditionalPanel;
231 private javax.swing.JLabel tagTypesListLabel;
237 private void updateTagNamesListModel() {
238 tagTypesListModel.clear();
239 for (TagNameDefiniton tagName : tagTypes) {
240 tagTypesListModel.addElement(tagName);
249 tagTypes =
new TreeSet<>(TagNameDefiniton.getTagNameDefinitions());
250 updateTagNamesListModel();
258 public void store() {
259 TagNameDefiniton.setTagNameDefinitions(tagTypes);
266 private void enableButtons() {
271 deleteTagNameButton.setEnabled(tagNamesList.getSelectedIndex() != -1);