From 82e0bc803f5d1f15d66b992f3238f14474e94ec7 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 6 Aug 2019 16:14:33 -0400 Subject: [PATCH] 5367 intial paging controls panel, no paging yet --- .../autopsy/filequery/Bundle.properties | 5 +- .../filequery/Bundle.properties-MERGED | 3 + .../filequery/FileDiscoveryDialog.java | 31 +--- .../autopsy/filequery/ResultsPanel.form | 114 +++++++++++++++ .../autopsy/filequery/ResultsPanel.java | 138 ++++++++++++++++++ 5 files changed, 263 insertions(+), 28 deletions(-) create mode 100644 Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.form create mode 100644 Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java diff --git a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties index 45a673ed8a..88fce2746c 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties @@ -51,4 +51,7 @@ FileSearchPanel.interestingItemsCheckbox.text=Interesting Items: FileSearchPanel.scoreCheckbox.text=Has Score: FileSearchPanel.exifCheckbox.text=Must contain EXIF data FileSearchPanel.notableCheckbox.text=Must have been tagged as notable -FileSearchPanel.objectsCheckbox.text=Objects: \ No newline at end of file +FileSearchPanel.objectsCheckbox.text=Objects: +ResultsPanel.jButton1.text=previous page +ResultsPanel.jButton2.text=next page +ResultsPanel.jLabel1.text=Page X of Y diff --git a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED index b9d276c1e6..fbea5976b6 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/filequery/Bundle.properties-MERGED @@ -152,4 +152,7 @@ FileSearchPanel.scoreCheckbox.text=Has Score: FileSearchPanel.exifCheckbox.text=Must contain EXIF data FileSearchPanel.notableCheckbox.text=Must have been tagged as notable FileSearchPanel.objectsCheckbox.text=Objects: +ResultsPanel.jButton1.text=previous page +ResultsPanel.jButton2.text=next page +ResultsPanel.jLabel1.text=Page X of Y SearchNode.getName.text=Search Result diff --git a/Core/src/org/sleuthkit/autopsy/filequery/FileDiscoveryDialog.java b/Core/src/org/sleuthkit/autopsy/filequery/FileDiscoveryDialog.java index ef071742f8..5187b2474a 100644 --- a/Core/src/org/sleuthkit/autopsy/filequery/FileDiscoveryDialog.java +++ b/Core/src/org/sleuthkit/autopsy/filequery/FileDiscoveryDialog.java @@ -22,16 +22,10 @@ import com.google.common.eventbus.Subscribe; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.openide.explorer.ExplorerManager; -import org.openide.nodes.AbstractNode; import org.openide.nodes.Node; import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; import org.sleuthkit.autopsy.corecomponents.DataContentPanel; -import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable; -import org.sleuthkit.autopsy.corecomponents.DataResultViewerThumbnail; -import org.sleuthkit.autopsy.corecomponents.TableFilterNode; -import org.sleuthkit.autopsy.directorytree.DataResultFilterNode; -import org.sleuthkit.autopsy.filequery.FileSearchData.FileType; import org.sleuthkit.datamodel.SleuthkitCase; /** @@ -43,8 +37,7 @@ class FileDiscoveryDialog extends javax.swing.JDialog { private final FileSearchPanel fileSearchPanel; private final GroupListPanel groupListPanel; private final DataContentPanel dataContentPanel; - private final DataResultViewerThumbnail thumbnailViewer; - private final DataResultViewerTable tableViewer; + private final ResultsPanel resultsPanel; private final ExplorerManager explorerManager; /** @@ -58,11 +51,10 @@ class FileDiscoveryDialog extends javax.swing.JDialog { groupListPanel = new GroupListPanel(); DiscoveryEvents.getDiscoveryEventBus().register(groupListPanel); dataContentPanel = DataContentPanel.createInstance(); - thumbnailViewer = new DataResultViewerThumbnail(explorerManager); - tableViewer = new DataResultViewerTable(explorerManager); + resultsPanel = new ResultsPanel(explorerManager); leftSplitPane.setLeftComponent(fileSearchPanel); leftSplitPane.setRightComponent(groupListPanel); - rightSplitPane.setTopComponent(tableViewer); + rightSplitPane.setTopComponent(resultsPanel); rightSplitPane.setBottomComponent(dataContentPanel); this.explorerManager.addPropertyChangeListener((evt) -> { if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES) && dataContentPanel != null) { @@ -102,22 +94,7 @@ class FileDiscoveryDialog extends javax.swing.JDialog { @Subscribe void handleGroupSelectedEvent(DiscoveryEvents.GroupSelectedEvent groupSelectedEvent) { SwingUtilities.invokeLater(() -> { - thumbnailViewer.resetComponent(); - if (groupSelectedEvent.getType() == FileType.IMAGE || groupSelectedEvent.getType() == FileType.VIDEO) { - rightSplitPane.setTopComponent(thumbnailViewer); - if (groupSelectedEvent.getFiles().size() > 0) { - thumbnailViewer.setNode(new TableFilterNode(new DataResultFilterNode(new AbstractNode(new DiscoveryThumbnailChildren(groupSelectedEvent.getFiles()))), true)); - } else { - thumbnailViewer.setNode(new TableFilterNode(new DataResultFilterNode(Node.EMPTY), true)); - } - } else { - rightSplitPane.setTopComponent(tableViewer); - if (groupSelectedEvent.getFiles().size() > 0) { - tableViewer.setNode(new TableFilterNode(new SearchNode(groupSelectedEvent.getFiles()), true)); - } else { - tableViewer.setNode(new TableFilterNode(new DataResultFilterNode(Node.EMPTY), true)); - } - } + resultsPanel.resetComponent(groupSelectedEvent); }); } diff --git a/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.form b/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.form new file mode 100644 index 0000000000..0d616cfd83 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.form @@ -0,0 +1,114 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java b/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java new file mode 100644 index 0000000000..cf9222e121 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/filequery/ResultsPanel.java @@ -0,0 +1,138 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.sleuthkit.autopsy.filequery; + +import org.openide.explorer.ExplorerManager; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Node; +import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable; +import org.sleuthkit.autopsy.corecomponents.DataResultViewerThumbnail; +import org.sleuthkit.autopsy.corecomponents.TableFilterNode; +import org.sleuthkit.autopsy.directorytree.DataResultFilterNode; + +/** + * + * @author wschaefer + */ +public class ResultsPanel extends javax.swing.JPanel { + + private static final long serialVersionUID = 1L; + private final DataResultViewerThumbnail thumbnailViewer; + private final DataResultViewerTable tableViewer; + + /** + * Creates new form ResultsPanel + */ + public ResultsPanel(ExplorerManager explorerManager) { + initComponents(); + thumbnailViewer = new DataResultViewerThumbnail(explorerManager); + tableViewer = new DataResultViewerTable(explorerManager); + } + + void resetComponent(DiscoveryEvents.GroupSelectedEvent groupSelectedEvent) { + thumbnailViewer.resetComponent(); + jPanel2.remove(thumbnailViewer); + jPanel2.remove(tableViewer); + if (groupSelectedEvent.getType() == FileSearchData.FileType.IMAGE || groupSelectedEvent.getType() == FileSearchData.FileType.VIDEO) { + jPanel2.add(thumbnailViewer); + if (groupSelectedEvent.getFiles().size() > 0) { + thumbnailViewer.setNode(new TableFilterNode(new DataResultFilterNode(new AbstractNode(new DiscoveryThumbnailChildren(groupSelectedEvent.getFiles()))), true)); + } else { + thumbnailViewer.setNode(new TableFilterNode(new DataResultFilterNode(Node.EMPTY), true)); + } + } else { + jPanel2.add(tableViewer); + if (groupSelectedEvent.getFiles().size() > 0) { + tableViewer.setNode(new TableFilterNode(new SearchNode(groupSelectedEvent.getFiles()), true)); + } else { + tableViewer.setNode(new TableFilterNode(new DataResultFilterNode(Node.EMPTY), true)); + } + } + jPanel2.validate(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jPanel1 = new javax.swing.JPanel(); + jButton1 = new javax.swing.JButton(); + jLabel1 = new javax.swing.JLabel(); + jButton2 = new javax.swing.JButton(); + jSpinner1 = new javax.swing.JSpinner(); + jPanel2 = new javax.swing.JPanel(); + + jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + + org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(ResultsPanel.class, "ResultsPanel.jButton1.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(ResultsPanel.class, "ResultsPanel.jLabel1.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jButton2, org.openide.util.NbBundle.getMessage(ResultsPanel.class, "ResultsPanel.jButton2.text")); // NOI18N + + jSpinner1.setModel(new javax.swing.SpinnerNumberModel(10, 10, 200, 10)); + jSpinner1.setEditor(new javax.swing.JSpinner.NumberEditor(jSpinner1, "")); + jSpinner1.setFocusable(false); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jButton1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButton2) + .addGap(4, 4, 4) + .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(240, Short.MAX_VALUE)) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(4, 4, 4) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButton1) + .addComponent(jButton2) + .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1)) + .addGap(4, 4, 4)) + ); + + jPanel2.setLayout(new java.awt.BorderLayout()); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, 0) + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; + private javax.swing.JButton jButton2; + private javax.swing.JLabel jLabel1; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JSpinner jSpinner1; + // End of variables declaration//GEN-END:variables +}