diff --git a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java index 90afb8d7a6..768ad8d129 100644 --- a/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonfilesearch/CommonFilesPanel.java @@ -34,7 +34,7 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable; -import org.sleuthkit.autopsy.corecomponents.SinlgeLayerTableFilterNode; +import org.sleuthkit.autopsy.corecomponents.SingleLayerTableFilterNode; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.directorytree.DataResultFilterNode; @@ -245,7 +245,7 @@ public final class CommonFilesPanel extends javax.swing.JPanel { DataResultFilterNode dataResultFilterNode = new DataResultFilterNode(commonFilesNode, ExplorerManager.find(CommonFilesPanel.this)); //TODO this will be something else that acts similarly to tablefilternode - SinlgeLayerTableFilterNode tableFilterWithDescendantsNode = new SinlgeLayerTableFilterNode(dataResultFilterNode); + SingleLayerTableFilterNode tableFilterWithDescendantsNode = new SingleLayerTableFilterNode(dataResultFilterNode); DataResultViewerTable table = new DataResultViewerTable(); diff --git a/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java b/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java index 8228f3de61..14b8b283c4 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java +++ b/Core/src/org/sleuthkit/autopsy/communications/MessageBrowser.java @@ -33,7 +33,7 @@ import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.DataResultPanel; import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable; -import org.sleuthkit.autopsy.corecomponents.SinlgeLayerTableFilterNode; +import org.sleuthkit.autopsy.corecomponents.SingleLayerTableFilterNode; import org.sleuthkit.autopsy.directorytree.DataResultFilterNode; /** @@ -142,7 +142,7 @@ public final class MessageBrowser extends JPanel implements ExplorerManager.Prov rootNode = selectedNode; } messagesResultPanel.setPath(rootNode.getDisplayName()); - messagesResultPanel.setNode(new SinlgeLayerTableFilterNode(new DataResultFilterNode(rootNode, gacExplorerManager), true)); + messagesResultPanel.setNode(new SingleLayerTableFilterNode(new DataResultFilterNode(rootNode, gacExplorerManager), true)); } } } diff --git a/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java b/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java index 064e043b87..4ebca21bff 100644 --- a/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java +++ b/Core/src/org/sleuthkit/autopsy/contentviewers/MessageContentViewer.java @@ -38,7 +38,7 @@ import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContentViewer; import org.sleuthkit.autopsy.corecomponents.DataResultPanel; -import org.sleuthkit.autopsy.corecomponents.SinlgeLayerTableFilterNode; +import org.sleuthkit.autopsy.corecomponents.SingleLayerTableFilterNode; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.FileNode; import org.sleuthkit.autopsy.datamodel.NodeProperty; @@ -99,7 +99,7 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont @NbBundle.Messages("MessageContentViewer.AtrachmentsPanel.title=Attachments") public MessageContentViewer() { initComponents(); - drp = DataResultPanel.createInstanceUninitialized(Bundle.MessageContentViewer_AtrachmentsPanel_title(), "", new SinlgeLayerTableFilterNode(Node.EMPTY, false), 0, null); + drp = DataResultPanel.createInstanceUninitialized(Bundle.MessageContentViewer_AtrachmentsPanel_title(), "", new SingleLayerTableFilterNode(Node.EMPTY, false), 0, null); attachmentsScrollPane.setViewportView(drp); msgbodyTabbedPane.setEnabledAt(ATTM_TAB_INDEX, true); @@ -596,7 +596,7 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont msgbodyTabbedPane.setEnabledAt(ATTM_TAB_INDEX, numberOfAttachments > 0); msgbodyTabbedPane.setTitleAt(ATTM_TAB_INDEX, "Attachments (" + numberOfAttachments + ")"); - drp.setNode(new SinlgeLayerTableFilterNode(new DataResultFilterNode(new AbstractNode( + drp.setNode(new SingleLayerTableFilterNode(new DataResultFilterNode(new AbstractNode( new AttachmentsChildren(attachments)), null), true)); } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java index 6a6505127c..535201de30 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java @@ -443,8 +443,8 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C * found. */ int tabToSelect = NO_TAB_SELECTED; - if (selectedNode instanceof SinlgeLayerTableFilterNode) { - NodeSelectionInfo selectedChildInfo = ((SinlgeLayerTableFilterNode) selectedNode).getChildNodeSelectionInfo(); + if (selectedNode instanceof SingleLayerTableFilterNode) { + NodeSelectionInfo selectedChildInfo = ((TableFilterNode) selectedNode).getChildNodeSelectionInfo(); if (null != selectedChildInfo) { for (int i = 0; i < resultViewers.size(); ++i) { if (resultViewers.get(i) instanceof DataResultViewerTable && resultViewerTabs.isEnabledAt(i)) { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java index 9ed3338d93..9e27700481 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -315,8 +315,8 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { * it. */ SwingUtilities.invokeLater(() -> { - if (rootNode instanceof SinlgeLayerTableFilterNode) { - NodeSelectionInfo selectedChildInfo = ((SinlgeLayerTableFilterNode) rootNode).getChildNodeSelectionInfo(); + if (rootNode instanceof TableFilterNode) { + NodeSelectionInfo selectedChildInfo = ((TableFilterNode) rootNode).getChildNodeSelectionInfo(); if (null != selectedChildInfo) { Node[] childNodes = rootNode.getChildren().getNodes(true); for (int i = 0; i < childNodes.length; ++i) { @@ -330,7 +330,7 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { break; } } - ((SinlgeLayerTableFilterNode) rootNode).setChildNodeSelectionInfo(null); + ((TableFilterNode) rootNode).setChildNodeSelectionInfo(null); } } }); @@ -430,8 +430,8 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { if (rootNode == null || propertiesMap.isEmpty()) { return; } - if (rootNode instanceof SinlgeLayerTableFilterNode) { - SinlgeLayerTableFilterNode tfn = (SinlgeLayerTableFilterNode) rootNode; + if (rootNode instanceof TableFilterNode) { + TableFilterNode tfn = (TableFilterNode) rootNode; final Preferences preferences = NbPreferences.forModule(DataResultViewerTable.class); final ETableColumnModel columnModel = (ETableColumnModel) outline.getColumnModel(); for (Map.Entry entry : columnMap.entrySet()) { @@ -456,8 +456,8 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { if (rootNode == null || propertiesMap.isEmpty()) { return; } - if (rootNode instanceof SinlgeLayerTableFilterNode) { - SinlgeLayerTableFilterNode tfn = (SinlgeLayerTableFilterNode) rootNode; + if (rootNode instanceof TableFilterNode) { + TableFilterNode tfn = (TableFilterNode) rootNode; final Preferences preferences = NbPreferences.forModule(DataResultViewerTable.class); // Store the current order of the columns into settings for (Map.Entry> entry : propertiesMap.entrySet()) { @@ -473,8 +473,8 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { if (rootNode == null || propertiesMap.isEmpty()) { return; } - if (rootNode instanceof SinlgeLayerTableFilterNode) { - final SinlgeLayerTableFilterNode tfn = ((SinlgeLayerTableFilterNode) rootNode); + if (rootNode instanceof TableFilterNode) { + final TableFilterNode tfn = ((TableFilterNode) rootNode); final Preferences preferences = NbPreferences.forModule(DataResultViewerTable.class); ETableColumnModel columnModel = (ETableColumnModel) outline.getColumnModel(); for (Map.Entry entry : columnMap.entrySet()) { @@ -505,8 +505,8 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { if (rootNode == null || propertiesMap.isEmpty()) { return; } - if (rootNode instanceof SinlgeLayerTableFilterNode) { - final SinlgeLayerTableFilterNode tfn = (SinlgeLayerTableFilterNode) rootNode; + if (rootNode instanceof TableFilterNode) { + final TableFilterNode tfn = (TableFilterNode) rootNode; final Preferences preferences = NbPreferences.forModule(DataResultViewerTable.class); //organize property sorting information, sorted by rank TreeSet sortInfos = new TreeSet<>(Comparator.comparing(ColumnSortInfo::getRank)); @@ -531,9 +531,9 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { if (rootNode == null || propertiesMap.isEmpty()) { return; } - if (rootNode instanceof SinlgeLayerTableFilterNode) { + if (rootNode instanceof SingleLayerTableFilterNode) { final Preferences preferences = NbPreferences.forModule(DataResultViewerTable.class); - final SinlgeLayerTableFilterNode tfn = ((SinlgeLayerTableFilterNode) rootNode); + final TableFilterNode tfn = ((TableFilterNode) rootNode); ETableColumnModel columnModel = (ETableColumnModel) outline.getColumnModel(); for (Map.Entry> entry : propertiesMap.entrySet()) { final String propName = entry.getValue().getName(); @@ -557,11 +557,11 @@ public final class DataResultViewerTable extends AbstractDataResultViewer { List> props = ResultViewerPersistence.getAllChildProperties(rootNode, 100); // If node is not table filter node, use default order for columns - if (!(rootNode instanceof SinlgeLayerTableFilterNode)) { + if (!(rootNode instanceof TableFilterNode)) { return props; } - final SinlgeLayerTableFilterNode tfn = ((SinlgeLayerTableFilterNode) rootNode); + final TableFilterNode tfn = ((TableFilterNode) rootNode); propertiesMap.clear(); /* diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java index 367daa8edc..b14dbf53c2 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerThumbnail.java @@ -77,7 +77,7 @@ public final class DataResultViewerThumbnail extends AbstractDataResultViewer { private static final long serialVersionUID = 1L; private static final Logger logger = Logger.getLogger(DataResultViewerThumbnail.class.getName()); private final PageUpdater pageUpdater = new PageUpdater(); - private SinlgeLayerTableFilterNode rootNode; + private SingleLayerTableFilterNode rootNode; private ThumbnailViewChildren rootNodeChildren; private NodeSelectionListener selectionListener; private int currentPage; @@ -387,7 +387,7 @@ public final class DataResultViewerThumbnail extends AbstractDataResultViewer { } try { if (givenNode != null) { - rootNode = (SinlgeLayerTableFilterNode) givenNode; + rootNode = (SingleLayerTableFilterNode) givenNode; /* * Wrap the given node in a ThumbnailViewChildren that will * produce ThumbnailPageNodes with ThumbnailViewNode children diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ResultViewerPersistence.java b/Core/src/org/sleuthkit/autopsy/corecomponents/ResultViewerPersistence.java index 6630673994..498857cdd5 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/ResultViewerPersistence.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ResultViewerPersistence.java @@ -43,7 +43,7 @@ final class ResultViewerPersistence { * * @return A generated key for the preference file */ - static String getColumnPositionKey(SinlgeLayerTableFilterNode node, String propName) { + static String getColumnPositionKey(TableFilterNode node, String propName) { return getColumnKeyBase(node, propName) + ".column"; } @@ -56,7 +56,7 @@ final class ResultViewerPersistence { * * @return A generated key for the preference file */ - static String getColumnSortOrderKey(SinlgeLayerTableFilterNode node, String propName) { + static String getColumnSortOrderKey(TableFilterNode node, String propName) { return getColumnKeyBase(node, propName) + ".sortOrder"; } @@ -69,7 +69,7 @@ final class ResultViewerPersistence { * * @return A generated key for the preference file */ - static String getColumnSortRankKey(SinlgeLayerTableFilterNode node, String propName) { + static String getColumnSortRankKey(TableFilterNode node, String propName) { return getColumnKeyBase(node, propName) + ".sortRank"; } @@ -82,11 +82,11 @@ final class ResultViewerPersistence { * * @return A generated key for the preference file */ - static String getColumnHiddenKey(SinlgeLayerTableFilterNode node, String propName) { + static String getColumnHiddenKey(TableFilterNode node, String propName) { return getColumnKeyBase(node, propName) + ".hidden"; } - private static String getColumnKeyBase(SinlgeLayerTableFilterNode node, String propName) { + private static String getColumnKeyBase(TableFilterNode node, String propName) { return stripNonAlphanumeric(node.getColumnOrderKey()) + "." + stripNonAlphanumeric(propName); } @@ -152,7 +152,7 @@ final class ResultViewerPersistence { * @return A map from sort rank to sort criterion, where rank 1 means that * this is the most important sort criteria, 2 means second etc. */ - static List< SortCriterion> loadSortCriteria(SinlgeLayerTableFilterNode node) { + static List< SortCriterion> loadSortCriteria(SingleLayerTableFilterNode node) { List> availableProperties = ResultViewerPersistence.getAllChildProperties(node, 100); final Preferences preferences = NbPreferences.forModule(DataResultViewerTable.class); java.util.SortedMap criteriaMap = new TreeMap<>(); diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/SinlgeLayerTableFilterNode.java b/Core/src/org/sleuthkit/autopsy/corecomponents/SingleLayerTableFilterNode.java similarity index 93% rename from Core/src/org/sleuthkit/autopsy/corecomponents/SinlgeLayerTableFilterNode.java rename to Core/src/org/sleuthkit/autopsy/corecomponents/SingleLayerTableFilterNode.java index 08dae01c3a..cc7113ef90 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/SinlgeLayerTableFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/SingleLayerTableFilterNode.java @@ -30,7 +30,7 @@ import org.sleuthkit.autopsy.directorytree.DataResultFilterNode; * wraps. It is designed to be used in the results view to ensure the individual * viewers display only the first layer of child nodes. */ -public class SinlgeLayerTableFilterNode extends FilterNode { +public class SingleLayerTableFilterNode extends FilterNode implements TableFilterNode { private final boolean createChildren; private boolean forceUseWrappedDisplayName = false; @@ -46,7 +46,7 @@ public class SinlgeLayerTableFilterNode extends FilterNode { * @param createChildren True if a Children object should be created for the * wrapped node. */ - public SinlgeLayerTableFilterNode(Node node, boolean createChildren) { + public SingleLayerTableFilterNode(Node node, boolean createChildren) { super(node, TableFilterChildren.createInstance(node, createChildren), Lookups.proxy(node)); this.createChildren = createChildren; } @@ -59,7 +59,7 @@ public class SinlgeLayerTableFilterNode extends FilterNode { * * @param node The node to wrap */ - public SinlgeLayerTableFilterNode(Node node) { + public SingleLayerTableFilterNode(Node node) { super(node, TableFilterChildrenWithDescendants.createInstance(node, true), Lookups.proxy(node)); this.createChildren = true; this.forceUseWrappedDisplayName = false; @@ -72,7 +72,7 @@ public class SinlgeLayerTableFilterNode extends FilterNode { * @param createChildren node has children? * @param forceUseWrappedDisplayName allow use of custom getDisplayName() . */ - SinlgeLayerTableFilterNode(Node node, boolean createChildren, boolean forceUseWrappedDisplayName) { + SingleLayerTableFilterNode(Node node, boolean createChildren, boolean forceUseWrappedDisplayName) { super(node, TableFilterChildren.createInstance(node, createChildren), Lookups.proxy(node)); this.createChildren = createChildren; this.forceUseWrappedDisplayName = forceUseWrappedDisplayName; @@ -90,7 +90,7 @@ public class SinlgeLayerTableFilterNode extends FilterNode { * @param columnOrderKey A key that represents the type of the original * wrapped node and what is being displayed under that node. */ - public SinlgeLayerTableFilterNode(Node node, boolean createChildren, String columnOrderKey) { + public SingleLayerTableFilterNode(Node node, boolean createChildren, String columnOrderKey) { super(node, TableFilterChildren.createInstance(node, createChildren)); this.createChildren = createChildren; this.columnOrderKey = columnOrderKey; @@ -113,7 +113,7 @@ public class SinlgeLayerTableFilterNode extends FilterNode { } } - protected String getParentDisplayName() { + public String getParentDisplayName() { return super.getDisplayName(); } @@ -159,8 +159,7 @@ public class SinlgeLayerTableFilterNode extends FilterNode { * DataResultViewerTable. The key should represent what kinds of items the * table is showing. */ - String getColumnOrderKey() { + public String getColumnOrderKey() { return columnOrderKey; } - } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java index 2b667e8892..87659feec2 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildren.java @@ -23,7 +23,7 @@ import org.openide.nodes.FilterNode; import org.openide.nodes.Node; /** - * A Children implementation for a SinlgeLayerTableFilterNode. A SinlgeLayerTableFilterNode creates at + * A Children implementation for a SingleLayerTableFilterNode. A SingleLayerTableFilterNode creates at most one layer of child nodes for the node it wraps. It is designed to be used in the results view to ensure the individual viewers display only the first layer of child nodes. @@ -31,18 +31,18 @@ import org.openide.nodes.Node; class TableFilterChildren extends FilterNode.Children { /** - * Creates a Children object for a SinlgeLayerTableFilterNode. A SinlgeLayerTableFilterNode + * Creates a Children object for a SingleLayerTableFilterNode. A SingleLayerTableFilterNode creates at most one layer of child nodes for the node it wraps. It is designed to be used in the results view to ensure the individual viewers display only the first layer of child nodes. * * - * @param wrappedNode The node wrapped by the SinlgeLayerTableFilterNode. + * @param wrappedNode The node wrapped by the SingleLayerTableFilterNode. * @param createChildren True if a children (child factory) object should be * created for the wrapped node. * * @return A children (child factory) object for a node wrapped by a - SinlgeLayerTableFilterNode. + SingleLayerTableFilterNode. */ public static Children createInstance(Node wrappedNode, boolean createChildren) { @@ -57,27 +57,27 @@ class TableFilterChildren extends FilterNode.Children { /** * Constructs a children (child factory) implementation for a - SinlgeLayerTableFilterNode. A SinlgeLayerTableFilterNode creates at most one layer of child + SingleLayerTableFilterNode. A SingleLayerTableFilterNode creates at most one layer of child nodes for the node it wraps. It is designed to be used for nodes displayed in Autopsy table views. * - * @param wrappedNode The node wrapped by the SinlgeLayerTableFilterNode. + * @param wrappedNode The node wrapped by the SingleLayerTableFilterNode. */ TableFilterChildren(Node wrappedNode) { super(wrappedNode); } /** - * Copies a SinlgeLayerTableFilterNode, with the create children (child factory) flag + * Copies a SingleLayerTableFilterNode, with the create children (child factory) flag set to false. * - * @param nodeToCopy The SinlgeLayerTableFilterNode to copy. + * @param nodeToCopy The SingleLayerTableFilterNode to copy. * - * @return A copy of a SinlgeLayerTableFilterNode. + * @return A copy of a SingleLayerTableFilterNode. */ @Override protected Node copyNode(Node nodeToCopy) { - return new SinlgeLayerTableFilterNode(nodeToCopy, false); + return new SingleLayerTableFilterNode(nodeToCopy, false); } /** diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildrenWithDescendants.java b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildrenWithDescendants.java index 3afdbd4608..5e5ca6fdd9 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildrenWithDescendants.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterChildrenWithDescendants.java @@ -42,6 +42,6 @@ final class TableFilterChildrenWithDescendants extends TableFilterChildren { @Override protected Node copyNode(Node nodeToCopy){ - return new SinlgeLayerTableFilterNode(nodeToCopy, true, true); + return new SingleLayerTableFilterNode(nodeToCopy, true, true); } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java new file mode 100644 index 0000000000..0f925c3f77 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java @@ -0,0 +1,64 @@ +/* + * + * Autopsy Forensic Browser + * + * Copyright 2018 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.corecomponents; + +import org.sleuthkit.autopsy.datamodel.NodeSelectionInfo; + +/** + * Specifies behavior of nodes which are displayed in the DataResultTopComponent. + */ +public interface TableFilterNode { + + /** + * Gets information about which child node of this node, if any, should be + * selected. + * + * @return The child node selection information, or null if no child should + * be selected. + */ + public NodeSelectionInfo getChildNodeSelectionInfo(); + + /** + * @return the column order key, which allows custom column ordering to be + * written into a properties file and be reloaded for future use in a table + * with the same root node or for different cases. This is done by + * DataResultViewerTable. The key should represent what kinds of items the + * table is showing. + */ + public String getColumnOrderKey(); + + /** + * Gets the display name for the wrapped node, for use in the first column + * of an Autopsy table view. + * + * @return The display name. + */ + public String getDisplayName(); + + public String getParentDisplayName(); + + /** + * Adds information about which child node of this node, if any, should be + * selected. Can be null. + * + * @param selectedChildNodeInfo The child node selection information. + */ + public void setChildNodeSelectionInfo(NodeSelectionInfo selectedChildNodeInfo); +} diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java b/Core/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java index 1236125fd9..2e2461a3ea 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ThumbnailViewChildren.java @@ -133,10 +133,10 @@ class ThumbnailViewChildren extends Children.Keys { private synchronized Comparator getComparator() { Comparator comp = (node1, node2) -> 0; //eveything is equal. - if (!(parent instanceof SinlgeLayerTableFilterNode)) { + if (!(parent instanceof SingleLayerTableFilterNode)) { return comp; } else { - List sortCriteria = loadSortCriteria((SinlgeLayerTableFilterNode) parent); + List sortCriteria = loadSortCriteria((SingleLayerTableFilterNode) parent); /** * Make a comparator that will sort the nodes. diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index fbd794599f..822a195f8a 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -59,7 +59,7 @@ import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.corecomponentinterfaces.CoreComponentControl; import org.sleuthkit.autopsy.corecomponentinterfaces.DataExplorer; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; -import org.sleuthkit.autopsy.corecomponents.SinlgeLayerTableFilterNode; +import org.sleuthkit.autopsy.corecomponents.SingleLayerTableFilterNode; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.ArtifactNodeSelectionInfo; import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode; @@ -669,16 +669,16 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat Node originNode = ((DirectoryTreeFilterNode) treeNode).getOriginal(); //set node, wrap in filter node first to filter out children Node drfn = new DataResultFilterNode(originNode, DirectoryTreeTopComponent.this.em); - // Create a SinlgeLayerTableFilterNode with knowledge of the node's type to allow for column order settings + // Create a SingleLayerTableFilterNode with knowledge of the node's type to allow for column order settings if (FileTypesByMimeType.isEmptyMimeTypeNode(originNode)) { //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 EmptyNode emptyNode = new EmptyNode(Bundle.DirectoryTreeTopComponent_emptyMimeNode_text()); - dataResult.setNode(new SinlgeLayerTableFilterNode(emptyNode, true, "This Node Is Empty")); //NON-NLS + dataResult.setNode(new SingleLayerTableFilterNode(emptyNode, true, "This Node Is Empty")); //NON-NLS } else if (originNode instanceof DisplayableItemNode) { - dataResult.setNode(new SinlgeLayerTableFilterNode(drfn, true, ((DisplayableItemNode) originNode).getItemType())); + dataResult.setNode(new SingleLayerTableFilterNode(drfn, true, ((DisplayableItemNode) originNode).getItemType())); } else { - dataResult.setNode(new SinlgeLayerTableFilterNode(drfn, true)); + dataResult.setNode(new SingleLayerTableFilterNode(drfn, true)); } String displayName = ""; Content content = originNode.getLookup().lookup(Content.class); diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java index 236b141926..2695154ec4 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java @@ -40,7 +40,7 @@ import org.openide.windows.TopComponent; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; -import org.sleuthkit.autopsy.corecomponents.SinlgeLayerTableFilterNode; +import org.sleuthkit.autopsy.corecomponents.SingleLayerTableFilterNode; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; @@ -193,7 +193,7 @@ class FileSearchPanel extends javax.swing.JPanel { SearchNode sn = new SearchNode(contentList); final TopComponent searchResultWin = DataResultTopComponent.createInstance(title, pathText, - new SinlgeLayerTableFilterNode(sn, true, sn.getName()), contentList.size()); + new SingleLayerTableFilterNode(sn, true, sn.getName()), contentList.size()); searchResultWin.requestActive(); // make it the active top component diff --git a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java index 423779ce4e..a7be338d6f 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java @@ -62,7 +62,7 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent; import org.sleuthkit.autopsy.corecomponents.DataContentPanel; import org.sleuthkit.autopsy.corecomponents.DataResultPanel; -import org.sleuthkit.autopsy.corecomponents.SinlgeLayerTableFilterNode; +import org.sleuthkit.autopsy.corecomponents.SingleLayerTableFilterNode; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.ThreadConfined; import org.sleuthkit.autopsy.timeline.actions.Back; @@ -209,7 +209,7 @@ public final class TimeLineTopComponent extends TopComponent implements Explorer case DETAIL: //make a root node with nodes for the selected events as children and push it to the result viewer. EventRootNode rootNode = new EventRootNode(selectedEventIDs, controller.getEventsModel()); - SinlgeLayerTableFilterNode tableFilterNode = new SinlgeLayerTableFilterNode(rootNode, true, "Event"); + SingleLayerTableFilterNode tableFilterNode = new SingleLayerTableFilterNode(rootNode, true, "Event"); SwingUtilities.invokeLater(() -> { dataResultPanel.setPath(getResultViewerSummaryString()); dataResultPanel.setNode(tableFilterNode); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AdHocSearchDelegator.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AdHocSearchDelegator.java index cbe40809da..6eab8f3ee1 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AdHocSearchDelegator.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AdHocSearchDelegator.java @@ -30,7 +30,7 @@ import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; -import org.sleuthkit.autopsy.corecomponents.SinlgeLayerTableFilterNode; +import org.sleuthkit.autopsy.corecomponents.SingleLayerTableFilterNode; import org.sleuthkit.autopsy.coreutils.Logger; /** @@ -104,7 +104,7 @@ class AdHocSearchDelegator { final String pathText = NbBundle.getMessage(this.getClass(), "KeywordSearchQueryManager.pathText.text"); - DataResultTopComponent.initInstance(pathText, new SinlgeLayerTableFilterNode(rootNode, true, KeywordSearch.class.getName()), + DataResultTopComponent.initInstance(pathText, new SingleLayerTableFilterNode(rootNode, true, KeywordSearch.class.getName()), queryRequests.size(), searchResultWin); searchResultWin.requestActive(); diff --git a/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties index b1adb5d40b..741247d8d3 100644 --- a/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties +++ b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties @@ -1,5 +1,5 @@ #Updated by build script -#Mon, 19 Mar 2018 11:17:11 -0700 +#Fri, 15 Jun 2018 12:30:02 -0600 LBL_splash_window_title=Starting Autopsy SPLASH_HEIGHT=314 SPLASH_WIDTH=538 @@ -8,4 +8,4 @@ SplashRunningTextBounds=0,289,538,18 SplashRunningTextColor=0x0 SplashRunningTextFontSize=19 -currentVersion=Autopsy 4.6.0 +currentVersion=Autopsy 4.7.0 diff --git a/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties index 6cb9d4bdea..5e6893f50b 100644 --- a/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties +++ b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties @@ -1,4 +1,4 @@ #Updated by build script -#Fri, 09 Mar 2018 13:03:41 -0700 -CTL_MainWindow_Title=Autopsy 4.6.0 -CTL_MainWindow_Title_No_Project=Autopsy 4.6.0 +#Fri, 15 Jun 2018 12:30:02 -0600 +CTL_MainWindow_Title=Autopsy 4.7.0 +CTL_MainWindow_Title_No_Project=Autopsy 4.7.0