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;