19 package org.sleuthkit.autopsy.report;
21 import java.awt.Component;
22 import java.awt.event.MouseAdapter;
23 import java.awt.event.MouseEvent;
25 import java.util.ArrayList;
26 import java.util.LinkedHashMap;
27 import java.util.List;
29 import java.util.logging.Level;
30 import javax.swing.JCheckBox;
31 import javax.swing.JFileChooser;
32 import javax.swing.JLabel;
33 import javax.swing.JList;
34 import javax.swing.JOptionPane;
35 import javax.swing.ListCellRenderer;
36 import javax.swing.ListModel;
37 import javax.swing.event.ListDataListener;
38 import org.openide.util.NbBundle;
49 "CreatePortableCasePanel.error.errorTitle=Error getting tag names for case",
50 "CreatePortableCasePanel.error.noOpenCase=There is no case open",
51 "CreatePortableCasePanel.error.errorLoadingTags=Error loading tags",
53 @SuppressWarnings(
"PMD.SingularField")
54 class CreatePortableCasePanel
extends javax.swing.JPanel {
56 private static final long serialVersionUID = 1L;
57 private List<TagName> tagNames;
58 private final Map<String, Boolean> tagNameSelections =
new LinkedHashMap<>();
59 private final TagNamesListModel tagsNamesListModel =
new TagNamesListModel();
60 private final TagsNamesListCellRenderer tagsNamesRenderer =
new TagsNamesListCellRenderer();
65 public CreatePortableCasePanel() {
67 customizeComponents();
70 private void customizeComponents() {
71 populateTagNameComponents();
74 outputFolderTextField.setText(Case.getCurrentCaseThrows().getReportDirectory());
75 }
catch (NoCurrentCaseException ex) {
76 Logger.getLogger(CreatePortableCasePanel.class.getName()).log(Level.SEVERE,
"Exception while getting open case.", ex);
77 JOptionPane.showMessageDialog(
this, Bundle.CreatePortableCasePanel_error_noOpenCase(), Bundle.CreatePortableCasePanel_error_errorTitle(), JOptionPane.ERROR_MESSAGE);
81 private void populateTagNameComponents() {
84 tagNames = Case.getCurrentCaseThrows().getServices().getTagsManager().getTagNamesInUse();
85 }
catch (TskCoreException ex) {
86 Logger.getLogger(CreatePortableCasePanel.class.getName()).log(Level.SEVERE,
"Failed to get tag names", ex);
87 JOptionPane.showMessageDialog(
this, Bundle.CreatePortableCasePanel_error_errorLoadingTags(), Bundle.CreatePortableCasePanel_error_errorTitle(), JOptionPane.ERROR_MESSAGE);
88 }
catch (NoCurrentCaseException ex) {
89 Logger.getLogger(CreatePortableCasePanel.class.getName()).log(Level.SEVERE,
"Exception while getting open case.", ex);
90 JOptionPane.showMessageDialog(
this, Bundle.CreatePortableCasePanel_error_noOpenCase(), Bundle.CreatePortableCasePanel_error_errorTitle(), JOptionPane.ERROR_MESSAGE);
96 for (TagName tagName : tagNames) {
97 tagNameSelections.put(tagName.getDisplayName(), Boolean.FALSE);
103 tagNamesListBox.setModel(tagsNamesListModel);
104 tagNamesListBox.setCellRenderer(tagsNamesRenderer);
105 tagNamesListBox.setVisibleRowCount(-1);
106 tagNamesListBox.addMouseListener(
new MouseAdapter() {
108 public void mousePressed(MouseEvent evt) {
109 JList<?> list = (JList) evt.getSource();
110 int index = list.locationToIndex(evt.getPoint());
112 String value = tagsNamesListModel.getElementAt(index);
113 tagNameSelections.put(value, !tagNameSelections.get(value));
125 List<TagName> getSelectedTagNames() {
126 List<TagName> selectedTagNames =
new ArrayList<>();
127 for (TagName tagName : tagNames) {
128 if (tagNameSelections.get(tagName.getDisplayName())) {
129 selectedTagNames.add(tagName);
132 return selectedTagNames;
140 String getOutputFolder() {
141 return outputFolderTextField.getText();
149 return tagNames.size();
154 return tagNames.get(index).getDisplayName();
168 private static final long serialVersionUID = 1L;
173 setEnabled(list.isEnabled());
174 setSelected(tagNameSelections.get(value));
175 setFont(list.getFont());
176 setBackground(list.getBackground());
177 setForeground(list.getForeground());
190 @SuppressWarnings(
"unchecked")
192 private
void initComponents() {
194 selectAllButton =
new javax.swing.JButton();
195 deselectAllButton =
new javax.swing.JButton();
196 jScrollPane1 =
new javax.swing.JScrollPane();
197 tagNamesListBox =
new javax.swing.JList<>();
198 outputFolderTextField =
new javax.swing.JTextField();
199 chooseOutputFolderButton =
new javax.swing.JButton();
200 jLabel1 =
new javax.swing.JLabel();
201 jLabel2 =
new javax.swing.JLabel();
203 org.openide.awt.Mnemonics.setLocalizedText(selectAllButton,
org.openide.util.NbBundle.getMessage(CreatePortableCasePanel.class,
"CreatePortableCasePanel.selectAllButton.text"));
204 selectAllButton.setMaximumSize(
new java.awt.Dimension(99, 23));
205 selectAllButton.setMinimumSize(
new java.awt.Dimension(99, 23));
206 selectAllButton.setPreferredSize(
new java.awt.Dimension(99, 23));
207 selectAllButton.addActionListener(
new java.awt.event.ActionListener() {
208 public void actionPerformed(java.awt.event.ActionEvent evt) {
209 selectAllButtonActionPerformed(evt);
213 org.openide.awt.Mnemonics.setLocalizedText(deselectAllButton,
org.openide.util.NbBundle.getMessage(CreatePortableCasePanel.class,
"CreatePortableCasePanel.deselectAllButton.text"));
214 deselectAllButton.addActionListener(
new java.awt.event.ActionListener() {
215 public void actionPerformed(java.awt.event.ActionEvent evt) {
216 deselectAllButtonActionPerformed(evt);
220 jScrollPane1.setViewportView(tagNamesListBox);
222 outputFolderTextField.setText(
org.openide.util.NbBundle.getMessage(CreatePortableCasePanel.class,
"CreatePortableCasePanel.outputFolderTextField.text"));
224 org.openide.awt.Mnemonics.setLocalizedText(chooseOutputFolderButton,
org.openide.util.NbBundle.getMessage(CreatePortableCasePanel.class,
"CreatePortableCasePanel.chooseOutputFolderButton.text"));
225 chooseOutputFolderButton.addActionListener(
new java.awt.event.ActionListener() {
226 public void actionPerformed(java.awt.event.ActionEvent evt) {
227 chooseOutputFolderButtonActionPerformed(evt);
231 org.openide.awt.Mnemonics.setLocalizedText(jLabel1,
org.openide.util.NbBundle.getMessage(CreatePortableCasePanel.class,
"CreatePortableCasePanel.jLabel1.text"));
233 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(CreatePortableCasePanel.class,
"CreatePortableCasePanel.jLabel2.text"));
235 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
236 this.setLayout(layout);
237 layout.setHorizontalGroup(
238 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
239 .addGroup(layout.createSequentialGroup()
241 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
242 .addGroup(layout.createSequentialGroup()
243 .addComponent(jLabel1)
244 .addGap(0, 0, Short.MAX_VALUE))
245 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
246 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
247 .addGroup(layout.createSequentialGroup()
248 .addComponent(jLabel2)
249 .addGap(0, 0, Short.MAX_VALUE))
250 .addComponent(jScrollPane1))
251 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
252 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
253 .addComponent(deselectAllButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
254 .addComponent(selectAllButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
255 .addGroup(layout.createSequentialGroup()
256 .addComponent(outputFolderTextField)
257 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
258 .addComponent(chooseOutputFolderButton)))
262 layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {deselectAllButton, selectAllButton});
264 layout.setVerticalGroup(
265 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
266 .addGroup(layout.createSequentialGroup()
268 .addComponent(jLabel1)
269 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
270 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
271 .addGroup(layout.createSequentialGroup()
272 .addComponent(selectAllButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
273 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
274 .addComponent(deselectAllButton))
275 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 132, Short.MAX_VALUE))
276 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
277 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
278 .addGroup(layout.createSequentialGroup()
279 .addComponent(jLabel2)
280 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
281 .addComponent(outputFolderTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
282 .addComponent(chooseOutputFolderButton))
287 private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {
288 for (TagName tagName : tagNames) {
289 tagNameSelections.put(tagName.getDisplayName(), Boolean.TRUE);
291 tagNamesListBox.repaint();
294 private void deselectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {
295 for (TagName tagName : tagNames) {
296 tagNameSelections.put(tagName.getDisplayName(), Boolean.FALSE);
298 tagNamesListBox.repaint();
301 private void chooseOutputFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {
302 JFileChooser fileChooser =
new JFileChooser();
303 fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
305 File currentSelection =
new File(outputFolderTextField.getText());
306 if (currentSelection.exists()) {
307 fileChooser.setCurrentDirectory(currentSelection);
310 int result = fileChooser.showOpenDialog(
this);
312 if (result == JFileChooser.APPROVE_OPTION) {
313 String outputDir = fileChooser.getSelectedFile().getAbsolutePath();
314 outputFolderTextField.setText(outputDir);
320 private javax.swing.JButton chooseOutputFolderButton;
321 private javax.swing.JButton deselectAllButton;
322 private javax.swing.JLabel jLabel1;
323 private javax.swing.JLabel jLabel2;
324 private javax.swing.JScrollPane jScrollPane1;
325 private javax.swing.JTextField outputFolderTextField;
326 private javax.swing.JButton selectAllButton;
327 private javax.swing.JList<String> tagNamesListBox;
void addListDataListener(ListDataListener l)
String getElementAt(int index)
void removeListDataListener(ListDataListener l)