From db7ab2dd14da3b0f8577147f752dd4d908259f2e Mon Sep 17 00:00:00 2001 From: Sophie Mori Date: Thu, 22 Sep 2016 13:38:00 -0400 Subject: [PATCH] Finished implementing getTypeName for instances of DisplayableItemNode --- .../corecomponents/DataResultViewerTable.java | 185 ++++++++++-------- .../corecomponents/TableFilterNode.java | 18 +- .../datamodel/BlackboardArtifactNode.java | 13 +- .../datamodel/BlackboardArtifactTagNode.java | 13 +- .../autopsy/datamodel/ContentTagNode.java | 13 +- .../autopsy/datamodel/DataSourcesNode.java | 13 +- .../autopsy/datamodel/DeletedContent.java | 34 ++-- .../autopsy/datamodel/DirectoryNode.java | 13 +- .../datamodel/DisplayableItemNode.java | 2 +- .../autopsy/datamodel/EmailExtracted.java | 39 ++-- .../autopsy/datamodel/ExtractedContent.java | 26 +-- .../sleuthkit/autopsy/datamodel/FileNode.java | 13 +- .../sleuthkit/autopsy/datamodel/FileSize.java | 28 +-- .../autopsy/datamodel/FileTypeNode.java | 20 +- .../autopsy/datamodel/FileTypesNode.java | 28 ++- .../autopsy/datamodel/HashsetHits.java | 30 ++- .../autopsy/datamodel/ImageNode.java | 13 +- .../autopsy/datamodel/InterestingHits.java | 30 ++- .../autopsy/datamodel/KeywordHits.java | 39 ++-- .../autopsy/datamodel/LayoutFileNode.java | 15 +- .../autopsy/datamodel/LocalFileNode.java | 13 +- .../datamodel/RecentFilesFilterNode.java | 17 +- .../autopsy/datamodel/RecentFilesNode.java | 13 +- .../sleuthkit/autopsy/datamodel/Reports.java | 27 +-- .../autopsy/datamodel/ResultsNode.java | 13 +- .../org/sleuthkit/autopsy/datamodel/Tags.java | 64 +++--- .../autopsy/datamodel/ViewsNode.java | 13 +- .../datamodel/VirtualDirectoryNode.java | 17 +- .../autopsy/datamodel/VolumeNode.java | 13 +- .../DirectoryTreeTopComponent.java | 8 +- .../timeline/explorernodes/EventNode.java | 14 +- .../timeline/explorernodes/EventRootNode.java | 13 +- 32 files changed, 331 insertions(+), 479 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java index ccb562a3ec..a9fc2eab99 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -30,10 +30,15 @@ import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.logging.Level; import javax.swing.Action; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.TableColumnModelEvent; +import javax.swing.event.TableColumnModelListener; import org.netbeans.swing.outline.DefaultOutlineModel; import org.openide.explorer.ExplorerManager; import org.openide.explorer.view.OutlineView; @@ -48,7 +53,10 @@ import org.openide.nodes.NodeMemberEvent; import org.openide.nodes.NodeReorderEvent; import org.openide.nodes.Sheet; import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; +import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; +import org.sleuthkit.autopsy.coreutils.Logger; /** * DataResult sortable table viewer @@ -60,6 +68,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataResultViewer; public class DataResultViewerTable extends AbstractDataResultViewer { private String firstColumnLabel = NbBundle.getMessage(DataResultViewerTable.class, "DataResultViewerTable.firstColLbl"); + // This is a set because we add properties of up to 100 child nodes, and we want unique properties private Set> propertiesAcc = new LinkedHashSet<>(); private final DummyNodeListener dummyNodeListener = new DummyNodeListener(); private static final String DUMMY_NODE_DISPLAY_NAME = NbBundle.getMessage(DataResultViewerTable.class, "DataResultViewerTable.dummyNodeDisplayName"); @@ -99,29 +108,32 @@ public class DataResultViewerTable extends AbstractDataResultViewer { * * The following lines of code were added for this feature. */ -// ov.getOutline().getColumnModel().addColumnModelListener(new TableColumnModelListener() { -// @Override -// public void columnAdded(TableColumnModelEvent e) {} -// @Override -// public void columnRemoved(TableColumnModelEvent e) {} -// @Override -// public void columnMarginChanged(ChangeEvent e) {} -// @Override -// public void columnSelectionChanged(ListSelectionEvent e) {} -// -// @Override -// public void columnMoved(TableColumnModelEvent e) { -// // change the order of the column in the array/hashset -// List> props = new ArrayList<>(propertiesAcc); -// Node.Property prop = props.remove(e.getFromIndex()); -// props.add(e.getToIndex(), prop); -// -// propertiesAcc.clear(); -// for (int j = 0; j < props.size(); ++j) { -// propertiesAcc.add(props.get(j)); -// } -// } -// }); + ov.getOutline().getColumnModel().addColumnModelListener(new TableColumnModelListener() { + @Override + public void columnAdded(TableColumnModelEvent e) {} + @Override + public void columnRemoved(TableColumnModelEvent e) {} + @Override + public void columnMarginChanged(ChangeEvent e) {} + @Override + public void columnSelectionChanged(ListSelectionEvent e) {} + @Override + public void columnMoved(TableColumnModelEvent e) { + if (e.getFromIndex() == 0) { + return; + } + // change the order of the column in the array/hashset + List> props = new ArrayList<>(propertiesAcc); + Node.Property prop = props.remove(e.getFromIndex()); + props.add(e.getToIndex(), prop); + + propertiesAcc.clear(); + for (int j = 0; j < props.size(); ++j) { + propertiesAcc.add(props.get(j)); + } + storeState(); + } + }); } /** @@ -332,13 +344,12 @@ public class DataResultViewerTable extends AbstractDataResultViewer { * The next three lines of code replaced the three lines of code that * follow */ -// storeState(); - // set the new root as current -// currentRoot = root; -// List> props = loadState(); - propertiesAcc.clear(); - DataResultViewerTable.this.getAllChildPropertyHeadersRec(root, 100); - List> props = new ArrayList<>(propertiesAcc); + //set the new root as current + currentRoot = root; + List> props = loadState(); +// propertiesAcc.clear(); +// DataResultViewerTable.this.getAllChildPropertyHeadersRec(root, 100); +// List> props = new ArrayList<>(propertiesAcc); /* * OutlineView makes the first column be the result of @@ -417,63 +428,63 @@ public class DataResultViewerTable extends AbstractDataResultViewer { * The following three methods were added for this feature */ // Store the state of current root Node. -// private void storeState() { -// if(currentRoot == null || propertiesAcc.isEmpty()) -// return; -// -// TableFilterNode tfn; -// if(currentRoot instanceof TableFilterNode) -// tfn = (TableFilterNode) currentRoot; -// else -// return; -// -// List> props = new ArrayList<>(propertiesAcc); -// for (int i = 0; i < props.size(); i++) { -// Property prop = props.get(i); -// NbPreferences.forModule(this.getClass()).put(getUniqueColName(prop, tfn.getItemType()), String.valueOf(i)); -// } -// } - // Load the state of current root Node if exists. -// private List> loadState() { -// propertiesAcc.clear(); -// this.getAllChildPropertyHeadersRec(currentRoot, 100); -// List> props = new ArrayList<>(propertiesAcc); -// -// // If node is not table filter node, use default order for columns -// TableFilterNode tfn; -// if (currentRoot instanceof TableFilterNode) { -// tfn = (TableFilterNode) currentRoot; -// } else { -// Logger.getLogger(DataResultViewerTable.class.getName()).log(Level.INFO, -// "Node {0} is not TableFilterNode, columns are going to be in default order", currentRoot.getName()); -// return props; -// } -// -// List> orderedProps = new ArrayList<>(propertiesAcc); -// for (Property prop : props) { -// Integer value = Integer.valueOf(NbPreferences.forModule(this.getClass()).get(getUniqueColName(prop, tfn.getItemType()), "-1")); -// if (value >= 0) { -// /** -// * The original contents of orderedProps do not matter when -// * setting the new ordered values. The reason we copy -// * propertiesAcc into it first is to give it the currect size so -// * we can set() in any index. -// */ -// orderedProps.set(value, prop); -// } -// } -// propertiesAcc.clear(); -// for (Property prop : orderedProps) { -// propertiesAcc.add(prop); -// } -// return orderedProps; -// } -// -// // Get unique name for node and it's property. -// private String getUniqueColName(Property prop, String type) { -// return Case.getCurrentCase().getName() + "." + type + "." -// + prop.getName().replaceAll("[^a-zA-Z0-9_]", "") + ".columnOrder"; -// } + private void storeState() { + if(currentRoot == null || propertiesAcc.isEmpty()) + return; + + TableFilterNode tfn; + if(currentRoot instanceof TableFilterNode) + tfn = (TableFilterNode) currentRoot; + else + return; + + List> props = new ArrayList<>(propertiesAcc); + for (int i = 0; i < props.size(); i++) { + Property prop = props.get(i); + NbPreferences.forModule(this.getClass()).put(getPreferenceKey(prop, tfn.getItemType()), String.valueOf(i)); + } + } + //Load the state of current root Node if exists. + private List> loadState() { + propertiesAcc.clear(); + this.getAllChildPropertyHeadersRec(currentRoot, 100); + List> props = new ArrayList<>(propertiesAcc); + + // If node is not table filter node, use default order for columns + TableFilterNode tfn; + if (currentRoot instanceof TableFilterNode) { + tfn = (TableFilterNode) currentRoot; + } else { + Logger.getLogger(DataResultViewerTable.class.getName()).log(Level.INFO, + "Node {0} is not TableFilterNode, columns are going to be in default order", currentRoot.getName()); + return props; + } + + List> orderedProps = new ArrayList<>(propertiesAcc); + for (Property prop : props) { + Integer value = Integer.valueOf(NbPreferences.forModule(this.getClass()).get(getPreferenceKey(prop, tfn.getItemType()), "-1")); + if (value >= 0) { + /** + * The original contents of orderedProps do not matter when + * setting the new ordered values. The reason we copy + * propertiesAcc into it first is to give it the currect size so + * we can set() in any index. + */ + orderedProps.set(value, prop); + } + } + propertiesAcc.clear(); + for (Property prop : orderedProps) { + propertiesAcc.add(prop); + } + return orderedProps; + } + + // Get unique name for node and its property. + private String getPreferenceKey(Property prop, String type) { + return type.replaceAll("[^a-zA-Z0-9_]", "") + "." + + prop.getName().replaceAll("[^a-zA-Z0-9_]", "") + ".columnOrder"; + } // Populate a two-dimensional array with rows of property values for up // to maxRows children of the node passed in. diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java index 9a524bcbd3..5b46137bf2 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/TableFilterNode.java @@ -27,9 +27,10 @@ import org.openide.util.NbBundle; * wraps. It is designed to be used for nodes displayed in Autopsy table views. */ public class TableFilterNode extends FilterNode { - + private final boolean createChildren; - + private String itemType; + /** * Constructs a filter node that creates at most one layer of child nodes * for the node it wraps. It is designed to be used for nodes displayed in @@ -43,7 +44,13 @@ public class TableFilterNode extends FilterNode { super(wrappedNode, TableFilterChildren.createInstance(wrappedNode, createChildren)); this.createChildren = createChildren; } - + + public TableFilterNode(Node wrappedNode, boolean createChildren, String itemType) { + super(wrappedNode, TableFilterChildren.createInstance(wrappedNode, createChildren)); + this.createChildren = createChildren; + this.itemType = itemType; + } + /** * Returns a display name for the wrapped node, for use in the first column * of an Autopsy table view. @@ -58,5 +65,8 @@ public class TableFilterNode extends FilterNode { return super.getDisplayName(); } } - + + String getItemType() { + return itemType; + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java index a1ca0a55c5..bee4cba0a8 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactNode.java @@ -456,13 +456,8 @@ public class BlackboardArtifactNode extends DisplayableItemNode { return true; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "BlackboardArtifact"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java index fad92a6403..3ff339e98d 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/BlackboardArtifactTagNode.java @@ -145,13 +145,8 @@ public class BlackboardArtifactTagNode extends DisplayableItemNode { return true; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "BlackboardArtifactTag"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java index b444551a58..a1d78644dd 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ContentTagNode.java @@ -130,13 +130,8 @@ class ContentTagNode extends DisplayableItemNode { return true; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "ContentTag"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java index 48bfc74443..73f4d95cd0 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DataSourcesNode.java @@ -56,15 +56,10 @@ public class DataSourcesNode extends DisplayableItemNode { this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/image.png"); //NON-NLS } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "DataSources"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } /* * Custom Keys implementation that listens for new data sources being added. diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java b/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java index 3a1e70b164..3096a3e552 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DeletedContent.java @@ -147,15 +147,10 @@ public class DeletedContent implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "DeletedContent"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } public static class DeletedContentsChildren extends ChildFactory { @@ -285,16 +280,6 @@ public class DeletedContent implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering - * code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "DeletedContentChildren"; //NON-NLS -// } // update the display name when new events are fired private class DeletedContentNodeObserver implements Observer { @@ -338,8 +323,17 @@ public class DeletedContent implements AutopsyVisitableItem { public boolean isLeafTypeNode() { return true; } - } + @Override + public String getItemType() { + /** + * Return getClass().getName() + filter.getName() if custom + * settings are desired for different filters. + */ + return getClass().getName(); + } + } + static class DeletedContentChildren extends ChildFactory.Detachable { private final SleuthkitCase skCase; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java index f15eefd22c..4e2936bd5b 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DirectoryNode.java @@ -105,13 +105,8 @@ public class DirectoryNode extends AbstractFsContentNode { return false; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "Directory"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNode.java index 2bc0a5538a..777ab30f5f 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/DisplayableItemNode.java @@ -50,7 +50,7 @@ public abstract class DisplayableItemNode extends AbstractNode { * * Added to support this feature. */ -// public abstract String getItemType(); + public abstract String getItemType(); /** * this code started as a cut and past of * DataResultFilterNode.GetPopupActionsDisplayableItemNodeVisitor.findLinked(BlackboardArtifactNode diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java index 89e8c5b217..9f8d3d9bd1 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java @@ -204,15 +204,10 @@ public class EmailExtracted implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "EmailExtractedRoot"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /** @@ -364,15 +359,10 @@ public class EmailExtracted implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "EmailExtractedAccount"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /** @@ -460,15 +450,10 @@ public class EmailExtracted implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "EmailExtractedFolder"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /** diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java index 6aac72300a..54a03d33e6 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java @@ -183,15 +183,10 @@ public class ExtractedContent implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "ExtractedContentRoot"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /** @@ -393,15 +388,10 @@ public class ExtractedContent implements AutopsyVisitableItem { return true; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return type.getDisplayName(); -// } + @Override + public String getItemType() { + return getClass().getName() + type.getDisplayName(); + } } /** diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java index b722e33161..7ee5acf08f 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileNode.java @@ -170,13 +170,8 @@ public class FileNode extends AbstractFsContentNode { return true; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "File"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java index c5fee7d696..c250166c3b 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileSize.java @@ -144,15 +144,10 @@ public class FileSize implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "FileSizeRoot"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /* @@ -291,16 +286,11 @@ public class FileSize implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering - * code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "FileSize"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } + // update the display name when new events are fired private class FileSizeNodeObserver implements Observer { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java index e1b7553aba..4eea022f04 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypeNode.java @@ -82,16 +82,6 @@ public class FileTypeNode extends DisplayableItemNode { this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file-filter-icon.png"); //NON-NLS } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "FileType"; //NON-NLS -// } - // update the display name when new events are fired private class FileTypeNodeObserver implements Observer { @@ -142,6 +132,16 @@ public class FileTypeNode extends DisplayableItemNode { return true; } + /** + * Consider allowing different configurations for Images, Videos, etc + * (in which case we'd return getClass().getName() + filter.getName() + * for all filters). + */ + @Override + public String getItemType() { + return getClass().getName(); + } + /** * Child node factory for a specific file type - does the database query. */ diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java index 3bbbf0b63c..322217965f 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/FileTypesNode.java @@ -104,21 +104,19 @@ public class FileTypesNode extends DisplayableItemNode { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// if(filter == null) -// return "FileTypes"; //NON-NLS -// if (filter.equals(FileTypeExtensionFilters.RootFilter.TSK_DOCUMENT_FILTER)) -// return "FileTypesDoc"; //NON-NLS -// if (filter.equals(FileTypeExtensionFilters.RootFilter.TSK_EXECUTABLE_FILTER)) -// return "FileTypesExe"; //NON-NLS -// return "FileTypes"; //NON-NLS -// } + @Override + public String getItemType() { + /** + * Because Documents and Executable are further expandable, their + * column order settings should be stored separately. + */ + if(filter == null) + return getClass().getName(); + if (filter.equals(FileTypeExtensionFilters.RootFilter.TSK_DOCUMENT_FILTER) || + filter.equals(FileTypeExtensionFilters.RootFilter.TSK_EXECUTABLE_FILTER)) + return getClass().getName() + filter.getName(); + return getClass().getName(); + } /** * diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java index 2264b95ac6..5305df440b 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java @@ -178,15 +178,10 @@ public class HashsetHits implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "HashsetRoot"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /** @@ -341,15 +336,14 @@ public class HashsetHits implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "HashsetName"; //NON-NLS -// } + @Override + public String getItemType() { + /** + * For custom settings for each hash set, return + * getClass().getName() + hashSetName instead. + */ + return getClass().getName(); + } } /** diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java index fbdb046ae1..d4f2ce0e8e 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java @@ -195,13 +195,8 @@ public class ImageNode extends AbstractContentNode { return v.visit(this); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "Image"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java index b07f5568c0..872b5bcb25 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java @@ -172,15 +172,10 @@ public class InterestingHits implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "InterestingHitsRoot"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } private class SetNameFactory extends ChildFactory.Detachable implements Observer { @@ -328,15 +323,14 @@ public class InterestingHits implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "InterestingHitsSetName"; //NON-NLS -// } + @Override + public String getItemType() { + /** + * For custom settings for each rule set, return + * getClass().getName() + setName instead. + */ + return getClass().getName(); + } } private class HitFactory extends ChildFactory implements Observer { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java index 319d9ecf9f..f81fd46e08 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java @@ -248,15 +248,10 @@ public class KeywordHits implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "KeywordRoot"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } private class ListFactory extends ChildFactory.Detachable implements Observer { @@ -408,15 +403,10 @@ public class KeywordHits implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "KeywordList"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } private class TermFactory extends ChildFactory.Detachable implements Observer { @@ -511,15 +501,10 @@ public class KeywordHits implements AutopsyVisitableItem { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "KeywordTerm"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } public class HitsFactory extends ChildFactory.Detachable implements Observer { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java index c66d92882c..0e97757401 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/LayoutFileNode.java @@ -38,15 +38,6 @@ import org.sleuthkit.datamodel.TskData; */ public class LayoutFileNode extends AbstractAbstractFileNode { - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "LayoutFile"; //NON-NLS -// } public static enum LayoutContentPropertyType { PARTS { @@ -135,4 +126,10 @@ public class LayoutFileNode extends AbstractAbstractFileNode { AbstractAbstractFileNode.fillPropertyMap(map, content); map.put(LayoutContentPropertyType.PARTS.toString(), content.getNumParts()); } + + @Override + public String getItemType() { + return getClass().getName(); + } + } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java index cef8dd9a56..e2f701d044 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/LocalFileNode.java @@ -119,13 +119,8 @@ public class LocalFileNode extends AbstractAbstractFileNode { return true; //!this.hasContentChildren(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "LocalFile"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java index e9d8fe6b63..66cbc5fb68 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesFilterNode.java @@ -83,13 +83,12 @@ public class RecentFilesFilterNode extends DisplayableItemNode { return true; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "RecentFilesFilter"; //NON-NLS -// } + @Override + public String getItemType() { + if (filter == null) { + return getClass().getName(); + } else { + return getClass().getName() + filter.getName(); + } + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java index 21751acdbc..f404b3ac75 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesNode.java @@ -66,13 +66,8 @@ public class RecentFilesNode extends DisplayableItemNode { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "RecentFiles"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java b/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java index 7a4f581966..7d41a86bfa 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Reports.java @@ -90,15 +90,10 @@ public final class Reports implements AutopsyVisitableItem { return visitor.visit(this); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "ReportsList"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /** @@ -218,15 +213,11 @@ public final class Reports implements AutopsyVisitableItem { return new OpenReportAction(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "Reports"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } + private static class DeleteReportAction extends AbstractAction { private static final long serialVersionUID = 1L; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java index 737a931097..fef15adc09 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ResultsNode.java @@ -69,13 +69,8 @@ public class ResultsNode extends DisplayableItemNode { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "Results"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java b/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java index ac85cd8787..2d89ef3cca 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java @@ -105,19 +105,15 @@ public class Tags implements AutopsyVisitableItem { properties = Sheet.createPropertiesSet(); propertySheet.put(properties); } - properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "TagsNode.createSheet.name.name"), NbBundle.getMessage(this.getClass(), "TagsNode.createSheet.name.displayName"), "", getName())); + properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "TagsNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "TagsNode.createSheet.name.displayName"), "", getName())); return propertySheet; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "TagsRoots"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } private class TagNameNodeFactory extends ChildFactory.Detachable implements Observer { @@ -255,7 +251,8 @@ public class Tags implements AutopsyVisitableItem { properties = Sheet.createPropertiesSet(); propertySheet.put(properties); } - properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "TagNameNode.createSheet.name.name"), NbBundle.getMessage(this.getClass(), "TagNameNode.createSheet.name.displayName"), tagName.getDescription(), getName())); + properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "TagNameNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "TagNameNode.createSheet.name.displayName"), tagName.getDescription(), getName())); return propertySheet; } @@ -276,15 +273,10 @@ public class Tags implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "TagsName"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } /** @@ -362,7 +354,8 @@ public class Tags implements AutopsyVisitableItem { properties = Sheet.createPropertiesSet(); propertySheet.put(properties); } - properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "ContentTagTypeNode.createSheet.name.name"), NbBundle.getMessage(this.getClass(), "ContentTagTypeNode.createSheet.name.displayName"), "", getName())); + properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "ContentTagTypeNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "ContentTagTypeNode.createSheet.name.displayName"), "", getName())); return propertySheet; } @@ -381,15 +374,10 @@ public class Tags implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "TagsContentType"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } private class ContentTagNodeFactory extends ChildFactory implements Observer { @@ -465,7 +453,8 @@ public class Tags implements AutopsyVisitableItem { properties = Sheet.createPropertiesSet(); propertySheet.put(properties); } - properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagTypeNode.createSheet.name.name"), NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagTypeNode.createSheet.name.displayName"), "", getName())); + properties.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagTypeNode.createSheet.name.name"), + NbBundle.getMessage(this.getClass(), "BlackboardArtifactTagTypeNode.createSheet.name.displayName"), "", getName())); return propertySheet; } @@ -484,15 +473,10 @@ public class Tags implements AutopsyVisitableItem { updateDisplayName(); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "TagsBlackboardArtifact"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } private class BlackboardArtifactTagNodeFactory extends ChildFactory implements Observer { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java index 4919594378..0fba664c9a 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ViewsNode.java @@ -73,13 +73,8 @@ public class ViewsNode extends DisplayableItemNode { return s; } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "Views"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java index e6b30a6669..5aa5ddcca1 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java @@ -224,13 +224,12 @@ public class VirtualDirectoryNode extends AbstractAbstractFileNode { return v.visit(this); } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "Volume"; //NON-NLS -// } + @Override + public String getItemType() { + return getClass().getName(); + } } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index 9d7f7c5df8..cce2852180 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -634,11 +634,11 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat * The following conditional was added to support this * feature. */ -// if(originNode instanceof DisplayableItemNode) { -// dataResult.setNode(new TableFilterNode(kffn, true, ((DisplayableItemNode) originNode).getItemType())); -// } else { + if(originNode instanceof DisplayableItemNode) { + dataResult.setNode(new TableFilterNode(kffn, true, ((DisplayableItemNode) originNode).getItemType())); + } else { dataResult.setNode(new TableFilterNode(kffn, true)); -// } + } String displayName = ""; Content content = originNode.getLookup().lookup(Content.class); diff --git a/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventNode.java b/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventNode.java index eb2abdde37..cf0524a893 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventNode.java @@ -160,15 +160,11 @@ public class EventNode extends DisplayableItemNode { throw new UnsupportedOperationException("Not supported yet."); // NON-NLS } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "Event"; -// } + @Override + public String getItemType() { + return getClass().getName(); + } + /** * We use TimeProperty instead of a normal NodeProperty to correctly display * the date/time when the user changes the timezone setting. diff --git a/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java b/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java index 3d1d44132e..4103d845bc 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/explorernodes/EventRootNode.java @@ -61,16 +61,11 @@ public class EventRootNode extends DisplayableItemNode { return null; } + @Override + public String getItemType() { + return getClass().getName(); + } - /* - * TODO (AUT-1849): Correct or remove peristent column reordering code - * - * Added to support this feature. - */ -// @Override -// public String getItemType() { -// return "EventRoot"; -// } /** * ChildFactory for EventNodes. */