Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
ReportWizardFileOptionsVisualPanel.java
Go to the documentation of this file.
1/*
2 * Autopsy Forensic Browser
3 *
4 * Copyright 2013-2018 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 */
19package org.sleuthkit.autopsy.report.infrastructure;
20
21import java.awt.Component;
22import java.awt.event.MouseAdapter;
23import java.awt.event.MouseEvent;
24import java.util.ArrayList;
25import java.util.Arrays;
26import java.util.EnumMap;
27import java.util.List;
28import java.util.Map;
29import java.util.Map.Entry;
30import javax.swing.JCheckBox;
31import javax.swing.JLabel;
32import javax.swing.JList;
33import javax.swing.ListCellRenderer;
34import javax.swing.ListModel;
35import javax.swing.event.ListDataListener;
36import org.openide.util.NbBundle;
37
41@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
42class ReportWizardFileOptionsVisualPanel extends javax.swing.JPanel {
43
44 private List<FileReportDataTypes> options = new ArrayList<>();
45 private final Map<FileReportDataTypes, Boolean> optionStates = new EnumMap<>(FileReportDataTypes.class);
46 private ListModel<FileReportDataTypes> model;
47 private final ReportWizardFileOptionsPanel wizPanel;
48
49 public ReportWizardFileOptionsVisualPanel(ReportWizardFileOptionsPanel wizPanel, FileReportSettings settings) {
50 this.wizPanel = wizPanel;
51 initComponents();
52 initOptionsList(settings);
53 }
54
55 @Override
56 public String getName() {
57 return NbBundle.getMessage(this.getClass(), "ReportWizardFileOptionsVisualPanel.getName.text");
58 }
59
63 private void initOptionsList(FileReportSettings settings) {
64 if (settings != null && settings.getFileProperties() != null && !settings.getFileProperties().isEmpty()) {
65 // load the configuration
66 for (Entry<FileReportDataTypes, Boolean> entry : settings.getFileProperties().entrySet()) {
67 optionStates.put(entry.getKey(), entry.getValue());
68 options.add(entry.getKey());
69 }
70 } else {
71 // load defaults
72 options = Arrays.asList(FileReportDataTypes.values());
73 for (FileReportDataTypes entry : options) {
74 optionStates.put(entry, Boolean.TRUE);
75 }
76 }
77
78 model = new OptionsListModel();
79 optionsList.setModel(model);
80 optionsList.setCellRenderer(new OptionsListRenderer());
81 optionsList.setVisibleRowCount(-1);
82
83 selectAllButton.setEnabled(notAllSelected());
84 deselectAllButton.setEnabled(anySelected());
85
86 wizPanel.setFinish(anySelected());
87
88 // Add the ability to enable and disable Tag checkboxes to the list
89 optionsList.addMouseListener(new MouseAdapter() {
90 @Override
91 public void mousePressed(MouseEvent evt) {
92
93 int index = optionsList.locationToIndex(evt.getPoint());
94 FileReportDataTypes value = model.getElementAt(index);
95 optionStates.put(value, !optionStates.get(value));
96 optionsList.repaint();
97 boolean anySelected = anySelected();
98 deselectAllButton.setEnabled(anySelected);
99 wizPanel.setFinish(anySelected);
100 selectAllButton.setEnabled(notAllSelected());
101 }
102 });
103 }
104
110 private boolean anySelected() {
111 for (Boolean b : optionStates.values()) {
112 if (b) {
113 return true;
114 }
115 }
116 return false;
117 }
118
124 private boolean notAllSelected() {
125 for (Boolean b : optionStates.values()) {
126 if (!b) {
127 return true;
128 }
129 }
130 return false;
131 }
132
138 Map<FileReportDataTypes, Boolean> getFileReportOptions() {
139 return optionStates;
140 }
141
147 @SuppressWarnings("unchecked")
148 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
149 private void initComponents() {
150
151 jScrollPane1 = new javax.swing.JScrollPane();
152 optionsList = new javax.swing.JList<>();
153 selectAllButton = new javax.swing.JButton();
154 deselectAllButton = new javax.swing.JButton();
155 jLabel1 = new javax.swing.JLabel();
156
157 optionsList.setModel(new javax.swing.AbstractListModel<FileReportDataTypes>() {
158 FileReportDataTypes[] types = { };
159 public int getSize() { return types.length; }
160 public FileReportDataTypes getElementAt(int i) { return types[i]; }
161 });
162 jScrollPane1.setViewportView(optionsList);
163
164 org.openide.awt.Mnemonics.setLocalizedText(selectAllButton, org.openide.util.NbBundle.getMessage(ReportWizardFileOptionsVisualPanel.class, "ReportWizardFileOptionsVisualPanel.selectAllButton.text")); // NOI18N
165 selectAllButton.addActionListener(new java.awt.event.ActionListener() {
166 public void actionPerformed(java.awt.event.ActionEvent evt) {
167 selectAllButtonActionPerformed(evt);
168 }
169 });
170
171 org.openide.awt.Mnemonics.setLocalizedText(deselectAllButton, org.openide.util.NbBundle.getMessage(ReportWizardFileOptionsVisualPanel.class, "ReportWizardFileOptionsVisualPanel.deselectAllButton.text")); // NOI18N
172 deselectAllButton.addActionListener(new java.awt.event.ActionListener() {
173 public void actionPerformed(java.awt.event.ActionEvent evt) {
174 deselectAllButtonActionPerformed(evt);
175 }
176 });
177
178 org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(ReportWizardFileOptionsVisualPanel.class, "ReportWizardFileOptionsVisualPanel.jLabel1.text")); // NOI18N
179
180 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
181 this.setLayout(layout);
182 layout.setHorizontalGroup(
183 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
184 .addGroup(layout.createSequentialGroup()
185 .addContainerGap()
186 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
187 .addComponent(jScrollPane1)
188 .addGroup(layout.createSequentialGroup()
189 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
190 .addComponent(jLabel1)
191 .addGroup(layout.createSequentialGroup()
192 .addComponent(selectAllButton)
193 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
194 .addComponent(deselectAllButton)))
195 .addGap(0, 210, Short.MAX_VALUE)))
196 .addContainerGap())
197 );
198 layout.setVerticalGroup(
199 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
200 .addGroup(layout.createSequentialGroup()
201 .addGap(10, 10, 10)
202 .addComponent(jLabel1)
203 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
204 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE)
205 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
206 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
207 .addComponent(deselectAllButton)
208 .addComponent(selectAllButton))
209 .addContainerGap())
210 );
211 }// </editor-fold>//GEN-END:initComponents
212
213 private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed
214 for (FileReportDataTypes option : options) {
215 optionStates.put(option, Boolean.TRUE);
216 }
217 optionsList.repaint();
218 selectAllButton.setEnabled(false);
219 deselectAllButton.setEnabled(true);
220 wizPanel.setFinish(true);
221 }//GEN-LAST:event_selectAllButtonActionPerformed
222
223 private void deselectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deselectAllButtonActionPerformed
224 for (FileReportDataTypes option : options) {
225 optionStates.put(option, Boolean.FALSE);
226 }
227 optionsList.repaint();
228 selectAllButton.setEnabled(true);
229 deselectAllButton.setEnabled(false);
230 wizPanel.setFinish(false);
231 }//GEN-LAST:event_deselectAllButtonActionPerformed
232
233 // Variables declaration - do not modify//GEN-BEGIN:variables
234 private javax.swing.JButton deselectAllButton;
235 private javax.swing.JLabel jLabel1;
236 private javax.swing.JScrollPane jScrollPane1;
237 private javax.swing.JList<FileReportDataTypes> optionsList;
238 private javax.swing.JButton selectAllButton;
239 // End of variables declaration//GEN-END:variables
240
241 private class OptionsListModel implements ListModel<FileReportDataTypes> {
242
243 @Override
244 public int getSize() {
245 return options.size();
246 }
247
248 @Override
250 return options.get(index);
251 }
252
253 @Override
254 public void addListDataListener(ListDataListener l) {
255 }
256
257 @Override
258 public void removeListDataListener(ListDataListener l) {
259 }
260 }
261
265 private class OptionsListRenderer extends JCheckBox implements ListCellRenderer<FileReportDataTypes> {
266
267 @Override
268 public Component getListCellRendererComponent(JList<? extends FileReportDataTypes> list, FileReportDataTypes value, int index, boolean isSelected, boolean cellHasFocus) {
269 if (value != null) {
270 FileReportDataTypes col = value;
271 setEnabled(list.isEnabled());
272 setSelected(optionStates.get(col));
273 setFont(list.getFont());
274 setBackground(list.getBackground());
275 setForeground(list.getForeground());
276 setText(col.getName());
277 return this;
278 }
279 return new JLabel();
280 }
281
282 }
283
284}
Component getListCellRendererComponent(JList<? extends FileReportDataTypes > list, FileReportDataTypes value, int index, boolean isSelected, boolean cellHasFocus)

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.