Autopsy  4.16.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
ParentFolderFilterPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy
3  *
4  * Copyright 2020 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.discovery.ui;
20 
22 import java.util.ArrayList;
23 import java.util.List;
24 import javax.swing.DefaultListModel;
25 import javax.swing.JCheckBox;
26 import javax.swing.JLabel;
27 import javax.swing.JList;
28 import org.openide.util.NbBundle;
31 
35 final class ParentFolderFilterPanel extends AbstractDiscoveryFilterPanel {
36 
37  private static final long serialVersionUID = 1L;
38  private DefaultListModel<SearchFiltering.ParentSearchTerm> parentListModel;
39  private static final String[] DEFAULT_IGNORED_PATHS = {"/Windows/", "/Program Files/"}; //NON-NLS
40 
44  ParentFolderFilterPanel() {
45  initComponents();
46  setUpParentPathFilter();
47  }
48 
52  private void setUpParentPathFilter() {
53  fullRadioButton.setSelected(true);
54  includeRadioButton.setSelected(true);
55  parentListModel = (DefaultListModel<SearchFiltering.ParentSearchTerm>) parentList.getModel();
56  for (String ignorePath : DEFAULT_IGNORED_PATHS) {
57  parentListModel.add(parentListModel.size(), new ParentSearchTerm(ignorePath, false, false));
58  }
59  }
60 
66  @SuppressWarnings("unchecked")
67  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
68  private void initComponents() {
69 
70  parentCheckbox = new javax.swing.JCheckBox();
71  parentLabel = new javax.swing.JLabel();
72  javax.swing.ButtonGroup includeButtonGroup = new javax.swing.ButtonGroup();
73  javax.swing.ButtonGroup pathTypeButtonGroup = new javax.swing.ButtonGroup();
74  parentScrollPane = new javax.swing.JScrollPane();
75  parentList = new javax.swing.JList<>();
76  fullRadioButton = new javax.swing.JRadioButton();
77  includeRadioButton = new javax.swing.JRadioButton();
78  substringRadioButton = new javax.swing.JRadioButton();
79  excludeRadioButton = new javax.swing.JRadioButton();
80  deleteButton = new javax.swing.JButton();
81  addButton = new javax.swing.JButton();
82  parentTextField = new javax.swing.JTextField();
83 
84  org.openide.awt.Mnemonics.setLocalizedText(parentCheckbox, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.parentCheckbox.text_1")); // NOI18N
85  parentCheckbox.setMaximumSize(new java.awt.Dimension(150, 25));
86  parentCheckbox.setMinimumSize(new java.awt.Dimension(150, 25));
87  parentCheckbox.setPreferredSize(new java.awt.Dimension(150, 25));
88  parentCheckbox.addActionListener(new java.awt.event.ActionListener() {
89  public void actionPerformed(java.awt.event.ActionEvent evt) {
90  parentCheckboxActionPerformed(evt);
91  }
92  });
93 
94  org.openide.awt.Mnemonics.setLocalizedText(parentLabel, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.parentLabel.text_1")); // NOI18N
95  parentLabel.setMaximumSize(new java.awt.Dimension(150, 25));
96  parentLabel.setMinimumSize(new java.awt.Dimension(150, 25));
97  parentLabel.setPreferredSize(new java.awt.Dimension(150, 25));
98 
99  setMinimumSize(new java.awt.Dimension(250, 120));
100  setPreferredSize(new java.awt.Dimension(250, 120));
101 
102  parentScrollPane.setPreferredSize(new java.awt.Dimension(27, 27));
103 
104  parentList.setModel(new DefaultListModel<ParentSearchTerm>());
105  parentList.setEnabled(false);
106  parentList.setVisibleRowCount(4);
107  parentList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
108  public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
109  parentListValueChanged(evt);
110  }
111  });
112  parentScrollPane.setViewportView(parentList);
113 
114  pathTypeButtonGroup.add(fullRadioButton);
115  fullRadioButton.setSelected(true);
116  org.openide.awt.Mnemonics.setLocalizedText(fullRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.fullRadioButton.text_1")); // NOI18N
117  fullRadioButton.setEnabled(false);
118 
119  includeButtonGroup.add(includeRadioButton);
120  includeRadioButton.setSelected(true);
121  org.openide.awt.Mnemonics.setLocalizedText(includeRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.includeRadioButton.text_1")); // NOI18N
122  includeRadioButton.setEnabled(false);
123 
124  pathTypeButtonGroup.add(substringRadioButton);
125  org.openide.awt.Mnemonics.setLocalizedText(substringRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.substringRadioButton.text_1")); // NOI18N
126  substringRadioButton.setEnabled(false);
127 
128  includeButtonGroup.add(excludeRadioButton);
129  org.openide.awt.Mnemonics.setLocalizedText(excludeRadioButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.excludeRadioButton.text_1")); // NOI18N
130  excludeRadioButton.setEnabled(false);
131 
132  org.openide.awt.Mnemonics.setLocalizedText(deleteButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.deleteButton.text_1")); // NOI18N
133  deleteButton.setEnabled(false);
134  deleteButton.setMaximumSize(new java.awt.Dimension(70, 23));
135  deleteButton.setMinimumSize(new java.awt.Dimension(70, 23));
136  deleteButton.setPreferredSize(new java.awt.Dimension(70, 23));
137  deleteButton.addActionListener(new java.awt.event.ActionListener() {
138  public void actionPerformed(java.awt.event.ActionEvent evt) {
139  deleteButtonActionPerformed(evt);
140  }
141  });
142 
143  org.openide.awt.Mnemonics.setLocalizedText(addButton, org.openide.util.NbBundle.getMessage(ParentFolderFilterPanel.class, "ParentFolderFilterPanel.addButton.text_1")); // NOI18N
144  addButton.setEnabled(false);
145  addButton.setMaximumSize(new java.awt.Dimension(70, 23));
146  addButton.setMinimumSize(new java.awt.Dimension(70, 23));
147  addButton.setPreferredSize(new java.awt.Dimension(70, 23));
148  addButton.addActionListener(new java.awt.event.ActionListener() {
149  public void actionPerformed(java.awt.event.ActionEvent evt) {
150  addButtonActionPerformed(evt);
151  }
152  });
153 
154  parentTextField.setEnabled(false);
155 
156  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
157  this.setLayout(layout);
158  layout.setHorizontalGroup(
159  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
160  .addGroup(layout.createSequentialGroup()
161  .addGap(8, 8, 8)
162  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
163  .addComponent(includeRadioButton)
164  .addComponent(fullRadioButton))
165  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
166  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
167  .addComponent(substringRadioButton)
168  .addComponent(excludeRadioButton)))
169  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
170  .addComponent(parentScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
171  .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
172  .addComponent(parentTextField)
173  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
174  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
175  .addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
176  .addComponent(addButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
177  );
178  layout.setVerticalGroup(
179  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
180  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
181  .addComponent(parentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
182  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
183  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
184  .addComponent(fullRadioButton)
185  .addComponent(substringRadioButton))
186  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
187  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
188  .addComponent(includeRadioButton)
189  .addComponent(excludeRadioButton)
190  .addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
191  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
192  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
193  .addComponent(parentTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
194  .addComponent(addButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
195  .addGap(0, 0, 0))
196  );
197  }// </editor-fold>//GEN-END:initComponents
198 
199  private void parentCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parentCheckboxActionPerformed
200  configurePanel(parentCheckbox.isSelected(), null);
201  }//GEN-LAST:event_parentCheckboxActionPerformed
202 
203  private void parentListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_parentListValueChanged
204  if (parentList.getSelectedValuesList().isEmpty()) {
205  deleteButton.setEnabled(false);
206  } else {
207  deleteButton.setEnabled(true);
208  }
209  }//GEN-LAST:event_parentListValueChanged
210 
211  private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed
212  int index = parentList.getSelectedIndex();
213  if (index >= 0) {
214  parentListModel.remove(index);
215  }
216  }//GEN-LAST:event_deleteButtonActionPerformed
217 
218  private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
219  if (!parentTextField.getText().isEmpty()) {
220  ParentSearchTerm searchTerm;
221  searchTerm = new ParentSearchTerm(parentTextField.getText(), fullRadioButton.isSelected(), includeRadioButton.isSelected());
222  parentListModel.add(parentListModel.size(), searchTerm);
223  parentTextField.setText("");
224  }
225  }//GEN-LAST:event_addButtonActionPerformed
226 
227 
228  // Variables declaration - do not modify//GEN-BEGIN:variables
229  private javax.swing.JButton addButton;
230  private javax.swing.JButton deleteButton;
231  private javax.swing.JRadioButton excludeRadioButton;
232  private javax.swing.JRadioButton fullRadioButton;
233  private javax.swing.JRadioButton includeRadioButton;
234  private javax.swing.JCheckBox parentCheckbox;
235  private javax.swing.JLabel parentLabel;
236  private javax.swing.JList<ParentSearchTerm> parentList;
237  private javax.swing.JScrollPane parentScrollPane;
238  private javax.swing.JTextField parentTextField;
239  private javax.swing.JRadioButton substringRadioButton;
240  // End of variables declaration//GEN-END:variables
241 
242  @Override
243  void configurePanel(boolean selected, int[] indicesSelected) {
244  parentCheckbox.setSelected(selected);
245  if (parentCheckbox.isEnabled() && parentCheckbox.isSelected()) {
246  parentScrollPane.setEnabled(true);
247  parentLabel.setEnabled(true);
248  includeRadioButton.setEnabled(true);
249  excludeRadioButton.setEnabled(true);
250  fullRadioButton.setEnabled(true);
251  substringRadioButton.setEnabled(true);
252  addButton.setEnabled(true);
253  deleteButton.setEnabled(!parentListModel.isEmpty());
254  parentList.setEnabled(true);
255  parentTextField.setEnabled(true);
256  if (indicesSelected != null) {
257  parentList.setSelectedIndices(indicesSelected);
258  }
259  } else {
260  parentScrollPane.setEnabled(false);
261  parentLabel.setEnabled(false);
262  parentList.setEnabled(false);
263  includeRadioButton.setEnabled(false);
264  excludeRadioButton.setEnabled(false);
265  fullRadioButton.setEnabled(false);
266  substringRadioButton.setEnabled(false);
267  addButton.setEnabled(false);
268  deleteButton.setEnabled(false);
269  parentTextField.setEnabled(false);
270  }
271  }
272 
273  @Override
274  JCheckBox getCheckbox() {
275  return parentCheckbox;
276  }
277 
278  @Override
279  JLabel getAdditionalLabel() {
280  return parentLabel;
281  }
282 
283  @NbBundle.Messages({"ParentFolderFilterPanel.error.text=At least one parent path must be entered."})
284  @Override
285  String checkForError() {
286  // Parent uses everything in the box
287  if (parentCheckbox.isSelected() && getParentPaths().isEmpty()) {
288  return Bundle.ParentFolderFilterPanel_error_text();
289  }
290  return "";
291  }
292 
298  private List<SearchFiltering.ParentSearchTerm> getParentPaths() {
299  List<SearchFiltering.ParentSearchTerm> results = new ArrayList<>();
300  for (int i = 0; i < parentListModel.getSize(); i++) {
301  results.add(parentListModel.get(i));
302  }
303  return results;
304  }
305 
306  @Override
307  JList<?> getList() {
308  return parentList;
309  }
310 
311  @Override
312  AbstractFilter getFilter() {
313  if (parentCheckbox.isSelected()) {
314  return new SearchFiltering.ParentFilter(getParentPaths());
315  }
316  return null;
317  }
318 }
ParentSearchTerm(String searchStr, boolean isFullPath, boolean isIncluded)

Copyright © 2012-2020 Basis Technology. Generated on: Tue Sep 22 2020
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.