From 52fc53eb3fc23a063cf3fbba1dc634f5fef4a593 Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Wed, 11 Sep 2013 18:34:19 -0400 Subject: [PATCH] renamed and refactored file type views to make them easier to navigate --- .../datamodel/AbstractContentChildren.java | 4 +- .../autopsy/datamodel/AutopsyItemVisitor.java | 16 ++-- .../datamodel/DisplayableItemNodeVisitor.java | 8 +- ...terChildren.java => FileTypeChildren.java} | 14 ++-- ...ers.java => FileTypeExtensionFilters.java} | 11 ++- .../autopsy/datamodel/FileTypeExtensions.java | 18 +++++ ...earchFilterNode.java => FileTypeNode.java} | 12 +-- .../autopsy/datamodel/FileTypesChildren.java | 75 +++++++++++++++++++ ...rchFiltersNode.java => FileTypesNode.java} | 18 +++-- .../datamodel/SearchFiltersChildren.java | 68 ----------------- .../autopsy/datamodel/ViewsNode.java | 2 +- 11 files changed, 141 insertions(+), 105 deletions(-) rename Core/src/org/sleuthkit/autopsy/datamodel/{FileSearchFilterChildren.java => FileTypeChildren.java} (87%) rename Core/src/org/sleuthkit/autopsy/datamodel/{SearchFilters.java => FileTypeExtensionFilters.java} (93%) rename Core/src/org/sleuthkit/autopsy/datamodel/{FileSearchFilterNode.java => FileTypeNode.java} (84%) create mode 100644 Core/src/org/sleuthkit/autopsy/datamodel/FileTypesChildren.java rename Core/src/org/sleuthkit/autopsy/datamodel/{SearchFiltersNode.java => FileTypesNode.java} (76%) delete mode 100644 Core/src/org/sleuthkit/autopsy/datamodel/SearchFiltersChildren.java diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java index 76ad367ace..97d9e99524 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractContentChildren.java @@ -122,8 +122,8 @@ abstract class AbstractContentChildren extends Keys { } @Override - public AbstractNode visit(SearchFilters sf) { - return new SearchFiltersNode(sf.getSleuthkitCase(), null); + public AbstractNode visit(FileTypeExtensionFilters sf) { + return new FileTypesNode(sf.getSleuthkitCase(), null); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyItemVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyItemVisitor.java index 431c9adf27..428db99c76 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyItemVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyItemVisitor.java @@ -26,13 +26,13 @@ public interface AutopsyItemVisitor { T visit(ExtractedContent ec); - T visit(SearchFilters sf); + T visit(FileTypeExtensionFilters sf); - T visit(SearchFilters.FileSearchFilter fsf); + T visit(FileTypeExtensionFilters.RootFilter fsf); - T visit(SearchFilters.DocumentFilter df); + T visit(FileTypeExtensionFilters.DocumentFilter df); - T visit(SearchFilters.ExecutableFilter ef); + T visit(FileTypeExtensionFilters.ExecutableFilter ef); T visit(RecentFiles rf); @@ -70,22 +70,22 @@ public interface AutopsyItemVisitor { } @Override - public T visit(SearchFilters sf) { + public T visit(FileTypeExtensionFilters sf) { return defaultVisit(sf); } @Override - public T visit(SearchFilters.FileSearchFilter fsf) { + public T visit(FileTypeExtensionFilters.RootFilter fsf) { return defaultVisit(fsf); } @Override - public T visit(SearchFilters.DocumentFilter df) { + public T visit(FileTypeExtensionFilters.DocumentFilter df) { return defaultVisit(df); } @Override - public T visit(SearchFilters.ExecutableFilter ef) { + public T visit(FileTypeExtensionFilters.ExecutableFilter ef) { return defaultVisit(ef); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java index 9072a35689..6e42c7d611 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNodeVisitor.java @@ -53,7 +53,7 @@ public interface DisplayableItemNodeVisitor { T visit(ExtractedContentNode ecn); - T visit(FileSearchFilterNode fsfn); + T visit(FileTypeNode fsfn); T visit(DeletedContentNode dcn); @@ -63,7 +63,7 @@ public interface DisplayableItemNodeVisitor { T visit(FileSizeNode fsn); - T visit(SearchFiltersNode sfn); + T visit(FileTypesNode sfn); T visit(RecentFilesNode rfn); @@ -155,7 +155,7 @@ public interface DisplayableItemNodeVisitor { } @Override - public T visit(FileSearchFilterNode fsfn) { + public T visit(FileTypeNode fsfn) { return defaultVisit(fsfn); } @@ -180,7 +180,7 @@ public interface DisplayableItemNodeVisitor { } @Override - public T visit(SearchFiltersNode sfn) { + public T visit(FileTypesNode sfn) { return defaultVisit(sfn); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeChildren.java similarity index 87% rename from Core/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterChildren.java rename to Core/src/org/sleuthkit/autopsy/datamodel/FileTypeChildren.java index cc4f6309f0..7196857b94 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterChildren.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeChildren.java @@ -38,16 +38,16 @@ import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; /** - * Children factory for the file by type view in dir tree + * Children factory for a specific file type - does the database query. */ -class FileSearchFilterChildren extends ChildFactory { +class FileTypeChildren extends ChildFactory { private SleuthkitCase skCase; - private SearchFilters.SearchFilterInterface filter; - private static final Logger logger = Logger.getLogger(FileSearchFilterChildren.class.getName()); + private FileTypeExtensionFilters.SearchFilterInterface filter; + private static final Logger logger = Logger.getLogger(FileTypeChildren.class.getName()); //private final static int MAX_OBJECTS = 2000; - public FileSearchFilterChildren(SearchFilters.SearchFilterInterface filter, SleuthkitCase skCase) { + public FileTypeChildren(FileTypeExtensionFilters.SearchFilterInterface filter, SleuthkitCase skCase) { this.filter = filter; this.skCase = skCase; } @@ -61,7 +61,7 @@ class FileSearchFilterChildren extends ChildFactory { private String createQuery(){ String query = "(dir_type = " + TskData.TSK_FS_NAME_TYPE_ENUM.REG.getValue() + ")" - + " AND (known IS NULL OR known != 1) AND (0"; + + " AND (known IS NULL OR known != " + TskData.FileKnown.KNOWN + ") AND (0"; for(String s : filter.getFilter()){ query += " OR name LIKE '%" + s + "'"; } @@ -72,7 +72,7 @@ class FileSearchFilterChildren extends ChildFactory { private List runQuery(){ - List list = new ArrayList(); + List list = new ArrayList<>(); try { List res = skCase.findAllFilesWhere(createQuery()); for(AbstractFile c : res){ diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/SearchFilters.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensionFilters.java similarity index 93% rename from Core/src/org/sleuthkit/autopsy/datamodel/SearchFilters.java rename to Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensionFilters.java index 4bdbe641b7..3f08fd807e 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/SearchFilters.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensionFilters.java @@ -25,11 +25,12 @@ import org.sleuthkit.datamodel.SleuthkitCase; /** * Filters database results by file extension. */ -public class SearchFilters implements AutopsyVisitableItem { +public class FileTypeExtensionFilters implements AutopsyVisitableItem { private SleuthkitCase skCase; - public enum FileSearchFilter implements AutopsyVisitableItem,SearchFilterInterface { + // root node filters + public enum RootFilter implements AutopsyVisitableItem,SearchFilterInterface { TSK_IMAGE_FILTER(0, "TSK_IMAGE_FILTER", "Images", FileTypeExtensions.getImageExtensions()), TSK_VIDEO_FILTER(1, "TSK_VIDEO_FILTER", "Videos", FileTypeExtensions.getVideoExtensions()), TSK_AUDIO_FILTER(2, "TSK_AUDIO_FILTER", "Audio", FileTypeExtensions.getAudioExtensions()), @@ -42,7 +43,7 @@ public class SearchFilters implements AutopsyVisitableItem { private String displayName; private List filter; - private FileSearchFilter(int id, String name, String displayName, List filter){ + private RootFilter(int id, String name, String displayName, List filter){ this.id = id; this.name = name; this.displayName = displayName; @@ -75,6 +76,7 @@ public class SearchFilters implements AutopsyVisitableItem { } } + // document sub-node filters public enum DocumentFilter implements AutopsyVisitableItem,SearchFilterInterface { AUT_DOC_HTML(0, "AUT_DOC_HTML", "HTML", Arrays.asList(".htm", ".html")), AUT_DOC_OFFICE(1, "AUT_DOC_OFFICE", "Office", Arrays.asList(".doc", ".docx", @@ -122,6 +124,7 @@ public class SearchFilters implements AutopsyVisitableItem { } + // executable sub-node filters public enum ExecutableFilter implements AutopsyVisitableItem,SearchFilterInterface { ExecutableFilter_EXE(0, "ExecutableFilter_EXE", ".exe", Arrays.asList(".exe")), ExecutableFilter_DLL(1, "ExecutableFilter_DLL", ".dll", Arrays.asList(".dll")), @@ -167,7 +170,7 @@ public class SearchFilters implements AutopsyVisitableItem { } } - public SearchFilters(SleuthkitCase skCase){ + public FileTypeExtensionFilters(SleuthkitCase skCase){ this.skCase = skCase; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensions.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensions.java index 74a54ef66e..0b067a4678 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensions.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeExtensions.java @@ -1,3 +1,21 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011-2013 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.sleuthkit.autopsy.datamodel; import java.util.Arrays; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java similarity index 84% rename from Core/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterNode.java rename to Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java index 2313d08429..3af3340bac 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileSearchFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java @@ -24,15 +24,15 @@ import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; /** - * Node for the file search filter + * Node for a specific file type / extension */ -public class FileSearchFilterNode extends DisplayableItemNode { +public class FileTypeNode extends DisplayableItemNode { - SearchFilters.SearchFilterInterface filter; + FileTypeExtensionFilters.SearchFilterInterface filter; SleuthkitCase skCase; - FileSearchFilterNode(SearchFilters.SearchFilterInterface filter, SleuthkitCase skCase) { - super(Children.create(new FileSearchFilterChildren(filter, skCase), true), Lookups.singleton(filter.getDisplayName())); + FileTypeNode(FileTypeExtensionFilters.SearchFilterInterface filter, SleuthkitCase skCase) { + super(Children.create(new FileTypeChildren(filter, skCase), true), Lookups.singleton(filter.getDisplayName())); this.filter = filter; this.skCase = skCase; @@ -40,7 +40,7 @@ public class FileSearchFilterNode extends DisplayableItemNode { super.setName(filter.getName()); //get count of children without preloading all children nodes - final long count = new FileSearchFilterChildren(filter, skCase).calculateItems(); + final long count = new FileTypeChildren(filter, skCase).calculateItems(); //final long count = getChildren().getNodesCount(true); super.setDisplayName(filter.getDisplayName() + " (" + count + ")"); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesChildren.java new file mode 100644 index 0000000000..e55124bebc --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesChildren.java @@ -0,0 +1,75 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2011 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.datamodel; + +import java.util.Arrays; +import java.util.List; +import org.openide.nodes.ChildFactory; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.datamodel.FileTypeExtensionFilters.RootFilter; +import org.sleuthkit.datamodel.SleuthkitCase; + +/** + * + */ +class FileTypesChildren extends ChildFactory { + + private SleuthkitCase skCase; + private FileTypeExtensionFilters.RootFilter filter; + + /** + * + * @param skCase + * @param filter Is null for root node + */ + public FileTypesChildren(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter) { + this.skCase = skCase; + this.filter = filter; + } + + @Override + protected boolean createKeys(List list) { + // root node + if (filter == null) { + list.addAll(Arrays.asList(RootFilter.values())); + } + // document and executable has another level of nodes + else if (filter.equals(RootFilter.TSK_DOCUMENT_FILTER) ){ + list.addAll(Arrays.asList(FileTypeExtensionFilters.DocumentFilter.values())); + } + else if (filter.equals(RootFilter.TSK_EXECUTABLE_FILTER) ){ + list.addAll(Arrays.asList(FileTypeExtensionFilters.ExecutableFilter.values())); + } + return true; + } + + @Override + protected Node createNodeForKey(FileTypeExtensionFilters.SearchFilterInterface key){ + // make new nodes for the sub-nodes + if(key.getName().equals(FileTypeExtensionFilters.RootFilter.TSK_DOCUMENT_FILTER.getName())){ + return new FileTypesNode(skCase, FileTypeExtensionFilters.RootFilter.TSK_DOCUMENT_FILTER); + } + else if(key.getName().equals(FileTypeExtensionFilters.RootFilter.TSK_EXECUTABLE_FILTER.getName())){ + return new FileTypesNode(skCase, FileTypeExtensionFilters.RootFilter.TSK_EXECUTABLE_FILTER); + } + else { + return new FileTypeNode(key, skCase); + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java similarity index 76% rename from Core/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java rename to Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java index 6eabf8cc79..b8198c0d14 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/SearchFiltersNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java @@ -24,19 +24,27 @@ import org.openide.util.lookup.Lookups; import org.sleuthkit.datamodel.SleuthkitCase; /** - * Node for search filter + * Node for extension/file type filter view */ -public class SearchFiltersNode extends DisplayableItemNode { +public class FileTypesNode extends DisplayableItemNode { private static final String FNAME = "File Types"; private SleuthkitCase skCase; - SearchFiltersNode(SleuthkitCase skCase, SearchFilters.FileSearchFilter filter) { - super(Children.create(new SearchFiltersChildren(skCase, filter), true), Lookups.singleton(filter == null ? FNAME : filter.getName())); + /** + * + * @param skCase + * @param filter null to display root node of file type tree, pass in something to provide a sub-node. + */ + FileTypesNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter) { + super(Children.create(new FileTypesChildren(skCase, filter), true), Lookups.singleton(filter == null ? FNAME : filter.getName())); + // root node of tree if (filter == null) { super.setName(FNAME); super.setDisplayName(FNAME); - } else { + } + // sub-node in file tree (i.e. documents, exec, etc.) + else { super.setName(filter.getName()); super.setDisplayName(filter.getDisplayName()); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/SearchFiltersChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/SearchFiltersChildren.java deleted file mode 100644 index cdc1109a47..0000000000 --- a/Core/src/org/sleuthkit/autopsy/datamodel/SearchFiltersChildren.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.datamodel; - -import java.util.Arrays; -import java.util.List; -import org.openide.nodes.ChildFactory; -import org.openide.nodes.Node; -import org.sleuthkit.autopsy.datamodel.SearchFilters.FileSearchFilter; -import org.sleuthkit.datamodel.SleuthkitCase; - -/** - * - */ -class SearchFiltersChildren extends ChildFactory { - - private SleuthkitCase skCase; - private SearchFilters.FileSearchFilter filter; - - public SearchFiltersChildren(SleuthkitCase skCase, SearchFilters.FileSearchFilter filter) { - this.skCase = skCase; - this.filter = filter; - } - - @Override - protected boolean createKeys(List list) { - if (filter == null) { - list.addAll(Arrays.asList(FileSearchFilter.values())); - } - else if (filter.equals(FileSearchFilter.TSK_DOCUMENT_FILTER) ){ - list.addAll(Arrays.asList(SearchFilters.DocumentFilter.values())); - } - else if (filter.equals(FileSearchFilter.TSK_EXECUTABLE_FILTER) ){ - list.addAll(Arrays.asList(SearchFilters.ExecutableFilter.values())); - } - return true; - } - - @Override - protected Node createNodeForKey(SearchFilters.SearchFilterInterface key){ - if(key.getName().equals(SearchFilters.FileSearchFilter.TSK_DOCUMENT_FILTER.getName())){ - return new SearchFiltersNode(skCase, SearchFilters.FileSearchFilter.TSK_DOCUMENT_FILTER); - } - else if(key.getName().equals(SearchFilters.FileSearchFilter.TSK_EXECUTABLE_FILTER.getName())){ - return new SearchFiltersNode(skCase, SearchFilters.FileSearchFilter.TSK_EXECUTABLE_FILTER); - } - else { - return new FileSearchFilterNode(key, skCase); - } - } - -} diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java index eea33be974..652ae959a2 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java @@ -34,7 +34,7 @@ public class ViewsNode extends DisplayableItemNode { public ViewsNode(SleuthkitCase sleuthkitCase) { super(new RootContentChildren(Arrays.asList( - new SearchFilters(sleuthkitCase), + new FileTypeExtensionFilters(sleuthkitCase), new RecentFiles(sleuthkitCase), new DeletedContent(sleuthkitCase), new FileSize(sleuthkitCase)