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.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;
47 private static final String
TAG_ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
48 private final HashMap<String, TagName>
tagNames =
new HashMap<>();
60 return doDialog(WindowManager.getDefault().getMainWindow());
73 public static TagName
doDialog(
final Window owner) {
80 ModalityType.APPLICATION_MODAL);
81 setIconImage(ImageUtilities.loadImage(TAG_ICON_PATH));
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() {
91 public void actionPerformed(ActionEvent e) {
99 List<TagName> currentTagNames = null;
102 }
catch (TskCoreException ex) {
105 if (null != currentTagNames) {
106 for (TagName name : currentTagNames) {
107 this.tagNames.put(name.getDisplayName(), name);
110 currentTagNames =
new ArrayList<>();
116 tagsTable.setCellSelectionEnabled(
false);
121 this.setLocationRelativeTo(owner);
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(
"|"));
138 private final ArrayList<TagName> tagNames =
new ArrayList<>();
141 for (TagName tagName : tagNames) {
142 this.tagNames.add(tagName);
148 return tagNames.size();
163 return tagNames.get(rowIndex).getDisplayName();
172 @SuppressWarnings(
"unchecked")
177 okButton =
new javax.swing.JButton();
185 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
186 addKeyListener(
new java.awt.event.KeyAdapter() {
187 public void keyReleased(java.awt.event.KeyEvent evt) {
193 cancelButton.addActionListener(
new java.awt.event.ActionListener() {
194 public void actionPerformed(java.awt.event.ActionEvent evt) {
199 org.openide.awt.Mnemonics.setLocalizedText(
okButton,
org.openide.util.NbBundle.getMessage(
GetTagNameDialog.class,
"GetTagNameDialog.okButton.text"));
200 okButton.addActionListener(
new java.awt.event.ActionListener() {
201 public void actionPerformed(java.awt.event.ActionEvent evt) {
206 jScrollPane1.setBackground(
new java.awt.Color(255, 255, 255));
208 tagsTable.setBackground(
new java.awt.Color(240, 240, 240));
209 tagsTable.setModel(
new javax.swing.table.DefaultTableModel(
224 newTagPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
GetTagNameDialog.class,
"GetTagNameDialog.newTagPanel.border.title")));
229 tagNameField.addKeyListener(
new java.awt.event.KeyAdapter() {
230 public void keyReleased(java.awt.event.KeyEvent evt) {
235 javax.swing.GroupLayout newTagPanelLayout =
new javax.swing.GroupLayout(
newTagPanel);
237 newTagPanelLayout.setHorizontalGroup(
238 newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
239 .addGroup(newTagPanelLayout.createSequentialGroup()
243 .addComponent(
tagNameField, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
246 newTagPanelLayout.setVerticalGroup(
247 newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
248 .addGroup(newTagPanelLayout.createSequentialGroup()
250 .addGroup(newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
252 .addComponent(
tagNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
253 .addContainerGap(164, Short.MAX_VALUE))
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()
262 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
263 .addComponent(
jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE)
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)
270 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
272 .addComponent(
newTagPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
275 layout.setVerticalGroup(
276 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
277 .addGroup(layout.createSequentialGroup()
279 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
280 .addGroup(layout.createSequentialGroup()
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)
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);
309 JOptionPane.showMessageDialog(null,
310 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.illegalChars.msg"),
311 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.illegalCharsErr"),
312 JOptionPane.ERROR_MESSAGE);
314 tagName = tagNames.get(tagDisplayName);
315 if (tagName == null) {
319 }
catch (TskCoreException ex) {
320 Logger.
getLogger(AddTagAction.class.getName()).log(Level.SEVERE,
"Error adding " + tagDisplayName +
" tag name", ex);
321 JOptionPane.showMessageDialog(null,
322 NbBundle.getMessage(
this.getClass(),
323 "GetTagNameDialog.unableToAddTagNameToCase.msg",
325 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.taggingErr"),
326 JOptionPane.ERROR_MESSAGE);
329 Logger.
getLogger(AddTagAction.class.getName()).log(Level.SEVERE,
"Error adding " + tagDisplayName +
" tag name", ex);
330 JOptionPane.showMessageDialog(null,
331 NbBundle.getMessage(
this.getClass(),
332 "GetTagNameDialog.tagNameAlreadyDef.msg",
334 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.dupTagErr"),
335 JOptionPane.ERROR_MESSAGE);
345 if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
351 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)
final HashMap< String, TagName > tagNames
static TagName doDialog(final Window owner)
javax.swing.JPanel newTagPanel
GetTagNameDialog(final Window owner)
TagsManager getTagsManager()
javax.swing.JLabel tagNameLabel
void formKeyReleased(java.awt.event.KeyEvent evt)
javax.swing.JButton okButton
javax.swing.JTextField tagNameField
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
static TagName doDialog()
boolean containsIllegalCharacters(String content)
static final String TAG_ICON_PATH
void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)