19 package org.sleuthkit.autopsy.actions;
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.List;
27 import java.util.TreeMap;
28 import java.util.logging.Level;
29 import javax.swing.AbstractAction;
30 import javax.swing.ActionMap;
31 import javax.swing.InputMap;
32 import javax.swing.JComponent;
33 import javax.swing.JDialog;
34 import javax.swing.JOptionPane;
35 import javax.swing.KeyStroke;
36 import javax.swing.table.AbstractTableModel;
37 import org.openide.util.ImageUtilities;
38 import org.openide.util.NbBundle;
39 import org.openide.windows.WindowManager;
49 private static final String
TAG_ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
50 private final Map<String, TagName>
tagNamesMap =
new TreeMap<>();
62 return doDialog(WindowManager.getDefault().getMainWindow());
84 ModalityType.APPLICATION_MODAL);
88 setIconImage(ImageUtilities.loadImage(TAG_ICON_PATH));
92 String cancelName = NbBundle.getMessage(this.getClass(),
"GetTagNameDialog.cancelName");
93 InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
94 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
95 ActionMap actionMap = getRootPane().getActionMap();
96 actionMap.put(cancelName,
new AbstractAction() {
97 private static final long serialVersionUID = 1L;
100 public void actionPerformed(ActionEvent e) {
110 }
catch (TskCoreException ex) {
117 tagsTable.setCellSelectionEnabled(
false);
122 this.setLocationRelativeTo(this.getOwner());
128 private static final long serialVersionUID = 1L;
132 for (String tagDisplayName : tagDisplayNames) {
133 this.tagDisplayNames.add(tagDisplayName);
139 return tagDisplayNames.size();
154 return tagDisplayNames.get(rowIndex);
163 @SuppressWarnings(
"unchecked")
168 okButton =
new javax.swing.JButton();
176 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
177 addKeyListener(
new java.awt.event.KeyAdapter() {
178 public void keyReleased(java.awt.event.KeyEvent evt) {
184 cancelButton.addActionListener(
new java.awt.event.ActionListener() {
185 public void actionPerformed(java.awt.event.ActionEvent evt) {
190 org.openide.awt.Mnemonics.setLocalizedText(
okButton,
org.openide.util.NbBundle.getMessage(
GetTagNameDialog.class,
"GetTagNameDialog.okButton.text"));
191 okButton.addActionListener(
new java.awt.event.ActionListener() {
192 public void actionPerformed(java.awt.event.ActionEvent evt) {
197 jScrollPane1.setBackground(
new java.awt.Color(255, 255, 255));
199 tagsTable.setBackground(
new java.awt.Color(240, 240, 240));
200 tagsTable.setModel(
new javax.swing.table.DefaultTableModel(
215 newTagPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
GetTagNameDialog.class,
"GetTagNameDialog.newTagPanel.border.title")));
220 tagNameField.addKeyListener(
new java.awt.event.KeyAdapter() {
221 public void keyReleased(java.awt.event.KeyEvent evt) {
226 javax.swing.GroupLayout newTagPanelLayout =
new javax.swing.GroupLayout(
newTagPanel);
228 newTagPanelLayout.setHorizontalGroup(
229 newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
230 .addGroup(newTagPanelLayout.createSequentialGroup()
234 .addComponent(
tagNameField, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
237 newTagPanelLayout.setVerticalGroup(
238 newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
239 .addGroup(newTagPanelLayout.createSequentialGroup()
241 .addGroup(newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
243 .addComponent(
tagNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
244 .addContainerGap(164, Short.MAX_VALUE))
247 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
248 getContentPane().setLayout(layout);
249 layout.setHorizontalGroup(
250 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
251 .addGroup(layout.createSequentialGroup()
253 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
254 .addComponent(
jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE)
256 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
257 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
258 .addGroup(layout.createSequentialGroup()
259 .addGap(0, 233, Short.MAX_VALUE)
261 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
263 .addComponent(
newTagPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
266 layout.setVerticalGroup(
267 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
268 .addGroup(layout.createSequentialGroup()
270 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
271 .addGroup(layout.createSequentialGroup()
273 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
274 .addComponent(
jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
275 .addComponent(
newTagPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
276 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
277 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
293 if (tagDisplayName.isEmpty()) {
294 JOptionPane.showMessageDialog(null,
295 NbBundle.getMessage(
this.getClass(),
296 "GetTagNameDialog.mustSupplyTtagName.msg"),
297 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.tagNameErr"),
298 JOptionPane.ERROR_MESSAGE);
300 JOptionPane.showMessageDialog(null,
301 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.illegalChars.msg"),
302 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.illegalCharsErr"),
303 JOptionPane.ERROR_MESSAGE);
305 tagName = tagNamesMap.get(tagDisplayName);
306 if (tagName == null) {
310 }
catch (TskCoreException ex) {
311 Logger.
getLogger(AddTagAction.class.getName()).log(Level.SEVERE,
"Error adding " + tagDisplayName +
" tag name", ex);
312 JOptionPane.showMessageDialog(null,
313 NbBundle.getMessage(
this.getClass(),
314 "GetTagNameDialog.unableToAddTagNameToCase.msg",
316 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.taggingErr"),
317 JOptionPane.ERROR_MESSAGE);
322 }
catch (TskCoreException ex1) {
323 Logger.
getLogger(AddTagAction.class.getName()).log(Level.SEVERE, tagDisplayName +
" exists in database but an error occurred in retrieving it.", ex1);
324 JOptionPane.showMessageDialog(null,
325 NbBundle.getMessage(
this.getClass(),
326 "GetTagNameDialog.tagNameExistsTskCore.msg",
328 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.dupTagErr"),
329 JOptionPane.ERROR_MESSAGE);
340 if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
346 if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
javax.swing.JLabel preexistingLabel
void tagNameFieldKeyReleased(java.awt.event.KeyEvent evt)
javax.swing.JButton cancelButton
javax.swing.JScrollPane jScrollPane1
javax.swing.JTable tagsTable
void okButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JPanel newTagPanel
static TagName doDialog(Window owner)
final Map< String, TagName > tagNamesMap
TagsManager getTagsManager()
javax.swing.JLabel tagNameLabel
void formKeyReleased(java.awt.event.KeyEvent evt)
javax.swing.JButton okButton
static final long serialVersionUID
javax.swing.JTextField tagNameField
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
static TagName doDialog()
GetTagNameDialog(Window owner)
static final String TAG_ICON_PATH
void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)