Autopsy  4.6.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
ExternalViewerGlobalSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-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  */
19 package org.sleuthkit.autopsy.directorytree;
20 
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import javax.swing.DefaultListModel;
24 import javax.swing.JOptionPane;
25 import javax.swing.event.ListSelectionEvent;
26 import javax.swing.event.ListSelectionListener;
27 import org.netbeans.spi.options.OptionsPanelController;
28 import org.openide.util.NbBundle;
31 
37 final class ExternalViewerGlobalSettingsPanel extends javax.swing.JPanel implements OptionsPanel {
38 
39  private static final Logger logger = Logger.getLogger(ExternalViewerGlobalSettingsPanel.class.getName());
40  private DefaultListModel<ExternalViewerRule> rulesListModel;
41  private java.util.List<ExternalViewerRule> rules;
42 
46  public ExternalViewerGlobalSettingsPanel() {
47  initComponents();
48  customizeComponents();
49  }
50 
54  private void customizeComponents() {
55  rulesListModel = new DefaultListModel<>();
56  rules = new ArrayList<>();
57  rulesList.setModel(rulesListModel);
58  rulesList.addListSelectionListener(new ListSelectionListener() {
59  @Override
60  public void valueChanged(ListSelectionEvent e) {
61  if (e.getValueIsAdjusting() == false) {
62  if (rulesList.getSelectedIndex() == -1) {
63  clearExePath();
64  } else {
65  populateExePath();
66  }
67  }
68  }
69  });
70  }
71 
77  @SuppressWarnings("unchecked")
78  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
79  private void initComponents() {
80 
81  jPanel1 = new javax.swing.JPanel();
82  externalViewerTitleLabel = new javax.swing.JLabel();
83  jScrollPane1 = new javax.swing.JScrollPane();
84  jSplitPane1 = new javax.swing.JSplitPane();
85  exePanel = new javax.swing.JPanel();
86  exePathLabel = new javax.swing.JLabel();
87  exePathNameLabel = new javax.swing.JLabel();
88  rulesPanel = new javax.swing.JPanel();
89  ruleListLabel = new javax.swing.JLabel();
90  newRuleButton = new javax.swing.JButton();
91  editRuleButton = new javax.swing.JButton();
92  deleteRuleButton = new javax.swing.JButton();
93  jScrollPane2 = new javax.swing.JScrollPane();
94  rulesList = new javax.swing.JList<>();
95 
96  setPreferredSize(new java.awt.Dimension(701, 453));
97 
98  jPanel1.setPreferredSize(new java.awt.Dimension(701, 453));
99 
100  org.openide.awt.Mnemonics.setLocalizedText(externalViewerTitleLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text")); // NOI18N
101 
102  jSplitPane1.setDividerSize(1);
103 
104  exePanel.setPreferredSize(new java.awt.Dimension(311, 224));
105 
106  org.openide.awt.Mnemonics.setLocalizedText(exePathLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.exePathLabel.text")); // NOI18N
107 
108  org.openide.awt.Mnemonics.setLocalizedText(exePathNameLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.exePathNameLabel.text")); // NOI18N
109 
110  javax.swing.GroupLayout exePanelLayout = new javax.swing.GroupLayout(exePanel);
111  exePanel.setLayout(exePanelLayout);
112  exePanelLayout.setHorizontalGroup(
113  exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
114  .addGroup(exePanelLayout.createSequentialGroup()
115  .addContainerGap()
116  .addGroup(exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
117  .addComponent(exePathLabel)
118  .addComponent(exePathNameLabel))
119  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
120  );
121  exePanelLayout.setVerticalGroup(
122  exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
123  .addGroup(exePanelLayout.createSequentialGroup()
124  .addContainerGap()
125  .addComponent(exePathLabel)
126  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
127  .addComponent(exePathNameLabel)
128  .addContainerGap(355, Short.MAX_VALUE))
129  );
130 
131  jSplitPane1.setRightComponent(exePanel);
132 
133  org.openide.awt.Mnemonics.setLocalizedText(ruleListLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ruleListLabel.text")); // NOI18N
134 
135  newRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
136  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.newRuleButton.text")); // NOI18N
137  newRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
138  newRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
139  newRuleButton.addActionListener(new java.awt.event.ActionListener() {
140  public void actionPerformed(java.awt.event.ActionEvent evt) {
141  newRuleButtonActionPerformed(evt);
142  }
143  });
144 
145  editRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
146  org.openide.awt.Mnemonics.setLocalizedText(editRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.editRuleButton.text")); // NOI18N
147  editRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
148  editRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
149  editRuleButton.addActionListener(new java.awt.event.ActionListener() {
150  public void actionPerformed(java.awt.event.ActionEvent evt) {
151  editRuleButtonActionPerformed(evt);
152  }
153  });
154 
155  deleteRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
156  org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.deleteRuleButton.text")); // NOI18N
157  deleteRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
158  deleteRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
159  deleteRuleButton.addActionListener(new java.awt.event.ActionListener() {
160  public void actionPerformed(java.awt.event.ActionEvent evt) {
161  deleteRuleButtonActionPerformed(evt);
162  }
163  });
164 
165  jScrollPane2.setViewportView(rulesList);
166 
167  javax.swing.GroupLayout rulesPanelLayout = new javax.swing.GroupLayout(rulesPanel);
168  rulesPanel.setLayout(rulesPanelLayout);
169  rulesPanelLayout.setHorizontalGroup(
170  rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
171  .addGroup(rulesPanelLayout.createSequentialGroup()
172  .addContainerGap()
173  .addGroup(rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
174  .addComponent(ruleListLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
175  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rulesPanelLayout.createSequentialGroup()
176  .addGap(6, 6, 6)
177  .addComponent(newRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
178  .addGap(16, 16, 16)
179  .addComponent(editRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
180  .addGap(16, 16, 16)
181  .addComponent(deleteRuleButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
182  .addComponent(jScrollPane2))
183  .addContainerGap())
184  );
185  rulesPanelLayout.setVerticalGroup(
186  rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
187  .addGroup(rulesPanelLayout.createSequentialGroup()
188  .addContainerGap()
189  .addComponent(ruleListLabel)
190  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
191  .addComponent(jScrollPane2)
192  .addGap(12, 12, 12)
193  .addGroup(rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
194  .addComponent(newRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
195  .addComponent(editRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
196  .addComponent(deleteRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
197  .addContainerGap())
198  );
199 
200  jSplitPane1.setLeftComponent(rulesPanel);
201 
202  jScrollPane1.setViewportView(jSplitPane1);
203 
204  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
205  jPanel1.setLayout(jPanel1Layout);
206  jPanel1Layout.setHorizontalGroup(
207  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
208  .addGroup(jPanel1Layout.createSequentialGroup()
209  .addContainerGap()
210  .addComponent(externalViewerTitleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 681, Short.MAX_VALUE)
211  .addContainerGap())
212  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
213  .addGroup(jPanel1Layout.createSequentialGroup()
214  .addContainerGap()
215  .addComponent(jScrollPane1)
216  .addContainerGap()))
217  );
218  jPanel1Layout.setVerticalGroup(
219  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
220  .addGroup(jPanel1Layout.createSequentialGroup()
221  .addContainerGap()
222  .addComponent(externalViewerTitleLabel)
223  .addContainerGap(428, Short.MAX_VALUE))
224  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
225  .addGroup(jPanel1Layout.createSequentialGroup()
226  .addGap(32, 32, 32)
227  .addComponent(jScrollPane1)
228  .addContainerGap()))
229  );
230 
231  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
232  this.setLayout(layout);
233  layout.setHorizontalGroup(
234  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
235  .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
236  );
237  layout.setVerticalGroup(
238  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
239  .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
240  );
241  }// </editor-fold>//GEN-END:initComponents
242 
243  private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed
244  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog();
245  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
246  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
247  ExternalViewerRule newRule = dialog.getRule();
248  // Only allow one association for each MIME type or extension.
249  if (rules.contains(newRule)) {
250  JOptionPane.showMessageDialog(this,
251  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
252  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
253  JOptionPane.ERROR_MESSAGE);
254  } else {
255  rules.add(newRule);
256  updateRulesListModel();
257  int index = rules.indexOf(newRule);
258  rulesList.setSelectedIndex(index);
259  enableButtons();
260  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
261  }
262  }
263  }//GEN-LAST:event_newRuleButtonActionPerformed
264 
265  private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editRuleButtonActionPerformed
266  int selected = rulesList.getSelectedIndex();
267  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog(rulesListModel.get(rulesList.getSelectedIndex()));
268  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
269  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
270  rules.remove(selected);
271  ExternalViewerRule newRule = dialog.getRule();
272  // Only allow one association for each MIME type or extension.
273  if (rules.contains(newRule)) {
274  JOptionPane.showMessageDialog(this,
275  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
276  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
277  JOptionPane.ERROR_MESSAGE);
278  } else {
279  rules.add(selected, dialog.getRule());
280  updateRulesListModel();
281  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
282  }
283  }
284  rulesList.setSelectedIndex(selected);
285  enableButtons();
286  }//GEN-LAST:event_editRuleButtonActionPerformed
287 
288  private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteRuleButtonActionPerformed
289  ExternalViewerRule rule = rulesList.getSelectedValue();
290  rules.remove(rule);
291  updateRulesListModel();
292  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
293  }//GEN-LAST:event_deleteRuleButtonActionPerformed
294 
295  @Override
296  public void store() {
297  ExternalViewerRulesManager.getInstance().setUserRules(rules);
298  }
299 
300  @Override
301  public void load() {
302  rules = ExternalViewerRulesManager.getInstance().getUserRules();
303  updateRulesListModel();
304  enableButtons();
305  }
306 
310  private void enableButtons() {
311  boolean ruleIsSelected = rulesList.getSelectedIndex() != -1;
312  editRuleButton.setEnabled(ruleIsSelected);
313  deleteRuleButton.setEnabled(ruleIsSelected);
314  }
315 
320  private void updateRulesListModel() {
321  rulesListModel.clear();
322  Collections.sort(rules);
323  for (ExternalViewerRule rule : rules) {
324  rulesListModel.addElement(rule);
325  }
326  }
327 
331  private void populateExePath() {
332  ExternalViewerRule rule = rulesList.getSelectedValue();
333  if (rule != null) {
334  if (rule.getRuleType() == ExternalViewerRule.RuleType.MIME) {
335  exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
336  "ExternalViewerGlobalSettingsPanel.exePathLabel.MIME.text"));
337  } else {
338  exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
339  "ExternalViewerGlobalSettingsPanel.exePathLabel.EXT.text"));
340  }
341  exePathNameLabel.setText(rule.getExePath());
342  }
343  enableButtons();
344  }
345 
349  private void clearExePath() {
350  rulesList.clearSelection();
351  exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
352  "ExternalViewerGlobalSettingsPanel.exePathLabel.text"));
353  exePathNameLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
354  "ExternalViewerGlobalSettingsPanel.exePathLabel.empty.text"));
355  enableButtons();
356  }
357 
358  // Variables declaration - do not modify//GEN-BEGIN:variables
359  private javax.swing.JButton deleteRuleButton;
360  private javax.swing.JButton editRuleButton;
361  private javax.swing.JPanel exePanel;
362  private javax.swing.JLabel exePathLabel;
363  private javax.swing.JLabel exePathNameLabel;
364  private javax.swing.JLabel externalViewerTitleLabel;
365  private javax.swing.JPanel jPanel1;
366  private javax.swing.JScrollPane jScrollPane1;
367  private javax.swing.JScrollPane jScrollPane2;
368  private javax.swing.JSplitPane jSplitPane1;
369  private javax.swing.JButton newRuleButton;
370  private javax.swing.JLabel ruleListLabel;
371  private javax.swing.JList<ExternalViewerRule> rulesList;
372  private javax.swing.JPanel rulesPanel;
373  private javax.swing.JScrollPane rulesScrollPane;
374  // End of variables declaration//GEN-END:variables
375 }
synchronized static Logger getLogger(String name)
Definition: Logger.java:124

Copyright © 2012-2016 Basis Technology. Generated on: Mon May 7 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.