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.setRows(3);
244 descriptionScrollPane.setViewportView(descriptionTextArea);
246 org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel,
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.descriptionLabel.text"));
248 org.openide.awt.Mnemonics.setLocalizedText(notableCheckbox,
org.openide.util.NbBundle.getMessage(TagNameDialog.class,
"TagNameDialog.notableCheckbox.text"));
250 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
251 getContentPane().setLayout(layout);
252 layout.setHorizontalGroup(
253 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
254 .addGroup(layout.createSequentialGroup()
256 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
257 .addComponent(tagNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE)
258 .addGroup(layout.createSequentialGroup()
259 .addGap(0, 0, Short.MAX_VALUE)
260 .addComponent(okButton)
261 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
262 .addComponent(cancelButton))
263 .addComponent(newTagNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
264 .addComponent(descriptionScrollPane, javax.swing.GroupLayout.Alignment.TRAILING)
265 .addGroup(layout.createSequentialGroup()
266 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
267 .addComponent(notableCheckbox)
268 .addComponent(descriptionLabel))
269 .addGap(0, 0, Short.MAX_VALUE)))
272 layout.setVerticalGroup(
273 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
274 .addGroup(layout.createSequentialGroup()
276 .addComponent(newTagNameLabel)
277 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
278 .addComponent(tagNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
279 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
280 .addComponent(descriptionLabel)
281 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
282 .addComponent(descriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
283 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
284 .addComponent(notableCheckbox)
285 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 42, Short.MAX_VALUE)
286 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
287 .addComponent(cancelButton)
288 .addComponent(okButton)))
294 private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
295 doButtonAction(
true);
298 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {
299 doButtonAction(
false);
304 private javax.swing.JButton cancelButton;
305 private javax.swing.JLabel descriptionLabel;
306 private javax.swing.JScrollPane descriptionScrollPane;
307 private javax.swing.JTextArea descriptionTextArea;
308 private javax.swing.JLabel newTagNameLabel;
309 private javax.swing.JCheckBox notableCheckbox;
310 private javax.swing.JButton okButton;
311 private javax.swing.JTextField tagNameTextField;