diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java index 1646210506..4469e76356 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java @@ -117,12 +117,13 @@ public class InterestingHits implements AutopsyVisitableItem { Map> setMapping = interestingItemsMap.getOrDefault(type, Collections.emptyMap()); setNames = new ArrayList<>(setMapping.keySet()); } - Collections.sort(setNames); + Collections.sort(setNames, (a, b) -> a.compareToIgnoreCase(b)); return setNames; } - + /** * Returns all types currently in the map. + * * @return The types present in the map. */ List getTypes() { @@ -130,7 +131,7 @@ public class InterestingHits implements AutopsyVisitableItem { synchronized (interestingItemsMap) { types = new ArrayList<>(interestingItemsMap.keySet()); } - Collections.sort(types, (a,b) -> a.getDisplayName().compareToIgnoreCase(b.getDisplayName())); + Collections.sort(types, (a, b) -> a.getDisplayName().compareToIgnoreCase(b.getDisplayName())); return types; } @@ -287,6 +288,17 @@ public class InterestingHits implements AutopsyVisitableItem { return new SetNameNode(this.type, key); } + @Override + protected void addNotify() { + interestingResults.update(); + interestingResults.addObserver(this); + } + + @Override + protected void finalize() throws Throwable { + interestingResults.deleteObserver(this); + } + @Override public void update(Observable o, Object arg) { refresh(true); @@ -318,7 +330,7 @@ public class InterestingHits implements AutopsyVisitableItem { @Override public boolean isLeafTypeNode() { - return false; + return true; } @Override diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index 258e692f39..3732f3c219 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -1409,7 +1409,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat private Node getInterestingItemNode(Children typesChildren, BlackboardArtifact art) { Node interestingItemsRootNode = typesChildren.findChild(NbBundle .getMessage(InterestingHits.class, "InterestingHits.interestingItems.text")); - + Children interestingItemsRootChildren = interestingItemsRootNode.getChildren(); String setName = null; try { @@ -1418,17 +1418,17 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat .map(attr -> attr.getValueString()) .findFirst() .orElse(null); - + } catch (TskCoreException ex) { LOGGER.log(Level.WARNING, "Error retrieving attributes", ex); //NON-NLS return null; } - + // if no set name, no set node will be identified. if (setName == null) { return null; } - + Stream typeNodes = interestingItemsRootChildren != null ? Stream.of(interestingItemsRootChildren.getNodes(true)) : Stream.empty(); Children setNodeChildren = typeNodes @@ -1444,10 +1444,13 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat if (setNodeChildren == null) { return null; } - + // make sure data is fully loaded - setNodeChildren.getNodes(true); - return interestingItemsRootChildren.findChild(setName); + final String finalSetName = setName; + return Stream.of(setNodeChildren.getNodes(true)) + .filter(setNode -> finalSetName.equals(setNode.getLookup().lookup(String.class))) + .findFirst() + .orElse(null); } /**