19 package org.sleuthkit.autopsy.actions;
21 import java.awt.event.ActionEvent;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.HashSet;
27 import java.util.List;
29 import java.util.TreeMap;
30 import java.util.logging.Level;
31 import javax.swing.AbstractAction;
32 import javax.swing.JMenu;
33 import javax.swing.JMenuItem;
34 import org.openide.util.NbBundle;
35 import org.openide.util.actions.Presenter;
50 abstract class AddTagAction
extends AbstractAction implements Presenter.Popup {
52 private static final long serialVersionUID = 1L;
53 private static final String NO_COMMENT =
"";
54 private final Collection<Content> contentObjsToTag;
62 AddTagAction(String menuText) {
64 contentObjsToTag =
new HashSet<>();
68 public JMenuItem getPopupPresenter() {
69 contentObjsToTag.clear();
79 Collection<Content> getContentToTag() {
80 return Collections.unmodifiableCollection(contentObjsToTag);
92 public JMenuItem getMenuForContent(Collection<? extends Content> contentToTag) {
93 contentObjsToTag.clear();
94 contentObjsToTag.addAll(contentToTag);
105 @SuppressWarnings(
"NoopMethodInAbstractClass")
106 public
void actionPerformed(ActionEvent event) {
113 abstract protected String getActionDisplayName();
119 abstract protected void addTag(TagName tagName, String comment);
122 public Object clone() throws CloneNotSupportedException {
123 return super.clone();
135 private static final long serialVersionUID = 1L;
138 super(getActionDisplayName());
141 Map<String, TagName> tagNamesMap;
143 Map<String, JMenu> tagSetMenuMap =
new HashMap<>();
144 List<JMenuItem> standardTagMenuitems =
new ArrayList<>();
151 if (!tagNamesMap.isEmpty()) {
152 for (Map.Entry<String, TagName> entry : tagNamesMap.entrySet()) {
153 TagName tagName = entry.getValue();
154 TagSet tagSet = tagsManager.
getTagSet(tagName);
157 if (tagSet != null) {
158 JMenu menu = tagSetMenuMap.get(tagSet.getName());
161 tagSetMenuMap.put(tagSet.getName(), menu);
163 }
else if (standardTagNames.contains(tagName.getDisplayName())) {
174 if (getItemCount() > 0) {
178 standardTagMenuitems.forEach((menuItem) -> {
182 tagSetMenuMap.values().forEach((menu) -> {
191 JMenuItem tagAndCommentItem =
new JMenuItem(
192 NbBundle.getMessage(
this.getClass(),
"AddTagAction.tagAndComment"));
193 tagAndCommentItem.addActionListener((ActionEvent e) -> {
195 if (null != tagNameAndComment) {
196 addTag(tagNameAndComment.getTagName(), tagNameAndComment.getComment());
199 add(tagAndCommentItem);
204 JMenuItem newTagMenuItem =
new JMenuItem(NbBundle.getMessage(
this.getClass(),
"AddTagAction.newTag"));
205 newTagMenuItem.addActionListener((ActionEvent e) -> {
207 if (null != tagName) {
208 addTag(tagName, NO_COMMENT);
223 JMenu menu =
new JMenu(tagSet.getName());
224 List<TagName> tagNameList = tagSet.getTagNames();
226 for (TagName tagName : tagNameList) {
241 String tagDisplayName = tagName.getDisplayName();
243 JMenuItem tagNameItem =
new JMenuItem(tagDisplayName + notableString);
249 tagNameItem.addActionListener((ActionEvent e) -> {
250 addTag(tagName, NO_COMMENT);
static final KeyStroke BOOKMARK_SHORTCUT
TagsManager getTagsManager()
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static TagName doDialog()