From 402c8bb45f224e40b6fde49c2487887ebce132e5 Mon Sep 17 00:00:00 2001 From: Brian Sweeney Date: Tue, 5 Jun 2018 20:42:28 -0600 Subject: [PATCH] create sheet stuff added --- .../CentralRepositoryFileInstanceNode.java | 81 ++++++++++++++++++- .../SleuthkitCaseFileInstanceNode.java | 42 +++++----- 2 files changed, 97 insertions(+), 26 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/CentralRepositoryFileInstanceNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/CentralRepositoryFileInstanceNode.java index 1969e00ec2..90f9b2e190 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/CentralRepositoryFileInstanceNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/CentralRepositoryFileInstanceNode.java @@ -21,9 +21,13 @@ package org.sleuthkit.autopsy.datamodel; import java.util.ArrayList; import java.util.Arrays; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import javax.swing.Action; import org.openide.nodes.Children; +import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepositoryFile; import org.sleuthkit.datamodel.AbstractFile; @@ -38,8 +42,16 @@ import org.sleuthkit.datamodel.AbstractFile; */ public class CentralRepositoryFileInstanceNode extends DisplayableItemNode { - public CentralRepositoryFileInstanceNode(CentralRepositoryFile file, AbstractFile md5Reference) { - super(Children.LEAF, Lookups.fixed(file, md5Reference)); + private CentralRepositoryFile content; + + //this may not be the same file, but at least it is identical, + // and we can use this to support certain actions in the tree table and content viewer + private AbstractFile md5Reference; + + public CentralRepositoryFileInstanceNode(CentralRepositoryFile content, AbstractFile md5Reference) { + super(Children.LEAF, Lookups.fixed(content, md5Reference)); + this.content = content; + this.md5Reference = md5Reference; } @Override @@ -68,4 +80,69 @@ public class CentralRepositoryFileInstanceNode extends DisplayableItemNode { // of this type and they will need to provide the same key return SleuthkitCaseFileInstanceNode.class.getName(); } + + @Override + protected Sheet createSheet(){ + Sheet sheet = new Sheet(); + Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES); + + if(sheetSet == null){ + sheetSet = Sheet.createPropertiesSet(); + sheet.put(sheetSet); + } + + Map map = new LinkedHashMap<>(); + fillPropertyMap(map, this); + + final String NO_DESCR = Bundle.AbstractFsContentNode_noDesc_text(); + for (CentralRepoFileInstancesPropertyType propType : CentralRepoFileInstancesPropertyType.values()) { + final String propString = propType.toString(); + final Object property = map.get(propString); + final NodeProperty nodeProperty = new NodeProperty<>(propString, propString, NO_DESCR, property); + sheetSet.put(nodeProperty); + } + + return sheet; + } + + private void fillPropertyMap(Map map, CentralRepositoryFileInstanceNode node) { + + map.put(CentralRepositoryFileInstanceNode.CentralRepoFileInstancesPropertyType.File.toString(), node.content.getFilePath()); + map.put(CentralRepositoryFileInstanceNode.CentralRepoFileInstancesPropertyType.ParentPath.toString(), node.content.getFilePath()); + map.put(CentralRepositoryFileInstanceNode.CentralRepoFileInstancesPropertyType.HashsetHits.toString(), ""); + map.put(CentralRepositoryFileInstanceNode.CentralRepoFileInstancesPropertyType.DataSource.toString(), node.content.getCorrelationDataSource().getName()); + map.put(CentralRepositoryFileInstanceNode.CentralRepoFileInstancesPropertyType.MimeType.toString(), ""); + } + + /** + * Encapsulates the columns to be displayed for reach row represented by an + * instance of this object. + */ + @NbBundle.Messages({ + "CentralRepoFileInstancesPropertyType.fileColLbl=File", + "CentralRepoFileInstancesPropertyType.pathColLbl=Parent Path", + "CentralRepoFileInstancesPropertyType.hashsetHitsColLbl=Hash Set Hits", + "CentralRepoFileInstancesPropertyType.dataSourceColLbl=Data Source", + "CentralRepoFileInstancesPropertyType.mimeTypeColLbl=MIME Type" + }) + public enum CentralRepoFileInstancesPropertyType { + + File(Bundle.CentralRepoFileInstancesPropertyType_fileColLbl()), + ParentPath(Bundle.CentralRepoFileInstancesPropertyType_pathColLbl()), + HashsetHits(Bundle.CentralRepoFileInstancesPropertyType_hashsetHitsColLbl()), + DataSource(Bundle.CentralRepoFileInstancesPropertyType_dataSourceColLbl()), + MimeType(Bundle.CentralRepoFileInstancesPropertyType_mimeTypeColLbl()); + + final private String displayString; + + private CentralRepoFileInstancesPropertyType(String displayString) { + this.displayString = displayString; + } + + @Override + public String toString() { + return displayString; + } + } + } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/SleuthkitCaseFileInstanceNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/SleuthkitCaseFileInstanceNode.java index 7bdb454bb2..d513e00d7d 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/SleuthkitCaseFileInstanceNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/SleuthkitCaseFileInstanceNode.java @@ -53,10 +53,6 @@ public class SleuthkitCaseFileInstanceNode extends FileNode { this.dataSource = dataSource; this.file = file; } - - //TODO add constructor with correlation attr instance - //TODO override getactions - //TODO use constructor overload that consumes a lookup and pass an instance of this (or a subclas of it) @Override public T accept(DisplayableItemNodeVisitor visitor) { @@ -93,7 +89,7 @@ public class SleuthkitCaseFileInstanceNode extends FileNode { fillPropertyMap(map, this); final String NO_DESCR = Bundle.AbstractFsContentNode_noDesc_text(); - for (CommonFilePropertyType propType : CommonFilePropertyType.values()) { + for (SleuthkitCaseFileInstanceNode.SleuthkitCaseFileInstanceNodePropertyType propType : SleuthkitCaseFileInstanceNode.SleuthkitCaseFileInstanceNodePropertyType.values()) { final String propString = propType.toString(); final Object property = map.get(propString); final NodeProperty nodeProperty = new NodeProperty<>(propString, propString, NO_DESCR, property); @@ -114,13 +110,11 @@ public class SleuthkitCaseFileInstanceNode extends FileNode { */ static private void fillPropertyMap(Map map, SleuthkitCaseFileInstanceNode node) { - //TODO rather than these ternary operators we should subclass SleuthkitCaseFileInstanceNode or derive an interface - - map.put(CommonFilePropertyType.File.toString(), node.hasFile() ? node.getFile().getName() : node.getName()); - map.put(CommonFilePropertyType.ParentPath.toString(), node.hasFile() ? node.getFile().getParent() : node.getContent().getParentPath()); //TODO this appears to have a bug - map.put(CommonFilePropertyType.HashsetHits.toString(), getHashSetHitsForFile(node.getContent())); - map.put(CommonFilePropertyType.DataSource.toString(), node.getDataSource()); - map.put(CommonFilePropertyType.MimeType.toString(), StringUtils.defaultString(node.content.getMIMEType())); + map.put(SleuthkitCaseFileInstanceNode.SleuthkitCaseFileInstanceNodePropertyType.File.toString(), node.hasFile() ? node.getFile().getName() : node.getName()); + map.put(SleuthkitCaseFileInstanceNode.SleuthkitCaseFileInstanceNodePropertyType.ParentPath.toString(), node.hasFile() ? node.getFile().getParent() : node.getContent().getParentPath()); //TODO this appears to have a bug + map.put(SleuthkitCaseFileInstanceNode.SleuthkitCaseFileInstanceNodePropertyType.HashsetHits.toString(), getHashSetHitsForFile(node.getContent())); + map.put(SleuthkitCaseFileInstanceNode.SleuthkitCaseFileInstanceNodePropertyType.DataSource.toString(), node.getDataSource()); + map.put(SleuthkitCaseFileInstanceNode.SleuthkitCaseFileInstanceNodePropertyType.MimeType.toString(), StringUtils.defaultString(node.content.getMIMEType())); } /** @@ -128,23 +122,23 @@ public class SleuthkitCaseFileInstanceNode extends FileNode { * instance of this object. */ @NbBundle.Messages({ - "CommonFilePropertyType.fileColLbl=File", - "CommonFilePropertyType.pathColLbl=Parent Path", - "CommonFilePropertyType.hashsetHitsColLbl=Hash Set Hits", - "CommonFilePropertyType.dataSourceColLbl=Data Source", - "CommonFilePropertyType.mimeTypeColLbl=MIME Type" + "SleuthkitCaseFileInstanceNodePropertyType.fileColLbl=File", + "SleuthkitCaseFileInstanceNodePropertyType.pathColLbl=Parent Path", + "SleuthkitCaseFileInstanceNodePropertyType.hashsetHitsColLbl=Hash Set Hits", + "SleuthkitCaseFileInstanceNodePropertyType.dataSourceColLbl=Data Source", + "SleuthkitCaseFileInstanceNodePropertyType.mimeTypeColLbl=MIME Type" }) - public enum CommonFilePropertyType { + public enum SleuthkitCaseFileInstanceNodePropertyType { - File(Bundle.CommonFilePropertyType_fileColLbl()), - ParentPath(Bundle.CommonFilePropertyType_pathColLbl()), - HashsetHits(Bundle.CommonFilePropertyType_hashsetHitsColLbl()), - DataSource(Bundle.CommonFilePropertyType_dataSourceColLbl()), - MimeType(Bundle.CommonFilePropertyType_mimeTypeColLbl()); + File(Bundle.SleuthkitCaseFileInstanceNodePropertyType_fileColLbl()), + ParentPath(Bundle.SleuthkitCaseFileInstanceNodePropertyType_pathColLbl()), + HashsetHits(Bundle.SleuthkitCaseFileInstanceNodePropertyType_hashsetHitsColLbl()), + DataSource(Bundle.SleuthkitCaseFileInstanceNodePropertyType_dataSourceColLbl()), + MimeType(Bundle.SleuthkitCaseFileInstanceNodePropertyType_mimeTypeColLbl()); final private String displayString; - private CommonFilePropertyType(String displayString) { + private SleuthkitCaseFileInstanceNodePropertyType(String displayString) { this.displayString = displayString; }