diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java b/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java index 81820218ec..dd81434257 100755 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.directorytree; import java.awt.event.ActionEvent; import java.beans.PropertyVetoException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.logging.Level; import java.util.prefs.PreferenceChangeEvent; @@ -29,6 +30,7 @@ import javax.swing.AbstractAction; import javax.swing.Action; import org.openide.explorer.ExplorerManager; import org.openide.nodes.AbstractNode; +import org.openide.nodes.ChildFactory; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; import org.openide.nodes.Sheet; @@ -109,7 +111,7 @@ public class DataResultFilterNode extends FilterNode { * @param em ExplorerManager for component that is creating the node */ public DataResultFilterNode(Node node, ExplorerManager em) { - super(node, new DataResultFilterChildren(node, em)); + super(node, Children.create(new DataResultFilterChildren(node, em), true)); this.sourceEm = em; } @@ -119,8 +121,8 @@ public class DataResultFilterNode extends FilterNode { * @param node Root node to be passed to DataResult viewers * @param em ExplorerManager for component that is creating the node */ - private DataResultFilterNode(Node node, ExplorerManager em, boolean filterKnown, boolean filterSlack) { - super(node, new DataResultFilterChildren(node, em, filterKnown, filterSlack)); + private DataResultFilterNode(Node node, ExplorerManager em, boolean filterKnown, boolean filterSlack) { + super(node, Children.create(new DataResultFilterChildren(node, em, filterKnown, filterSlack), true)); this.sourceEm = em; } @@ -194,18 +196,20 @@ public class DataResultFilterNode extends FilterNode { * DataResultFilterNode that created in the DataResultFilterNode.java. * */ - private static class DataResultFilterChildren extends FilterNode.Children { + private static class DataResultFilterChildren extends ChildFactory { - private final ExplorerManager sourceEm; + private final ExplorerManager sourceEm; private boolean filterKnown; private boolean filterSlack; + private final Node parent; /** * the constructor */ - private DataResultFilterChildren(Node arg, ExplorerManager sourceEm) { - super(arg); + private DataResultFilterChildren(Node arg, ExplorerManager sourceEm) { + super(); + this.parent = arg; switch (SelectionContext.getSelectionContext(arg)) { case DATA_SOURCES: filterSlack = filterSlackFromDataSources; @@ -223,24 +227,33 @@ public class DataResultFilterNode extends FilterNode { this.sourceEm = sourceEm; } - private DataResultFilterChildren(Node arg, ExplorerManager sourceEm, boolean filterKnown, boolean filterSlack) { - super(arg); + private DataResultFilterChildren(Node arg, ExplorerManager sourceEm, boolean filterKnown, boolean filterSlack) { + super(); + this.parent = arg; this.filterKnown = filterKnown; this.filterSlack = filterSlack; this.sourceEm = sourceEm; } + @Override - protected Node[] createNodes(Node key) { + protected boolean createKeys(List list) { + list.addAll(Arrays.asList(parent.getChildren().getNodes())); + return true; + } + + + @Override + protected Node[] createNodesForKey(Node key) { AbstractFile file = key.getLookup().lookup(AbstractFile.class); if (file != null) { if (filterKnown && (file.getKnown() == TskData.FileKnown.KNOWN)) { // Filter out child nodes that represent known files - return new Node[]{}; + return null; } if (filterSlack && file.getType().equals(TskData.TSK_DB_FILES_TYPE_ENUM.SLACK)) { // Filter out child nodes that represent slack files - return new Node[]{}; + return null; } } return new Node[]{new DataResultFilterNode(key, sourceEm, filterKnown, filterSlack)}; @@ -338,8 +351,7 @@ public class DataResultFilterNode extends FilterNode { public List visit(FileTypesNode fileTypes) { return defaultVisit(fileTypes); } - - + @Override protected List defaultVisit(DisplayableItemNode ditem) { //preserve the default node's actions @@ -431,14 +443,12 @@ public class DataResultFilterNode extends FilterNode { protected AbstractAction defaultVisit(DisplayableItemNode c) { return openChild(c); } - + @Override public AbstractAction visit(FileTypesNode fileTypes) { return openChild(fileTypes); } - - /** * Tell the originating ExplorerManager to display the given * dataModelNode.