19 package org.sleuthkit.autopsy.actions;
21 import java.awt.Component;
22 import java.awt.Window;
23 import java.awt.event.ActionEvent;
24 import java.awt.event.KeyEvent;
25 import java.util.ArrayList;
26 import java.util.logging.Level;
27 import java.util.List;
29 import java.util.TreeMap;
30 import javax.swing.AbstractAction;
31 import javax.swing.ActionMap;
32 import javax.swing.DefaultListCellRenderer;
33 import javax.swing.InputMap;
34 import javax.swing.JComponent;
35 import javax.swing.JDialog;
36 import javax.swing.JList;
37 import javax.swing.KeyStroke;
38 import org.openide.util.NbBundle;
39 import org.openide.windows.WindowManager;
52 @SuppressWarnings(
"PMD.SingularField")
55 private static final long serialVersionUID = 1L;
64 this.tagName = tagName;
65 this.comment = comment;
87 return doDialog(WindowManager.getDefault().getMainWindow());
114 return tagNameAndComment;
120 ModalityType.APPLICATION_MODAL);
125 tagCombo.setRenderer(
new DefaultListCellRenderer() {
126 private static final long serialVersionUID = 1L;
129 public Component getListCellRendererComponent(JList<?> list, Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
131 return super.getListCellRendererComponent(list, newValue, index, isSelected, cellHasFocus);
135 String cancelName = NbBundle.getMessage(this.getClass(),
"GetTagNameAndCommentDialog.cancelName");
136 InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
138 inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
139 ActionMap actionMap = getRootPane().getActionMap();
141 actionMap.put(cancelName,
new AbstractAction() {
142 private static final long serialVersionUID = 1L;
145 public void actionPerformed(ActionEvent e) {
155 Map<String, List<TagName>> tagSetMap =
new TreeMap<>();
156 List<TagName> tagNamesList =
new ArrayList<>();
157 List<TagName> standardTagNamesList =
new ArrayList<>();
159 tagNamesMap.entrySet().stream().map((entry) -> entry.getValue()).forEachOrdered((tagName) -> {
160 TagSet tagSet = null;
163 }
catch (TskCoreException ex) {
165 .getName()).log(Level.SEVERE,
"Failed to get tag set", ex);
168 if(tagSetMap.get(tagSet.getName()) == null) {
169 tagSetMap.put(tagSet.getName(), tagSet.getTagNames());
171 }
else if (standardTagNames.contains(tagName.getDisplayName())) {
172 standardTagNamesList.add(tagName);
174 tagNamesList.add(tagName);
178 tagNamesList.forEach((tag) -> {
179 tagCombo.addItem(tag);
182 standardTagNamesList.forEach((tag) -> {
183 tagCombo.addItem(tag);
186 tagSetMap.values().forEach((tagNameList)->{
187 tagNameList.forEach((tag)->{
188 tagCombo.addItem(tag);
194 .getName()).log(Level.SEVERE,
"Failed to get tag names", ex);
198 this.setLocationRelativeTo(this.getOwner());
207 @SuppressWarnings(
"unchecked")
209 private
void initComponents() {
211 okButton =
new javax.swing.JButton();
212 cancelButton =
new javax.swing.JButton();
213 tagCombo =
new javax.swing.JComboBox<TagName>();
214 tagLabel =
new javax.swing.JLabel();
215 commentLabel =
new javax.swing.JLabel();
216 newTagButton =
new javax.swing.JButton();
217 jScrollPane1 =
new javax.swing.JScrollPane();
218 commentText =
new javax.swing.JTextArea();
220 addWindowListener(
new java.awt.event.WindowAdapter() {
221 public void windowClosing(java.awt.event.WindowEvent evt) {
226 org.openide.awt.Mnemonics.setLocalizedText(okButton,
org.openide.util.NbBundle.getMessage(
GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.okButton.text"));
227 okButton.addActionListener(
new java.awt.event.ActionListener() {
228 public void actionPerformed(java.awt.event.ActionEvent evt) {
229 okButtonActionPerformed(evt);
233 org.openide.awt.Mnemonics.setLocalizedText(cancelButton,
org.openide.util.NbBundle.getMessage(
GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.cancelButton.text"));
234 cancelButton.addActionListener(
new java.awt.event.ActionListener() {
235 public void actionPerformed(java.awt.event.ActionEvent evt) {
236 cancelButtonActionPerformed(evt);
240 tagCombo.setToolTipText(
org.openide.util.NbBundle.getMessage(
GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.tagCombo.toolTipText"));
242 org.openide.awt.Mnemonics.setLocalizedText(tagLabel,
org.openide.util.NbBundle.getMessage(
GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.tagLabel.text"));
244 org.openide.awt.Mnemonics.setLocalizedText(commentLabel,
org.openide.util.NbBundle.getMessage(
GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.commentLabel.text"));
246 org.openide.awt.Mnemonics.setLocalizedText(newTagButton,
org.openide.util.NbBundle.getMessage(
GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.newTagButton.text"));
247 newTagButton.addActionListener(
new java.awt.event.ActionListener() {
248 public void actionPerformed(java.awt.event.ActionEvent evt) {
249 newTagButtonActionPerformed(evt);
253 commentText.setColumns(20);
254 commentText.setRows(5);
256 commentText.setToolTipText(
org.openide.util.NbBundle.getMessage(
GetTagNameAndCommentDialog.class,
"GetTagNameAndCommentDialog.commentText.toolTipText"));
257 jScrollPane1.setViewportView(commentText);
259 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
260 getContentPane().setLayout(layout);
261 layout.setHorizontalGroup(
262 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
263 .addGroup(layout.createSequentialGroup()
265 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
266 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
267 .addComponent(newTagButton)
268 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
269 .addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
270 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
271 .addComponent(cancelButton))
272 .addGroup(layout.createSequentialGroup()
273 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
274 .addComponent(commentLabel)
275 .addComponent(tagLabel))
276 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
277 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
278 .addComponent(tagCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
279 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 318, Short.MAX_VALUE))))
283 layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {cancelButton, okButton});
285 layout.setVerticalGroup(
286 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
287 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
289 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
290 .addComponent(tagCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
291 .addComponent(tagLabel))
292 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
293 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
294 .addComponent(commentLabel)
295 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE))
296 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 22, Short.MAX_VALUE)
297 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
298 .addComponent(cancelButton)
299 .addComponent(okButton)
300 .addComponent(newTagButton))
304 getRootPane().setDefaultButton(okButton);
310 TagName tagNameFromCombo = (TagName) tagCombo.getSelectedItem();
311 tagNameAndComment =
new TagNameAndComment(tagNameFromCombo, commentText.getText());
316 tagNameAndComment = null;
321 tagNameAndComment = null;
327 if (newTagName != null) {
328 tagCombo.addItem(newTagName);
329 tagCombo.setSelectedItem(newTagName);
TagsManager getTagsManager()
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static TagName doDialog()