19 package org.sleuthkit.autopsy.datamodel;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.util.Collections;
24 import java.util.EnumSet;
25 import java.util.List;
26 import java.util.Observable;
27 import java.util.Observer;
29 import java.util.logging.Level;
30 import org.openide.nodes.ChildFactory;
31 import org.openide.nodes.Children;
32 import org.openide.nodes.Node;
33 import org.openide.nodes.Sheet;
34 import org.openide.util.NbBundle;
35 import org.openide.util.lookup.Lookups;
58 private final static String
DISPLAY_NAME = NbBundle.getMessage(
RootNode.class,
"TagsNode.displayName.text");
60 private final String
ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
69 this.filteringDSObjId = dsObjId;
81 long filteringDataSourceObjId() {
86 public <T> T accept(AutopsyItemVisitor<T> visitor) {
87 return visitor.visit(
this);
112 super(Children.create(
new TagNameNodeFactory(objId),
true), Lookups.singleton(DISPLAY_NAME));
113 super.setName(DISPLAY_NAME);
114 super.setDisplayName(DISPLAY_NAME);
115 this.setIconBaseWithExtension(ICON_PATH);
125 return visitor.
visit(
this);
130 Sheet propertySheet = super.createSheet();
131 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
132 if (properties == null) {
133 properties = Sheet.createPropertiesSet();
134 propertySheet.put(properties);
136 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"TagsNode.createSheet.name.name"),
137 NbBundle.getMessage(
this.getClass(),
"TagsNode.createSheet.name.displayName"),
"", getName()));
138 return propertySheet;
143 return getClass().getName();
165 private final PropertyChangeListener
pcl =
new PropertyChangeListener() {
167 public void propertyChange(PropertyChangeEvent evt) {
168 String eventType = evt.getPropertyName();
207 if (evt.getNewValue() == null) {
220 this.filteringDSObjId = objId;
230 tagResults.addObserver(
this);
238 tagResults.deleteObserver(
this);
244 List<TagName> tagNamesInUse;
246 String userName = System.getProperty(USER_NAME_PROPERTY);
247 tagNamesInUse = (filteringDSObjId > 0)
251 tagNamesInUse = (filteringDSObjId > 0)
255 Collections.sort(tagNamesInUse);
256 keys.addAll(tagNamesInUse);
269 public void update(Observable o, Object arg) {
281 private final String ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
286 super(Children.create(
new TagTypeNodeFactory(tagName),
true), Lookups.singleton(NbBundle.getMessage(
TagNameNode.class,
"TagNameNode.namePlusTags.text", tagName.getDisplayName())));
288 setName(tagName.getDisplayName());
290 if (tagName.getDisplayName().equals(NbBundle.getMessage(
this.getClass(),
"TagNameNode.bookmark.text"))) {
291 setIconBaseWithExtension(BOOKMARK_TAG_ICON_PATH);
293 setIconBaseWithExtension(ICON_PATH);
295 tagResults.addObserver(
this);
303 String userName = System.getProperty(USER_NAME_PROPERTY);
304 if (filteringDSObjId > 0) {
312 if (filteringDSObjId > 0) {
321 Logger.
getLogger(
TagNameNode.class.getName()).log(Level.SEVERE,
"Failed to get tags count for " + tagName.getDisplayName() +
" tag name", ex);
323 setDisplayName(tagName.getDisplayName() +
" \u200E(\u200E" + tagsCount +
")\u200E");
328 Sheet propertySheet = super.createSheet();
329 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
330 if (properties == null) {
331 properties = Sheet.createPropertiesSet();
332 propertySheet.put(properties);
334 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"TagNameNode.createSheet.name.name"),
335 NbBundle.getMessage(
this.getClass(),
"TagNameNode.createSheet.name.displayName"), tagName.getDescription(), getName()));
336 return propertySheet;
343 return visitor.
visit(
this);
352 public void update(Observable o, Object arg) {
358 return getClass().getName();
379 keys.add(CONTENT_TAG_TYPE_NODE_KEY);
380 keys.add(BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY);
386 if (CONTENT_TAG_TYPE_NODE_KEY.equals(key)) {
388 }
else if (BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY.equals(key)) {
407 private final String ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
413 super.setName(CONTENT_DISPLAY_NAME);
415 this.setIconBaseWithExtension(ICON_PATH);
416 tagResults.addObserver(
this);
424 String userName = System.getProperty(USER_NAME_PROPERTY);
425 tagsCount = (filteringDSObjId > 0)
429 tagsCount = (filteringDSObjId > 0)
436 super.setDisplayName(CONTENT_DISPLAY_NAME +
" (" + tagsCount +
")");
441 Sheet propertySheet = super.createSheet();
442 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
443 if (properties == null) {
444 properties = Sheet.createPropertiesSet();
445 propertySheet.put(properties);
447 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"ContentTagTypeNode.createSheet.name.name"),
448 NbBundle.getMessage(
this.getClass(),
"ContentTagTypeNode.createSheet.name.displayName"),
"", getName()));
449 return propertySheet;
454 return visitor.
visit(
this);
463 public void update(Observable o, Object arg) {
469 return getClass().getName();
480 tagResults.addObserver(
this);
487 List<ContentTag> contentTags = (filteringDSObjId > 0)
491 String userName = System.getProperty(USER_NAME_PROPERTY);
492 for (ContentTag tag : contentTags) {
493 if (userName.equals(tag.getUserName())) {
498 keys.addAll(contentTags);
509 return new ContentTagNode(key);
513 public void update(Observable o, Object arg) {
529 private final String ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
534 super.setName(ARTIFACT_DISPLAY_NAME);
535 this.setIconBaseWithExtension(ICON_PATH);
537 tagResults.addObserver(
this);
544 String userName = System.getProperty(USER_NAME_PROPERTY);
545 tagsCount = (filteringDSObjId > 0)
549 tagsCount = (filteringDSObjId > 0)
556 super.setDisplayName(ARTIFACT_DISPLAY_NAME +
" (" + tagsCount +
")");
561 Sheet propertySheet = super.createSheet();
562 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
563 if (properties == null) {
564 properties = Sheet.createPropertiesSet();
565 propertySheet.put(properties);
567 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"BlackboardArtifactTagTypeNode.createSheet.name.name"),
568 NbBundle.getMessage(
this.getClass(),
"BlackboardArtifactTagTypeNode.createSheet.name.displayName"),
"", getName()));
569 return propertySheet;
574 return visitor.
visit(
this);
583 public void update(Observable o, Object arg) {
589 return getClass().getName();
600 tagResults.addObserver(
this);
604 protected boolean createKeys(List<BlackboardArtifactTag> keys) {
607 List<BlackboardArtifactTag> artifactTags = (filteringDSObjId > 0)
611 String userName = System.getProperty(USER_NAME_PROPERTY);
612 for (BlackboardArtifactTag tag : artifactTags) {
613 if (userName.equals(tag.getUserName())) {
618 keys.addAll(artifactTags);
633 public void update(Observable o, Object arg) {
void removeIngestModuleEventListener(final PropertyChangeListener listener)
void update(Observable o, Object arg)
static synchronized IngestManager getInstance()
Node createNodeForKey(ContentTag key)
ContentTagTypeNode(TagName tagName)
void update(Observable o, Object arg)
T visit(DataSourcesNode in)
void removeIngestJobEventListener(final PropertyChangeListener listener)
boolean createKeys(List< ContentTag > keys)
static boolean showOnlyCurrentUserTags()
TagsManager getTagsManager()
void addIngestJobEventListener(final PropertyChangeListener listener)
BLACKBOARD_ARTIFACT_TAG_ADDED
void addIngestModuleEventListener(final PropertyChangeListener listener)
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
BLACKBOARD_ARTIFACT_TAG_DELETED