19 package org.sleuthkit.autopsy.casemodule.services;
21 import java.awt.BorderLayout;
22 import java.awt.event.WindowAdapter;
23 import java.awt.event.WindowEvent;
24 import javax.swing.JFrame;
25 import javax.swing.JOptionPane;
26 import javax.swing.event.DocumentEvent;
27 import javax.swing.event.DocumentListener;
28 import org.openide.util.NbBundle;
29 import org.openide.util.NbBundle.Messages;
30 import org.openide.windows.WindowManager;
33 @Messages({
"TagNameDialog.descriptionLabel.text=Description:",
34 "TagNameDialog.notableCheckbox.text=Tag indicates item is notable."})
35 @SuppressWarnings(
"PMD.SingularField")
36 final class TagNameDialog extends javax.swing.JDialog {
38 private static final long serialVersionUID = 1L;
39 private String userTagDisplayName;
40 private String userTagDescription;
41 private boolean userTagIsNotable;
42 private BUTTON_PRESSED result;
52 super(
new JFrame(NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.title.text")),
53 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.title.text"),
true);
58 @Messages({
"TagNameDialog.editTitle.text=Edit Tag"})
59 TagNameDialog(TagNameDefinition tagNameToEdit) {
60 super(
new JFrame(NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.editTitle.text")),
61 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.editTitle.text"),
true);
63 tagNameTextField.setText(tagNameToEdit.getDisplayName());
64 descriptionTextArea.setText(tagNameToEdit.getDescription());
65 notableCheckbox.setSelected(tagNameToEdit.getKnownStatus() == TskData.FileKnown.BAD);
66 tagNameTextField.setEnabled(
false);
73 private void display() {
74 setLayout(
new BorderLayout());
79 setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
84 this.addWindowListener(
new WindowAdapter() {
86 public void windowClosing(WindowEvent e) {
87 doButtonAction(
false);
94 tagNameTextField.getDocument().addDocumentListener(
new DocumentListener() {
96 public void changedUpdate(DocumentEvent e) {
101 public void removeUpdate(DocumentEvent e) {
106 public void insertUpdate(DocumentEvent e) {
110 private void fire() {
129 @Messages({
"TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.message=Tag descriptions may not contain commas (,) or semicolons (;)",
130 "TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.title=Invalid character in tag description"})
131 private void doButtonAction(
boolean okPressed) {
133 String newTagDisplayName = tagNameTextField.getText().trim();
134 String descriptionText = descriptionTextArea.getText();
135 if (newTagDisplayName.isEmpty()) {
136 JOptionPane.showMessageDialog(
this,
137 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.JOptionPane.tagNameEmpty.message"),
138 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.JOptionPane.tagNameEmpty.title"),
139 JOptionPane.ERROR_MESSAGE);
143 if (TagsManager.containsIllegalCharacters(newTagDisplayName) && !TagNameDefinition.getStandardTagNames().contains(newTagDisplayName)) {
144 JOptionPane.showMessageDialog(
this,
145 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.message"),
146 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.title"),
147 JOptionPane.ERROR_MESSAGE);
149 }
else if (descriptionText.contains(
",")
150 || descriptionText.contains(
";")) {
151 JOptionPane.showMessageDialog(
this,
152 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.message"),
153 NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.JOptionPane.tagDescriptionIllegalCharacters.title"),
154 JOptionPane.ERROR_MESSAGE);
158 userTagDescription = descriptionTextArea.getText();
159 userTagDisplayName = newTagDisplayName;
160 userTagIsNotable = notableCheckbox.isSelected();
161 result = BUTTON_PRESSED.OK;
163 result = BUTTON_PRESSED.CANCEL;
173 String getTagName() {
174 return userTagDisplayName;
177 String getTagDesciption() {
178 return userTagDescription;
181 boolean isTagNotable() {
182 return userTagIsNotable;
190 BUTTON_PRESSED getResult() {
199 private void enableOkButton() {
200 okButton.setEnabled(!tagNameTextField.getText().isEmpty());
201 getRootPane().setDefaultButton(okButton);
209 @SuppressWarnings(
"unchecked")
211 private
void initComponents() {
213 newTagNameLabel =
new javax.swing.JLabel();
214 tagNameTextField =
new javax.swing.JTextField();
215 cancelButton =
new javax.swing.JButton();
216 okButton =
new javax.swing.JButton();
217 descriptionScrollPane =
new javax.swing.JScrollPane();
218 descriptionTextArea =
new javax.swing.JTextArea();
219 descriptionLabel =
new javax.swing.JLabel();
220 notableCheckbox =
new javax.swing.JCheckBox();
222 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
224 org.openide.awt.Mnemonics.setLocalizedText(newTagNameLabel,
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.newTagNameLabel.text"));
226 tagNameTextField.setText(
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.tagNameTextField.text"));
228 org.openide.awt.Mnemonics.setLocalizedText(cancelButton,
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.cancelButton.text"));
229 cancelButton.addActionListener(
new java.awt.event.ActionListener() {
230 public void actionPerformed(java.awt.event.ActionEvent evt) {
231 cancelButtonActionPerformed(evt);
235 org.openide.awt.Mnemonics.setLocalizedText(okButton,
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.okButton.text"));
236 okButton.addActionListener(
new java.awt.event.ActionListener() {
237 public void actionPerformed(java.awt.event.ActionEvent evt) {
238 okButtonActionPerformed(evt);
242 descriptionTextArea.setColumns(20);
243 descriptionTextArea.setFont(
new java.awt.Font(
"Tahoma", 0, 11));
244 descriptionTextArea.setRows(3);
245 descriptionScrollPane.setViewportView(descriptionTextArea);
247 org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel,
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.descriptionLabel.text"));
249 org.openide.awt.Mnemonics.setLocalizedText(notableCheckbox,
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.notableCheckbox.text"));
251 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
252 getContentPane().setLayout(layout);
253 layout.setHorizontalGroup(
254 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
255 .addGroup(layout.createSequentialGroup()
257 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
258 .addComponent(tagNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE)
259 .addGroup(layout.createSequentialGroup()
260 .addGap(0, 0, Short.MAX_VALUE)
261 .addComponent(okButton)
262 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
263 .addComponent(cancelButton))
264 .addComponent(newTagNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
265 .addComponent(descriptionScrollPane, javax.swing.GroupLayout.Alignment.TRAILING)
266 .addGroup(layout.createSequentialGroup()
267 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
268 .addComponent(notableCheckbox)
269 .addComponent(descriptionLabel))
270 .addGap(0, 0, Short.MAX_VALUE)))
273 layout.setVerticalGroup(
274 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
275 .addGroup(layout.createSequentialGroup()
277 .addComponent(newTagNameLabel)
278 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
279 .addComponent(tagNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
280 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
281 .addComponent(descriptionLabel)
282 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
283 .addComponent(descriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
284 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
285 .addComponent(notableCheckbox)
286 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 42, Short.MAX_VALUE)
287 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
288 .addComponent(cancelButton)
289 .addComponent(okButton)))
295 private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
296 doButtonAction(
true);
299 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {
300 doButtonAction(
false);
305 private javax.swing.JButton cancelButton;
306 private javax.swing.JLabel descriptionLabel;
307 private javax.swing.JScrollPane descriptionScrollPane;
308 private javax.swing.JTextArea descriptionTextArea;
309 private javax.swing.JLabel newTagNameLabel;
310 private javax.swing.JCheckBox notableCheckbox;
311 private javax.swing.JButton okButton;
312 private javax.swing.JTextField tagNameTextField;