Autopsy  4.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
GetTagNameDialog.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2013 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.actions;
20 
21 import java.awt.Window;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.KeyEvent;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.logging.Level;
28 import javax.swing.AbstractAction;
29 import javax.swing.ActionMap;
30 import javax.swing.InputMap;
31 import javax.swing.JComponent;
32 import javax.swing.JDialog;
33 import javax.swing.JOptionPane;
34 import javax.swing.KeyStroke;
35 import javax.swing.table.AbstractTableModel;
36 import org.openide.util.ImageUtilities;
37 import org.openide.util.NbBundle;
38 import org.openide.windows.WindowManager;
42 import org.sleuthkit.datamodel.TagName;
43 import org.sleuthkit.datamodel.TskCoreException;
44 
45 public class GetTagNameDialog extends JDialog {
46 
47  private static final String TAG_ICON_PATH = "org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png"; //NON-NLS
48  private final HashMap<String, TagName> tagNames = new HashMap<>();
49  private TagName tagName = null;
50 
59  public static TagName doDialog() {
60  return doDialog(WindowManager.getDefault().getMainWindow());
61  }
62 
73  public static TagName doDialog(final Window owner) {
74  return new GetTagNameDialog(owner).tagName;
75  }
76 
77  private GetTagNameDialog(final Window owner) {
78  super(owner,
79  NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.createTag"),
80  ModalityType.APPLICATION_MODAL);
81  setIconImage(ImageUtilities.loadImage(TAG_ICON_PATH));
83 
84  // Set up the dialog to close when Esc is pressed.
85  String cancelName = NbBundle.getMessage(this.getClass(), "GetTagNameDialog.cancelName");
86  InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
87  inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
88  ActionMap actionMap = getRootPane().getActionMap();
89  actionMap.put(cancelName, new AbstractAction() {
90  @Override
91  public void actionPerformed(ActionEvent e) {
93  }
94  });
95 
96  // Get the current set of tag names and hash them for a speedy lookup in
97  // case the user chooses an existing tag name from the tag names table.
99  List<TagName> currentTagNames = null;
100  try {
101  currentTagNames = tagsManager.getAllTagNames();
102  } catch (TskCoreException ex) {
103  Logger.getLogger(GetTagNameDialog.class.getName()).log(Level.SEVERE, "Failed to get tag names", ex); //NON-NLS
104  }
105  if (null != currentTagNames) {
106  for (TagName name : currentTagNames) {
107  this.tagNames.put(name.getDisplayName(), name);
108  }
109  } else {
110  currentTagNames = new ArrayList<>();
111  }
112 
113  // Populate the tag names table.
114  tagsTable.setModel(new TagsTableModel(currentTagNames));
115  tagsTable.setTableHeader(null);
116  tagsTable.setCellSelectionEnabled(false);
117  tagsTable.setFocusable(false);
118  tagsTable.setRowHeight(tagsTable.getRowHeight() + 5);
119 
120  // Center and show the dialog box.
121  this.setLocationRelativeTo(owner);
122  setVisible(true);
123  }
124 
125  private boolean containsIllegalCharacters(String content) {
126  return (content.contains("\\")
127  || content.contains(":")
128  || content.contains("*")
129  || content.contains("?")
130  || content.contains("\"")
131  || content.contains("<")
132  || content.contains(">")
133  || content.contains("|"));
134  }
135 
136  private class TagsTableModel extends AbstractTableModel {
137 
138  private final ArrayList<TagName> tagNames = new ArrayList<>();
139 
140  TagsTableModel(List<TagName> tagNames) {
141  for (TagName tagName : tagNames) {
142  this.tagNames.add(tagName);
143  }
144  }
145 
146  @Override
147  public int getRowCount() {
148  return tagNames.size();
149  }
150 
151  @Override
152  public boolean isCellEditable(int rowIndex, int columnIndex) {
153  return false;
154  }
155 
156  @Override
157  public int getColumnCount() {
158  return 1;
159  }
160 
161  @Override
162  public String getValueAt(int rowIndex, int columnIndex) {
163  return tagNames.get(rowIndex).getDisplayName();
164  }
165  }
166 
172  @SuppressWarnings("unchecked")
173  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
174  private void initComponents() {
175 
176  cancelButton = new javax.swing.JButton();
177  okButton = new javax.swing.JButton();
178  jScrollPane1 = new javax.swing.JScrollPane();
179  tagsTable = new javax.swing.JTable();
180  preexistingLabel = new javax.swing.JLabel();
181  newTagPanel = new javax.swing.JPanel();
182  tagNameLabel = new javax.swing.JLabel();
183  tagNameField = new javax.swing.JTextField();
184 
185  setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
186  addKeyListener(new java.awt.event.KeyAdapter() {
187  public void keyReleased(java.awt.event.KeyEvent evt) {
188  formKeyReleased(evt);
189  }
190  });
191 
192  org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.cancelButton.text")); // NOI18N
193  cancelButton.addActionListener(new java.awt.event.ActionListener() {
194  public void actionPerformed(java.awt.event.ActionEvent evt) {
196  }
197  });
198 
199  org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.okButton.text")); // NOI18N
200  okButton.addActionListener(new java.awt.event.ActionListener() {
201  public void actionPerformed(java.awt.event.ActionEvent evt) {
203  }
204  });
205 
206  jScrollPane1.setBackground(new java.awt.Color(255, 255, 255));
207 
208  tagsTable.setBackground(new java.awt.Color(240, 240, 240));
209  tagsTable.setModel(new javax.swing.table.DefaultTableModel(
210  new Object [][] {
211 
212  },
213  new String [] {
214 
215  }
216  ));
217  tagsTable.setShowHorizontalLines(false);
218  tagsTable.setShowVerticalLines(false);
219  tagsTable.setTableHeader(null);
220  jScrollPane1.setViewportView(tagsTable);
221 
222  org.openide.awt.Mnemonics.setLocalizedText(preexistingLabel, org.openide.util.NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.preexistingLabel.text")); // NOI18N
223 
224  newTagPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.newTagPanel.border.title"))); // NOI18N
225 
226  org.openide.awt.Mnemonics.setLocalizedText(tagNameLabel, org.openide.util.NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.tagNameLabel.text")); // NOI18N
227 
228  tagNameField.setText(org.openide.util.NbBundle.getMessage(GetTagNameDialog.class, "GetTagNameDialog.tagNameField.text")); // NOI18N
229  tagNameField.addKeyListener(new java.awt.event.KeyAdapter() {
230  public void keyReleased(java.awt.event.KeyEvent evt) {
232  }
233  });
234 
235  javax.swing.GroupLayout newTagPanelLayout = new javax.swing.GroupLayout(newTagPanel);
236  newTagPanel.setLayout(newTagPanelLayout);
237  newTagPanelLayout.setHorizontalGroup(
238  newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
239  .addGroup(newTagPanelLayout.createSequentialGroup()
240  .addContainerGap()
241  .addComponent(tagNameLabel)
242  .addGap(36, 36, 36)
243  .addComponent(tagNameField, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
244  .addContainerGap())
245  );
246  newTagPanelLayout.setVerticalGroup(
247  newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
248  .addGroup(newTagPanelLayout.createSequentialGroup()
249  .addContainerGap()
250  .addGroup(newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
251  .addComponent(tagNameLabel)
252  .addComponent(tagNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
253  .addContainerGap(164, Short.MAX_VALUE))
254  );
255 
256  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
257  getContentPane().setLayout(layout);
258  layout.setHorizontalGroup(
259  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
260  .addGroup(layout.createSequentialGroup()
261  .addContainerGap()
262  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
263  .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE)
264  .addComponent(preexistingLabel))
265  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
266  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
267  .addGroup(layout.createSequentialGroup()
268  .addGap(0, 233, Short.MAX_VALUE)
269  .addComponent(okButton)
270  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
271  .addComponent(cancelButton))
272  .addComponent(newTagPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
273  .addContainerGap())
274  );
275  layout.setVerticalGroup(
276  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
277  .addGroup(layout.createSequentialGroup()
278  .addContainerGap()
279  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
280  .addGroup(layout.createSequentialGroup()
281  .addComponent(preexistingLabel)
282  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
283  .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
284  .addComponent(newTagPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
285  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
286  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
287  .addComponent(cancelButton)
288  .addComponent(okButton))
289  .addContainerGap())
290  );
291 
292  pack();
293  }// </editor-fold>//GEN-END:initComponents
294 
295  private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
296  tagName = null;
297  dispose();
298  }//GEN-LAST:event_cancelButtonActionPerformed
299 
300  private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
301  String tagDisplayName = tagNameField.getText();
302  if (tagDisplayName.isEmpty()) {
303  JOptionPane.showMessageDialog(null,
304  NbBundle.getMessage(this.getClass(),
305  "GetTagNameDialog.mustSupplyTtagName.msg"),
306  NbBundle.getMessage(this.getClass(), "GetTagNameDialog.tagNameErr"),
307  JOptionPane.ERROR_MESSAGE);
308  } else if (containsIllegalCharacters(tagDisplayName)) {
309  JOptionPane.showMessageDialog(null,
310  NbBundle.getMessage(this.getClass(), "GetTagNameDialog.illegalChars.msg"),
311  NbBundle.getMessage(this.getClass(), "GetTagNameDialog.illegalCharsErr"),
312  JOptionPane.ERROR_MESSAGE);
313  } else {
314  tagName = tagNames.get(tagDisplayName);
315  if (tagName == null) {
316  try {
317  tagName = Case.getCurrentCase().getServices().getTagsManager().addTagName(tagDisplayName);
318  dispose();
319  } catch (TskCoreException ex) {
320  Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, "Error adding " + tagDisplayName + " tag name", ex); //NON-NLS
321  JOptionPane.showMessageDialog(null,
322  NbBundle.getMessage(this.getClass(),
323  "GetTagNameDialog.unableToAddTagNameToCase.msg",
324  tagDisplayName),
325  NbBundle.getMessage(this.getClass(), "GetTagNameDialog.taggingErr"),
326  JOptionPane.ERROR_MESSAGE);
327  tagName = null;
329  Logger.getLogger(AddTagAction.class.getName()).log(Level.SEVERE, "Error adding " + tagDisplayName + " tag name", ex); //NON-NLS
330  JOptionPane.showMessageDialog(null,
331  NbBundle.getMessage(this.getClass(),
332  "GetTagNameDialog.tagNameAlreadyDef.msg",
333  tagDisplayName),
334  NbBundle.getMessage(this.getClass(), "GetTagNameDialog.dupTagErr"),
335  JOptionPane.ERROR_MESSAGE);
336  tagName = null;
337  }
338  } else {
339  dispose();
340  }
341  }
342  }//GEN-LAST:event_okButtonActionPerformed
343 
344  private void formKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyReleased
345  if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
347  }
348  }//GEN-LAST:event_formKeyReleased
349 
350  private void tagNameFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tagNameFieldKeyReleased
351  if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
353  }
354  }//GEN-LAST:event_tagNameFieldKeyReleased
355 
356  // Variables declaration - do not modify//GEN-BEGIN:variables
357  private javax.swing.JButton cancelButton;
358  private javax.swing.JScrollPane jScrollPane1;
359  private javax.swing.JPanel newTagPanel;
360  private javax.swing.JButton okButton;
361  private javax.swing.JLabel preexistingLabel;
362  private javax.swing.JTextField tagNameField;
363  private javax.swing.JLabel tagNameLabel;
364  private javax.swing.JTable tagsTable;
365  // End of variables declaration//GEN-END:variables
366 
367 }
void tagNameFieldKeyReleased(java.awt.event.KeyEvent evt)
void okButtonActionPerformed(java.awt.event.ActionEvent evt)
final HashMap< String, TagName > tagNames
static TagName doDialog(final Window owner)
void formKeyReleased(java.awt.event.KeyEvent evt)
synchronized static Logger getLogger(String name)
Definition: Logger.java:166
void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)

Copyright © 2012-2015 Basis Technology. Generated on: Wed Apr 6 2016
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.