19 package org.sleuthkit.autopsy.actions;
21 import java.awt.event.ActionEvent;
22 import java.awt.event.KeyEvent;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.logging.Level;
27 import javax.swing.AbstractAction;
28 import javax.swing.ActionMap;
29 import javax.swing.InputMap;
30 import javax.swing.JComponent;
31 import javax.swing.JDialog;
32 import javax.swing.JFrame;
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;
46 private static final String
TAG_ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
47 private final HashMap<String, TagName>
tagNames =
new HashMap<>();
56 super((JFrame)WindowManager.getDefault().getMainWindow(),
59 setIconImage(ImageUtilities.loadImage(TAG_ICON_PATH));
63 String cancelName = NbBundle.getMessage(this.getClass(),
"GetTagNameDialog.cancelName");
64 InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
65 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
66 ActionMap actionMap = getRootPane().getActionMap();
67 actionMap.put(cancelName,
new AbstractAction() {
69 public void actionPerformed(ActionEvent e) {
77 List<TagName> currentTagNames = null;
84 if (null != currentTagNames) {
85 for (
TagName name : currentTagNames) {
86 this.tagNames.put(name.getDisplayName(), name);
90 currentTagNames =
new ArrayList<>();
101 this.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
106 return (content.contains(
"\\")||
107 content.contains(
":") ||
108 content.contains(
"*") ||
109 content.contains(
"?") ||
110 content.contains(
"\"")||
111 content.contains(
"<") ||
112 content.contains(
">") ||
113 content.contains(
"|"));
117 private final ArrayList<TagName> tagNames =
new ArrayList<>();
120 for (
TagName tagName : tagNames) {
121 this.tagNames.add(tagName);
127 return tagNames.size();
142 return tagNames.get(rowIndex).getDisplayName();
151 @SuppressWarnings(
"unchecked")
156 okButton =
new javax.swing.JButton();
164 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
165 addKeyListener(
new java.awt.event.KeyAdapter() {
166 public void keyReleased(java.awt.event.KeyEvent evt) {
172 cancelButton.addActionListener(
new java.awt.event.ActionListener() {
173 public void actionPerformed(java.awt.event.ActionEvent evt) {
178 org.openide.awt.Mnemonics.setLocalizedText(
okButton,
org.openide.util.NbBundle.getMessage(
GetTagNameDialog.class,
"GetTagNameDialog.okButton.text"));
179 okButton.addActionListener(
new java.awt.event.ActionListener() {
180 public void actionPerformed(java.awt.event.ActionEvent evt) {
185 jScrollPane1.setBackground(
new java.awt.Color(255, 255, 255));
187 tagsTable.setBackground(
new java.awt.Color(240, 240, 240));
188 tagsTable.setModel(
new javax.swing.table.DefaultTableModel(
203 newTagPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(
GetTagNameDialog.class,
"GetTagNameDialog.newTagPanel.border.title")));
208 tagNameField.addKeyListener(
new java.awt.event.KeyAdapter() {
209 public void keyReleased(java.awt.event.KeyEvent evt) {
214 javax.swing.GroupLayout newTagPanelLayout =
new javax.swing.GroupLayout(
newTagPanel);
216 newTagPanelLayout.setHorizontalGroup(
217 newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
218 .addGroup(newTagPanelLayout.createSequentialGroup()
222 .addComponent(
tagNameField, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
225 newTagPanelLayout.setVerticalGroup(
226 newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
227 .addGroup(newTagPanelLayout.createSequentialGroup()
229 .addGroup(newTagPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
231 .addComponent(
tagNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
232 .addContainerGap(164, Short.MAX_VALUE))
235 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
236 getContentPane().setLayout(layout);
237 layout.setHorizontalGroup(
238 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
239 .addGroup(layout.createSequentialGroup()
241 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
242 .addComponent(
jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE)
244 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
245 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
246 .addGroup(layout.createSequentialGroup()
247 .addGap(0, 233, Short.MAX_VALUE)
249 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
251 .addComponent(
newTagPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
254 layout.setVerticalGroup(
255 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
256 .addGroup(layout.createSequentialGroup()
258 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
259 .addGroup(layout.createSequentialGroup()
261 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
262 .addComponent(
jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
263 .addComponent(
newTagPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
264 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
265 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
281 if (tagDisplayName.isEmpty()) {
282 JOptionPane.showMessageDialog(null,
283 NbBundle.getMessage(
this.getClass(),
284 "GetTagNameDialog.mustSupplyTtagName.msg"),
285 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.tagNameErr"),
286 JOptionPane.ERROR_MESSAGE);
289 JOptionPane.showMessageDialog(null,
290 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.illegalChars.msg"),
291 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.illegalCharsErr"),
292 JOptionPane.ERROR_MESSAGE);
295 tagName = tagNames.get(tagDisplayName);
296 if (tagName == null) {
302 Logger.
getLogger(AddTagAction.class.getName()).log(Level.SEVERE,
"Error adding " + tagDisplayName +
" tag name", ex);
303 JOptionPane.showMessageDialog(null,
304 NbBundle.getMessage(
this.getClass(),
305 "GetTagNameDialog.unableToAddTagNameToCase.msg",
307 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.taggingErr"),
308 JOptionPane.ERROR_MESSAGE);
312 Logger.
getLogger(AddTagAction.class.getName()).log(Level.SEVERE,
"Error adding " + tagDisplayName +
" tag name", ex);
313 JOptionPane.showMessageDialog(null,
314 NbBundle.getMessage(
this.getClass(),
315 "GetTagNameDialog.tagNameAlreadyDef.msg",
317 NbBundle.getMessage(
this.getClass(),
"GetTagNameDialog.dupTagErr"),
318 JOptionPane.ERROR_MESSAGE);
329 if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
335 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
javax.swing.JPanel newTagPanel
TagsManager getTagsManager()
javax.swing.JLabel tagNameLabel
void formKeyReleased(java.awt.event.KeyEvent evt)
javax.swing.JButton okButton
javax.swing.JTextField tagNameField
static Case getCurrentCase()
static TagName doDialog()
boolean containsIllegalCharacters(String content)
static final String TAG_ICON_PATH
static Logger getLogger(String name)
void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)