make DataResultFilterChildren into a ChildFactory

This commit is contained in:
millmanorama 2017-03-13 14:49:41 +01:00
parent 8ad946efd4
commit cee2cb8b1f

View File

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