19 package org.sleuthkit.autopsy.discovery.ui;
21 import javax.swing.DefaultListModel;
22 import javax.swing.JCheckBox;
23 import javax.swing.JLabel;
24 import javax.swing.JList;
25 import org.openide.util.NbBundle;
37 final class PastOccurrencesFilterPanel
extends AbstractDiscoveryFilterPanel {
39 private static final long serialVersionUID = 1L;
40 private final Type type;
45 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
46 PastOccurrencesFilterPanel(Type type) {
49 setUpFrequencyFilter();
57 @SuppressWarnings(
"unchecked")
59 private
void initComponents() {
61 pastOccurrencesCheckbox =
new javax.swing.JCheckBox();
62 crFrequencyScrollPane =
new javax.swing.JScrollPane();
63 crFrequencyList =
new javax.swing.JList<>();
65 org.openide.awt.Mnemonics.setLocalizedText(pastOccurrencesCheckbox,
org.openide.util.NbBundle.getMessage(PastOccurrencesFilterPanel.class,
"PastOccurrencesFilterPanel.pastOccurrencesCheckbox.text"));
66 pastOccurrencesCheckbox.setMaximumSize(
new java.awt.Dimension(150, 25));
67 pastOccurrencesCheckbox.setMinimumSize(
new java.awt.Dimension(150, 25));
68 pastOccurrencesCheckbox.setPreferredSize(
new java.awt.Dimension(150, 25));
69 pastOccurrencesCheckbox.addActionListener(
new java.awt.event.ActionListener() {
70 public void actionPerformed(java.awt.event.ActionEvent evt) {
71 pastOccurrencesCheckboxActionPerformed(evt);
75 setMinimumSize(
new java.awt.Dimension(250, 30));
76 setPreferredSize(
new java.awt.Dimension(250, 30));
78 crFrequencyScrollPane.setPreferredSize(
new java.awt.Dimension(27, 27));
80 crFrequencyList.setModel(
new DefaultListModel<Frequency>());
81 crFrequencyList.setEnabled(
false);
82 crFrequencyList.setVisibleRowCount(5);
83 crFrequencyScrollPane.setViewportView(crFrequencyList);
85 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
86 this.setLayout(layout);
87 layout.setHorizontalGroup(
88 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
89 .addComponent(crFrequencyScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
91 layout.setVerticalGroup(
92 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
93 .addGroup(layout.createSequentialGroup()
94 .addComponent(crFrequencyScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
99 private void pastOccurrencesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {
100 crFrequencyList.setEnabled(pastOccurrencesCheckbox.isSelected());
106 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
107 private
void setUpFrequencyFilter() {
109 DefaultListModel<SearchData.Frequency> frequencyListModel = (DefaultListModel<SearchData.Frequency>) crFrequencyList.getModel();
110 frequencyListModel.removeAllElements();
111 if (!CentralRepository.isEnabled()) {
112 if (type != Type.DOMAIN) {
113 for (SearchData.Frequency freq : SearchData.Frequency.getOptionsForFilteringWithoutCr()) {
114 frequencyListModel.add(count, freq);
118 for (SearchData.Frequency freq : SearchData.Frequency.getOptionsForFilteringWithCr()) {
119 if (type != Type.DOMAIN || freq != SearchData.Frequency.KNOWN) {
120 frequencyListModel.add(count, freq);
127 private javax.swing.JList<Frequency> crFrequencyList;
128 private javax.swing.JScrollPane crFrequencyScrollPane;
129 private javax.swing.JCheckBox pastOccurrencesCheckbox;
132 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
134 void configurePanel(
boolean selected,
int[] indicesSelected) {
135 boolean canBeFilteredOn = type != Type.DOMAIN || CentralRepository.isEnabled();
136 pastOccurrencesCheckbox.setEnabled(canBeFilteredOn);
137 pastOccurrencesCheckbox.setSelected(selected && canBeFilteredOn);
139 if (pastOccurrencesCheckbox.isEnabled() && pastOccurrencesCheckbox.isSelected()) {
140 crFrequencyScrollPane.setEnabled(
true);
141 crFrequencyList.setEnabled(
true);
142 if (indicesSelected != null) {
143 crFrequencyList.setSelectedIndices(indicesSelected);
146 crFrequencyScrollPane.setEnabled(
false);
147 crFrequencyList.setEnabled(
false);
151 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
153 JCheckBox getCheckbox() {
154 return pastOccurrencesCheckbox;
158 JLabel getAdditionalLabel() {
162 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
163 @NbBundle.Messages({
"PastOccurrencesFilterPanel.error.text=At least one value in the past occurrence filter must be selected."})
165 String checkForError() {
166 if (pastOccurrencesCheckbox.isSelected() && crFrequencyList.getSelectedValuesList().isEmpty()) {
167 return Bundle.PastOccurrencesFilterPanel_error_text();
172 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
175 return crFrequencyList;
178 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
180 AbstractFilter getFilter() {
181 if (pastOccurrencesCheckbox.isSelected()) {
182 return new SearchFiltering.FrequencyFilter(crFrequencyList.getSelectedValuesList());