mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-14 17:06:16 +00:00
1917 Null Case Implemented for MIME tree, and clean up
This commit is contained in:
parent
0a15b431c0
commit
2bab13a1f2
@ -48,7 +48,7 @@ public class FileTypesByExtNode extends DisplayableItemNode {
|
|||||||
* something to provide a sub-node.
|
* something to provide a sub-node.
|
||||||
*/
|
*/
|
||||||
FileTypesByExtNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter) {
|
FileTypesByExtNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter) {
|
||||||
super(Children.create(new FileTypesChildren(skCase, filter, null), true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
|
super(Children.create(new FileTypesByExtChildren(skCase, filter, null), true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
@ -61,7 +61,7 @@ public class FileTypesByExtNode extends DisplayableItemNode {
|
|||||||
* provides updates on events
|
* provides updates on events
|
||||||
*/
|
*/
|
||||||
private FileTypesByExtNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter, Observable o) {
|
private FileTypesByExtNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter, Observable o) {
|
||||||
super(Children.create(new FileTypesChildren(skCase, filter, o), true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
|
super(Children.create(new FileTypesByExtChildren(skCase, filter, o), true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
@ -122,7 +122,7 @@ public class FileTypesByExtNode extends DisplayableItemNode {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static class FileTypesChildren extends ChildFactory<FileTypeExtensionFilters.SearchFilterInterface> {
|
static class FileTypesByExtChildren extends ChildFactory<FileTypeExtensionFilters.SearchFilterInterface> {
|
||||||
|
|
||||||
private SleuthkitCase skCase;
|
private SleuthkitCase skCase;
|
||||||
private FileTypeExtensionFilters.RootFilter filter;
|
private FileTypeExtensionFilters.RootFilter filter;
|
||||||
@ -135,12 +135,12 @@ public class FileTypesByExtNode extends DisplayableItemNode {
|
|||||||
* @param o Observable that provides updates based on events being
|
* @param o Observable that provides updates based on events being
|
||||||
* fired (or null if one needs to be created)
|
* fired (or null if one needs to be created)
|
||||||
*/
|
*/
|
||||||
public FileTypesChildren(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter, Observable o) {
|
public FileTypesByExtChildren(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter, Observable o) {
|
||||||
super();
|
super();
|
||||||
this.skCase = skCase;
|
this.skCase = skCase;
|
||||||
this.filter = filter;
|
this.filter = filter;
|
||||||
if (o == null) {
|
if (o == null) {
|
||||||
this.notifier = new FileTypesChildrenObservable();
|
this.notifier = new FileTypesByExtChildrenObservable();
|
||||||
} else {
|
} else {
|
||||||
this.notifier = o;
|
this.notifier = o;
|
||||||
}
|
}
|
||||||
@ -150,9 +150,9 @@ public class FileTypesByExtNode extends DisplayableItemNode {
|
|||||||
* Listens for case and ingest invest. Updates observers when events are
|
* Listens for case and ingest invest. Updates observers when events are
|
||||||
* fired. FileType and FileTypes nodes are all listening to this.
|
* fired. FileType and FileTypes nodes are all listening to this.
|
||||||
*/
|
*/
|
||||||
private final class FileTypesChildrenObservable extends Observable {
|
private final class FileTypesByExtChildrenObservable extends Observable {
|
||||||
|
|
||||||
FileTypesChildrenObservable() {
|
FileTypesByExtChildrenObservable() {
|
||||||
IngestManager.getInstance().addIngestJobEventListener(pcl);
|
IngestManager.getInstance().addIngestJobEventListener(pcl);
|
||||||
IngestManager.getInstance().addIngestModuleEventListener(pcl);
|
IngestManager.getInstance().addIngestModuleEventListener(pcl);
|
||||||
Case.addPropertyChangeListener(pcl);
|
Case.addPropertyChangeListener(pcl);
|
||||||
|
@ -57,9 +57,9 @@ import org.sleuthkit.datamodel.TskData;
|
|||||||
* Listener which is checking for changes in IngestJobEvent Completed or
|
* Listener which is checking for changes in IngestJobEvent Completed or
|
||||||
* Cancelled and IngestModuleEvent Content Changed.
|
* Cancelled and IngestModuleEvent Content Changed.
|
||||||
*/
|
*/
|
||||||
class FileTypesByMimeType extends Observable implements AutopsyVisitableItem {
|
public class FileTypesByMimeType extends Observable implements AutopsyVisitableItem {
|
||||||
|
|
||||||
static SleuthkitCase skCase;
|
private static SleuthkitCase skCase;
|
||||||
/**
|
/**
|
||||||
* The nodes of this tree will be determined dynamically by the mimetypes
|
* The nodes of this tree will be determined dynamically by the mimetypes
|
||||||
* which exist in the database. This hashmap will store them with the media
|
* which exist in the database. This hashmap will store them with the media
|
||||||
@ -175,15 +175,15 @@ class FileTypesByMimeType extends Observable implements AutopsyVisitableItem {
|
|||||||
* when the file detection module has not been run and MIME type is
|
* when the file detection module has not been run and MIME type is
|
||||||
* currently unknown.
|
* currently unknown.
|
||||||
*/
|
*/
|
||||||
class FileTypesByMimeTypeNode extends DisplayableItemNode {
|
public class FileTypesByMimeTypeNode extends DisplayableItemNode {
|
||||||
|
|
||||||
@NbBundle.Messages("FileTypesByMimeType.name.text=By MIME Type")
|
@NbBundle.Messages("FileTypesByMimeType.name.text=By MIME Type")
|
||||||
final String NAME = Bundle.FileTypesByMimeType_name_text();
|
final String NAME = Bundle.FileTypesByMimeType_name_text();
|
||||||
|
|
||||||
FileTypesByMimeTypeNode(SleuthkitCase sleuthkitCase) {
|
FileTypesByMimeTypeNode(SleuthkitCase sleuthkitCase) {
|
||||||
super(Children.create(new FileTypesByMimeTypeNodeChildren(), true));
|
super(Children.create(new FileTypesByMimeTypeNodeChildren(), true));
|
||||||
setName(NAME);
|
super.setName(NAME);
|
||||||
setDisplayName(NAME);
|
super.setDisplayName(NAME);
|
||||||
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file_types.png");
|
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file_types.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,6 +202,10 @@ class FileTypesByMimeType extends Observable implements AutopsyVisitableItem {
|
|||||||
return getClass().getName();
|
return getClass().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return existingMimeTypes.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -225,12 +229,7 @@ class FileTypesByMimeType extends Observable implements AutopsyVisitableItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Node createNodeForKey(String key) {
|
protected Node createNodeForKey(String key) {
|
||||||
if (!existingMimeTypes.isEmpty()) {
|
return new MediaTypeNode(key);
|
||||||
return new MediaTypeNode(key);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -468,4 +467,47 @@ class FileTypesByMimeType extends Observable implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EmptyNode Class made for edge case where no mime exist in the database
|
||||||
|
* yet. Creates a node to display information on why the tree is empty.
|
||||||
|
*
|
||||||
|
* Swapped for the FileTypesByMimeType node in
|
||||||
|
* DirectoryTreeTopComponent.respondSelection
|
||||||
|
*/
|
||||||
|
static public class EmptyNode extends AbstractNode {
|
||||||
|
|
||||||
|
public EmptyNode() {
|
||||||
|
super(Children.create(new EmptyChildFactory(), true));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class EmptyChildFactory extends ChildFactory<String> {
|
||||||
|
|
||||||
|
String FILE_ID_MSG = "Data not available. Run file type identification module."; //NON-NLS
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean createKeys(List<String> list) {
|
||||||
|
list.add(FILE_ID_MSG);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Node createNodeForKey(String key) {
|
||||||
|
return new MessageNode(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class MessageNode extends AbstractNode {
|
||||||
|
|
||||||
|
MessageNode(String name) {
|
||||||
|
super(Children.LEAF);
|
||||||
|
super.setName(name);
|
||||||
|
setName(name);
|
||||||
|
setDisplayName(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,6 @@ public class ViewsNode extends DisplayableItemNode {
|
|||||||
|
|
||||||
public ViewsNode(SleuthkitCase sleuthkitCase) {
|
public ViewsNode(SleuthkitCase sleuthkitCase) {
|
||||||
super(new RootContentChildren(Arrays.asList(
|
super(new RootContentChildren(Arrays.asList(
|
||||||
// new FileTypeExtensionFilters(sleuthkitCase),
|
|
||||||
new FileTypes(sleuthkitCase),
|
new FileTypes(sleuthkitCase),
|
||||||
// June '15: Recent Files was removed because it was not useful w/out filtering
|
// June '15: Recent Files was removed because it was not useful w/out filtering
|
||||||
// add it back in if we can filter the results to a more managable size.
|
// add it back in if we can filter the results to a more managable size.
|
||||||
|
@ -61,7 +61,9 @@ import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode;
|
|||||||
import org.sleuthkit.autopsy.datamodel.DataSources;
|
import org.sleuthkit.autopsy.datamodel.DataSources;
|
||||||
import org.sleuthkit.autopsy.datamodel.DataSourcesNode;
|
import org.sleuthkit.autopsy.datamodel.DataSourcesNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.DisplayableItemNode;
|
import org.sleuthkit.autopsy.datamodel.DisplayableItemNode;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.FileTypesByMimeType.EmptyNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.ExtractedContent;
|
import org.sleuthkit.autopsy.datamodel.ExtractedContent;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.FileTypesByMimeType;
|
||||||
import org.sleuthkit.autopsy.datamodel.KeywordHits;
|
import org.sleuthkit.autopsy.datamodel.KeywordHits;
|
||||||
import org.sleuthkit.autopsy.datamodel.KnownFileFilterNode;
|
import org.sleuthkit.autopsy.datamodel.KnownFileFilterNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.Reports;
|
import org.sleuthkit.autopsy.datamodel.Reports;
|
||||||
@ -632,6 +634,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
|||||||
if (origin == null) {
|
if (origin == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Node originNode = origin.getNode();
|
Node originNode = origin.getNode();
|
||||||
|
|
||||||
//set node, wrap in filter node first to filter out children
|
//set node, wrap in filter node first to filter out children
|
||||||
@ -639,7 +642,15 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
|||||||
Node kffn = new KnownFileFilterNode(drfn, KnownFileFilterNode.getSelectionContext(originNode));
|
Node kffn = new KnownFileFilterNode(drfn, KnownFileFilterNode.getSelectionContext(originNode));
|
||||||
|
|
||||||
// Create a TableFilterNode with knowledge of the node's type to allow for column order settings
|
// Create a TableFilterNode with knowledge of the node's type to allow for column order settings
|
||||||
if (originNode instanceof DisplayableItemNode) {
|
//Special case for when File Type Identification has not yet been run and
|
||||||
|
//there are no mime types to populate Files by Mime Type Tree
|
||||||
|
if (originNode instanceof FileTypesByMimeType.FileTypesByMimeTypeNode
|
||||||
|
&& ((FileTypesByMimeType.FileTypesByMimeTypeNode) originNode).isEmpty()) {
|
||||||
|
EmptyNode emptyNode = new EmptyNode();
|
||||||
|
Node emptyDrfn = new DataResultFilterNode(emptyNode, DirectoryTreeTopComponent.this.em);
|
||||||
|
Node emptyKffn = new KnownFileFilterNode(emptyDrfn, KnownFileFilterNode.getSelectionContext(emptyNode));
|
||||||
|
dataResult.setNode(new TableFilterNode(emptyKffn, true, "This Node Is Empty"));
|
||||||
|
} else if (originNode instanceof DisplayableItemNode) {
|
||||||
dataResult.setNode(new TableFilterNode(kffn, true, ((DisplayableItemNode) originNode).getItemType()));
|
dataResult.setNode(new TableFilterNode(kffn, true, ((DisplayableItemNode) originNode).getItemType()));
|
||||||
} else {
|
} else {
|
||||||
dataResult.setNode(new TableFilterNode(kffn, true));
|
dataResult.setNode(new TableFilterNode(kffn, true));
|
||||||
@ -783,8 +794,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
|||||||
* Set the selected node using a path to a previously selected node.
|
* Set the selected node using a path to a previously selected node.
|
||||||
*
|
*
|
||||||
* @param previouslySelectedNodePath Path to a previously selected node.
|
* @param previouslySelectedNodePath Path to a previously selected node.
|
||||||
* @param rootNodeName Name of the root node to match, may be
|
* @param rootNodeName Name of the root node to match, may be null.
|
||||||
* null.
|
|
||||||
*/
|
*/
|
||||||
private void setSelectedNode(final String[] previouslySelectedNodePath, final String rootNodeName) {
|
private void setSelectedNode(final String[] previouslySelectedNodePath, final String rootNodeName) {
|
||||||
if (previouslySelectedNodePath == null) {
|
if (previouslySelectedNodePath == null) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user