first pass at reimplementing common search results with CommonSearchNode

This commit is contained in:
Brian Sweeney 2018-03-13 21:19:20 -06:00
parent b42966c8fb
commit 0e19f28958
3 changed files with 64 additions and 14 deletions

View File

@ -22,9 +22,7 @@ import java.util.List;
import org.sleuthkit.datamodel.AbstractFile;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.sleuthkit.autopsy.datamodel.FileNode;
import org.sleuthkit.autopsy.directorytree.DataResultFilterNode;
import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent;
import org.sleuthkit.autopsy.datamodel.CommonFileNode;
/**
* Makes nodes for common files search results.
@ -41,7 +39,7 @@ final class CommonFilesChildren extends Children.Keys<AbstractFile> {
Node[] node = new Node[1];
//TODO replace FileNode with our own subclass of its base type or similar (use CommonFileNode once its finished)
node[0] = new DataResultFilterNode(new FileNode(t, false), DirectoryTreeTopComponent.findInstance().getExplorerManager());
node[0] = new CommonFileNode(t);
return node;
}
}

View File

@ -23,15 +23,12 @@ import java.awt.event.ActionListener;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;
import org.openide.util.NbBundle;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.casemodule.Case;
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent;
import org.sleuthkit.autopsy.corecomponents.TableFilterNode;
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
import org.sleuthkit.datamodel.AbstractFile;
@ -105,13 +102,10 @@ public final class CommonFilesPanel extends javax.swing.JPanel {
CommonFilesSearchNode contentFilesNode = new CommonFilesSearchNode(contentList);
//TODO can use DataResultFilterNode in addition to TableFilterNode
TableFilterNode tableFilterNode = new TableFilterNode(contentFilesNode, true, contentFilesNode.getName());
TopComponent component = DataResultTopComponent.createInstance(
title,
pathText,
tableFilterNode,
contentFilesNode,
contentList.size());
component.requestActive(); // make it the active top component

View File

@ -18,9 +18,13 @@
*/
package org.sleuthkit.autopsy.datamodel;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
import org.openide.nodes.Sheet;
import org.openide.util.NbBundle;
import org.sleuthkit.datamodel.AbstractFile;
/**
@ -28,12 +32,66 @@ import org.sleuthkit.datamodel.AbstractFile;
*/
public class CommonFileNode extends AbstractNode {
private final AbstractFile content;
public CommonFileNode(AbstractFile fsContent) {
super(Children.LEAF);
this.content = fsContent;
}
@Override
protected Sheet createSheet(){
return null; //TODO
protected Sheet createSheet() {
Sheet s = super.createSheet();
Sheet.Set ss = s.get(Sheet.PROPERTIES);
if (ss == null) {
ss = Sheet.createPropertiesSet();
s.put(ss);
}
Map<String, Object> map = new LinkedHashMap<>();
fillPropertyMap(map, content);
final String NO_DESCR = Bundle.AbstractFsContentNode_noDesc_text();
for (CommonFilePropertyType propType : CommonFilePropertyType.values()) {
final String propString = propType.toString();
ss.put(new NodeProperty<>(propString, propString, NO_DESCR, map.get(propString)));
}
// add tags property to the sheet
//addTagProperty(ss);
return s;
}
/**
* Fill map with AbstractFile properties
*
* @param map map with preserved ordering, where property names/values
* are put
* @param content The content to get properties for.
*/
static public void fillPropertyMap(Map<String, Object> map, AbstractFile content) {
map.put(CommonFilePropertyType.Name.toString(), content.getName());
map.put(CommonFilePropertyType.Md5Hash.toString(), StringUtils.defaultString(content.getMd5Hash()));
}
@NbBundle.Messages({
"CommonFilePropertyType.nameColLbl=Name",
"CommonFilePropertyType.md5HashColLbl=MD5 Hash"})
public enum CommonFilePropertyType {
Name(Bundle.CommonFilePropertyType_nameColLbl()),
Md5Hash(Bundle.CommonFilePropertyType_md5HashColLbl());
final private String displayString;
private CommonFilePropertyType(String displayString){
this.displayString = displayString;
}
@Override
public String toString() {
return displayString;
}
}
}