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.Comparator;
25 import java.util.EnumSet;
26 import java.util.List;
27 import java.util.Observable;
28 import java.util.Observer;
30 import java.util.logging.Level;
31 import org.openide.nodes.ChildFactory;
32 import org.openide.nodes.Children;
33 import org.openide.nodes.Node;
34 import org.openide.nodes.Sheet;
35 import org.openide.util.NbBundle;
36 import org.openide.util.WeakListeners;
37 import org.openide.util.lookup.Lookups;
60 private final static String
DISPLAY_NAME = NbBundle.getMessage(
RootNode.class,
"TagsNode.displayName.text");
64 private final String
ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
73 this.filteringDSObjId = dsObjId;
85 long filteringDataSourceObjId() {
90 public <T> T accept(AutopsyItemVisitor<T> visitor) {
91 return visitor.visit(
this);
116 super(Children.create(
new TagNameNodeFactory(objId),
true), Lookups.singleton(DISPLAY_NAME));
117 super.setName(DISPLAY_NAME);
118 super.setDisplayName(DISPLAY_NAME);
119 this.setIconBaseWithExtension(ICON_PATH);
129 return visitor.
visit(
this);
134 Sheet propertySheet = super.createSheet();
135 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
136 if (properties == null) {
137 properties = Sheet.createPropertiesSet();
138 propertySheet.put(properties);
140 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"TagsNode.createSheet.name.name"),
141 NbBundle.getMessage(
this.getClass(),
"TagsNode.createSheet.name.displayName"),
"", getName()));
142 return propertySheet;
147 return getClass().getName();
169 private final PropertyChangeListener
pcl =
new PropertyChangeListener() {
171 public void propertyChange(PropertyChangeEvent evt) {
172 String eventType = evt.getPropertyName();
211 if (evt.getNewValue() == null) {
218 private final PropertyChangeListener
weakPcl = WeakListeners.propertyChange(pcl, null);
226 this.filteringDSObjId = objId;
234 tagResults.addObserver(
this);
242 tagResults.deleteObserver(
this);
248 List<TagName> tagNamesInUse;
250 String userName = System.getProperty(USER_NAME_PROPERTY);
251 tagNamesInUse = (filteringDSObjId > 0)
255 tagNamesInUse = (filteringDSObjId > 0)
259 Collections.sort(tagNamesInUse,
new Comparator<TagName>() {
261 public int compare(TagName o1, TagName o2) {
265 keys.addAll(tagNamesInUse);
278 public void update(Observable o, Object arg) {
290 private final String ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
295 super(Children.create(
new TagTypeNodeFactory(tagName),
true), Lookups.singleton(NbBundle.getMessage(
TagNameNode.class,
"TagNameNode.namePlusTags.text", tagName.getDisplayName())));
300 setIconBaseWithExtension(BOOKMARK_TAG_ICON_PATH);
302 setIconBaseWithExtension(ICON_PATH);
304 tagResults.addObserver(
this);
312 String userName = System.getProperty(USER_NAME_PROPERTY);
313 if (filteringDSObjId > 0) {
321 if (filteringDSObjId > 0) {
330 Logger.
getLogger(
TagNameNode.class.getName()).log(Level.SEVERE,
"Failed to get tags count for " + tagName.getDisplayName() +
" tag name", ex);
337 Sheet propertySheet = super.createSheet();
338 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
339 if (properties == null) {
340 properties = Sheet.createPropertiesSet();
341 propertySheet.put(properties);
343 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"TagNameNode.createSheet.name.name"),
344 NbBundle.getMessage(
this.getClass(),
"TagNameNode.createSheet.name.displayName"), tagName.getDescription(), getName()));
345 return propertySheet;
352 return visitor.
visit(
this);
361 public void update(Observable o, Object arg) {
367 return getClass().getName();
388 keys.add(CONTENT_TAG_TYPE_NODE_KEY);
389 keys.add(BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY);
395 if (CONTENT_TAG_TYPE_NODE_KEY.equals(key)) {
397 }
else if (BLACKBOARD_ARTIFACT_TAG_TYPE_NODE_KEY.equals(key)) {
416 private final String ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
422 super.setName(CONTENT_DISPLAY_NAME);
424 this.setIconBaseWithExtension(ICON_PATH);
425 tagResults.addObserver(
this);
433 String userName = System.getProperty(USER_NAME_PROPERTY);
434 tagsCount = (filteringDSObjId > 0)
438 tagsCount = (filteringDSObjId > 0)
445 super.setDisplayName(CONTENT_DISPLAY_NAME +
" (" + tagsCount +
")");
450 Sheet propertySheet = super.createSheet();
451 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
452 if (properties == null) {
453 properties = Sheet.createPropertiesSet();
454 propertySheet.put(properties);
456 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"ContentTagTypeNode.createSheet.name.name"),
457 NbBundle.getMessage(
this.getClass(),
"ContentTagTypeNode.createSheet.name.displayName"),
"", getName()));
458 return propertySheet;
463 return visitor.
visit(
this);
472 public void update(Observable o, Object arg) {
478 return getClass().getName();
489 tagResults.addObserver(
this);
496 List<ContentTag> contentTags = (filteringDSObjId > 0)
500 String userName = System.getProperty(USER_NAME_PROPERTY);
501 for (ContentTag tag : contentTags) {
502 if (userName.equals(tag.getUserName())) {
507 keys.addAll(contentTags);
518 return new ContentTagNode(key);
522 public void update(Observable o, Object arg) {
538 private final String ICON_PATH =
"org/sleuthkit/autopsy/images/tag-folder-blue-icon-16.png";
543 super.setName(ARTIFACT_DISPLAY_NAME);
544 this.setIconBaseWithExtension(ICON_PATH);
546 tagResults.addObserver(
this);
553 String userName = System.getProperty(USER_NAME_PROPERTY);
554 tagsCount = (filteringDSObjId > 0)
558 tagsCount = (filteringDSObjId > 0)
565 super.setDisplayName(ARTIFACT_DISPLAY_NAME +
" (" + tagsCount +
")");
570 Sheet propertySheet = super.createSheet();
571 Sheet.Set properties = propertySheet.get(Sheet.PROPERTIES);
572 if (properties == null) {
573 properties = Sheet.createPropertiesSet();
574 propertySheet.put(properties);
576 properties.put(
new NodeProperty<>(NbBundle.getMessage(
this.getClass(),
"BlackboardArtifactTagTypeNode.createSheet.name.name"),
577 NbBundle.getMessage(
this.getClass(),
"BlackboardArtifactTagTypeNode.createSheet.name.displayName"),
"", getName()));
578 return propertySheet;
583 return visitor.
visit(
this);
592 public void update(Observable o, Object arg) {
598 return getClass().getName();
609 tagResults.addObserver(
this);
613 protected boolean createKeys(List<BlackboardArtifactTag> keys) {
616 List<BlackboardArtifactTag> artifactTags = (filteringDSObjId > 0)
620 String userName = System.getProperty(USER_NAME_PROPERTY);
621 for (BlackboardArtifactTag tag : artifactTags) {
622 if (userName.equals(tag.getUserName())) {
627 keys.addAll(artifactTags);
642 public void update(Observable o, Object arg) {
void update(Observable o, Object arg)
static synchronized IngestManager getInstance()
Node createNodeForKey(ContentTag key)
ContentTagTypeNode(TagName tagName)
void update(Observable o, Object arg)
void removeIngestJobEventListener(final PropertyChangeListener listener)
boolean createKeys(List< ContentTag > keys)
static boolean showOnlyCurrentUserTags()
TagsManager getTagsManager()
void addIngestJobEventListener(final PropertyChangeListener listener)
T visit(DataSourceFilesNode in)
BLACKBOARD_ARTIFACT_TAG_ADDED
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