19 package org.sleuthkit.autopsy.keywordsearch.multicase;
 
   21 import java.beans.PropertyVetoException;
 
   22 import java.util.ArrayList;
 
   23 import java.util.List;
 
   24 import java.util.stream.Collectors;
 
   25 import java.util.stream.Stream;
 
   26 import javax.swing.JDialog;
 
   27 import org.openide.explorer.ExplorerManager;
 
   28 import org.openide.nodes.Node;
 
   36 class SelectMultiUserCasesPanel 
extends javax.swing.JPanel {
 
   38     private static final long serialVersionUID = 1L;
 
   39     private final JDialog parentDialog;
 
   40     private final MultiUserCasesBrowserPanel caseBrowserPanel;
 
   41     private final List<ChangeListener> listeners;
 
   50     SelectMultiUserCasesPanel(JDialog parentDialog) {
 
   52         this.parentDialog = parentDialog;
 
   54         caseBrowserPanel = 
new MultiUserCasesBrowserPanel(
new ExplorerManager(), 
new SelectMultiUserCaseDialogCustomizer());
 
   55         multiUserCaseScrollPane.add(caseBrowserPanel);
 
   56         multiUserCaseScrollPane.setViewportView(caseBrowserPanel);
 
   57         listeners = 
new ArrayList<>();
 
   64     void refreshDisplay() {
 
   65         caseBrowserPanel.displayCases();
 
   73     void subscribeToNewCaseSelections(ChangeListener listener) {
 
   74         listeners.add(listener);
 
   84     void setSelections(Node[] selections) 
throws PropertyVetoException {
 
   85         caseBrowserPanel.getExplorerManager().setSelectedNodes(selections);
 
   86         caseBrowserPanel.requestFocus();
 
   94     @SuppressWarnings(
"unchecked")
 
   96     private 
void initComponents() {
 
   98         multiUserCaseScrollPane = 
new javax.swing.JScrollPane();
 
   99         selectAllButton = 
new javax.swing.JButton();
 
  100         deselectAllButton = 
new javax.swing.JButton();
 
  101         jLabel1 = 
new javax.swing.JLabel();
 
  102         confirmSelections = 
new javax.swing.JButton();
 
  103         cancelButton = 
new javax.swing.JButton();
 
  104         refreshButton = 
new javax.swing.JButton();
 
  106         org.openide.awt.Mnemonics.setLocalizedText(selectAllButton, 
org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, 
"SelectMultiUserCasesPanel.selectAllButton.text")); 
 
  107         selectAllButton.addActionListener(
new java.awt.event.ActionListener() {
 
  108             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  109                 selectAllButtonActionPerformed(evt);
 
  113         org.openide.awt.Mnemonics.setLocalizedText(deselectAllButton, 
org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, 
"SelectMultiUserCasesPanel.deselectAllButton.text")); 
 
  114         deselectAllButton.addActionListener(
new java.awt.event.ActionListener() {
 
  115             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  116                 deselectAllButtonActionPerformed(evt);
 
  120         org.openide.awt.Mnemonics.setLocalizedText(jLabel1, 
org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, 
"SelectMultiUserCasesPanel.jLabel1.text")); 
 
  122         org.openide.awt.Mnemonics.setLocalizedText(confirmSelections, 
org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, 
"SelectMultiUserCasesPanel.confirmSelections.text")); 
 
  123         confirmSelections.addActionListener(
new java.awt.event.ActionListener() {
 
  124             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  125                 confirmSelectionsActionPerformed(evt);
 
  129         org.openide.awt.Mnemonics.setLocalizedText(cancelButton, 
org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, 
"SelectMultiUserCasesPanel.cancelButton.text")); 
 
  130         cancelButton.addActionListener(
new java.awt.event.ActionListener() {
 
  131             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  132                 cancelButtonActionPerformed(evt);
 
  136         org.openide.awt.Mnemonics.setLocalizedText(refreshButton, 
org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, 
"SelectMultiUserCasesPanel.refreshButton.text")); 
 
  137         refreshButton.addActionListener(
new java.awt.event.ActionListener() {
 
  138             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  139                 refreshButtonActionPerformed(evt);
 
  143         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  144         this.setLayout(layout);
 
  145         layout.setHorizontalGroup(
 
  146             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  147             .addGroup(layout.createSequentialGroup()
 
  149                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  150                     .addComponent(multiUserCaseScrollPane)
 
  151                     .addGroup(layout.createSequentialGroup()
 
  152                         .addComponent(selectAllButton)
 
  153                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  154                         .addComponent(deselectAllButton)
 
  155                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  156                         .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 365, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  157                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 286, Short.MAX_VALUE)
 
  158                         .addComponent(refreshButton)
 
  159                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  160                         .addComponent(confirmSelections, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  161                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  162                         .addComponent(cancelButton)))
 
  165         layout.setVerticalGroup(
 
  166             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  167             .addGroup(layout.createSequentialGroup()
 
  169                 .addComponent(multiUserCaseScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 486, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  170                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  171                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  172                     .addComponent(jLabel1)
 
  173                     .addComponent(selectAllButton)
 
  174                     .addComponent(deselectAllButton)
 
  175                     .addComponent(confirmSelections)
 
  176                     .addComponent(cancelButton)
 
  177                     .addComponent(refreshButton))
 
  178                 .addContainerGap(15, Short.MAX_VALUE))
 
  182     private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  184             caseBrowserPanel.getExplorerManager().setSelectedNodes(caseBrowserPanel.getExplorerManager().getRootContext().getChildren().getNodes());
 
  185         } 
catch (PropertyVetoException ex) {
 
  190     private void deselectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  192             caseBrowserPanel.getExplorerManager().setSelectedNodes(
new Node[0]);
 
  193         } 
catch (PropertyVetoException ex) {
 
  198     private void confirmSelectionsActionPerformed(java.awt.event.ActionEvent evt) {
 
  200         Node[] selections = caseBrowserPanel.getExplorerManager().getSelectedNodes();
 
  201         List<CaseNodeData> caseNodeData = Stream.of(selections)
 
  202                 .map(n -> n.getLookup().lookup(CaseNodeData.class))
 
  203                 .collect(Collectors.toList());
 
  204         listeners.forEach((l) -> {
 
  205             l.nodeSelectionChanged(selections, caseNodeData);
 
  207         parentDialog.setVisible(
false);
 
  210     private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  211         parentDialog.setVisible(
false);
 
  214     private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  215         caseBrowserPanel.displayCases();
 
  220     private javax.swing.JButton cancelButton;
 
  221     private javax.swing.JButton confirmSelections;
 
  222     private javax.swing.JButton deselectAllButton;
 
  223     private javax.swing.JLabel jLabel1;
 
  224     private javax.swing.JScrollPane multiUserCaseScrollPane;
 
  225     private javax.swing.JButton refreshButton;
 
  226     private javax.swing.JButton selectAllButton;