Autopsy  4.5.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-2016 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  rulesScrollPane = new javax.swing.JScrollPane();
91  rulesList = new javax.swing.JList<>();
92  newRuleButton = new javax.swing.JButton();
93  editRuleButton = new javax.swing.JButton();
94  deleteRuleButton = new javax.swing.JButton();
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.setDividerLocation(365);
103  jSplitPane1.setDividerSize(1);
104 
105  exePanel.setPreferredSize(new java.awt.Dimension(311, 224));
106 
107  org.openide.awt.Mnemonics.setLocalizedText(exePathLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.exePathLabel.text")); // NOI18N
108 
109  org.openide.awt.Mnemonics.setLocalizedText(exePathNameLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.exePathNameLabel.text")); // NOI18N
110 
111  javax.swing.GroupLayout exePanelLayout = new javax.swing.GroupLayout(exePanel);
112  exePanel.setLayout(exePanelLayout);
113  exePanelLayout.setHorizontalGroup(
114  exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
115  .addGroup(exePanelLayout.createSequentialGroup()
116  .addContainerGap()
117  .addGroup(exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
118  .addComponent(exePathLabel)
119  .addComponent(exePathNameLabel))
120  .addContainerGap(47, Short.MAX_VALUE))
121  );
122  exePanelLayout.setVerticalGroup(
123  exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
124  .addGroup(exePanelLayout.createSequentialGroup()
125  .addContainerGap()
126  .addComponent(exePathLabel)
127  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
128  .addComponent(exePathNameLabel)
129  .addContainerGap(361, Short.MAX_VALUE))
130  );
131 
132  jSplitPane1.setRightComponent(exePanel);
133 
134  rulesPanel.setPreferredSize(new java.awt.Dimension(365, 406));
135 
136  org.openide.awt.Mnemonics.setLocalizedText(ruleListLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ruleListLabel.text")); // NOI18N
137 
138  rulesScrollPane.setViewportView(rulesList);
139 
140  newRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
141  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.newRuleButton.text")); // NOI18N
142  newRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
143  newRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
144  newRuleButton.setPreferredSize(new java.awt.Dimension(111, 25));
145  newRuleButton.addActionListener(new java.awt.event.ActionListener() {
146  public void actionPerformed(java.awt.event.ActionEvent evt) {
147  newRuleButtonActionPerformed(evt);
148  }
149  });
150 
151  editRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
152  org.openide.awt.Mnemonics.setLocalizedText(editRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.editRuleButton.text")); // NOI18N
153  editRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
154  editRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
155  editRuleButton.setPreferredSize(new java.awt.Dimension(111, 25));
156  editRuleButton.addActionListener(new java.awt.event.ActionListener() {
157  public void actionPerformed(java.awt.event.ActionEvent evt) {
158  editRuleButtonActionPerformed(evt);
159  }
160  });
161 
162  deleteRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
163  org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.deleteRuleButton.text")); // NOI18N
164  deleteRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
165  deleteRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
166  deleteRuleButton.setPreferredSize(new java.awt.Dimension(111, 25));
167  deleteRuleButton.addActionListener(new java.awt.event.ActionListener() {
168  public void actionPerformed(java.awt.event.ActionEvent evt) {
169  deleteRuleButtonActionPerformed(evt);
170  }
171  });
172 
173  javax.swing.GroupLayout rulesPanelLayout = new javax.swing.GroupLayout(rulesPanel);
174  rulesPanel.setLayout(rulesPanelLayout);
175  rulesPanelLayout.setHorizontalGroup(
176  rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
177  .addGroup(rulesPanelLayout.createSequentialGroup()
178  .addContainerGap()
179  .addGroup(rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
180  .addComponent(ruleListLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
181  .addComponent(rulesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE)
182  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, rulesPanelLayout.createSequentialGroup()
183  .addGap(0, 0, Short.MAX_VALUE)
184  .addComponent(newRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
185  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
186  .addComponent(editRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
187  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
188  .addComponent(deleteRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
189  .addContainerGap())
190  );
191  rulesPanelLayout.setVerticalGroup(
192  rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
193  .addGroup(rulesPanelLayout.createSequentialGroup()
194  .addContainerGap()
195  .addComponent(ruleListLabel)
196  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
197  .addComponent(rulesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 328, Short.MAX_VALUE)
198  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
199  .addGroup(rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
200  .addComponent(newRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
201  .addComponent(editRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
202  .addComponent(deleteRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
203  .addContainerGap())
204  );
205 
206  jSplitPane1.setLeftComponent(rulesPanel);
207 
208  jScrollPane1.setViewportView(jSplitPane1);
209 
210  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
211  jPanel1.setLayout(jPanel1Layout);
212  jPanel1Layout.setHorizontalGroup(
213  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
214  .addGroup(jPanel1Layout.createSequentialGroup()
215  .addContainerGap()
216  .addComponent(externalViewerTitleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 681, Short.MAX_VALUE)
217  .addContainerGap())
218  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
219  .addGroup(jPanel1Layout.createSequentialGroup()
220  .addContainerGap()
221  .addComponent(jScrollPane1)
222  .addContainerGap()))
223  );
224  jPanel1Layout.setVerticalGroup(
225  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
226  .addGroup(jPanel1Layout.createSequentialGroup()
227  .addContainerGap()
228  .addComponent(externalViewerTitleLabel)
229  .addContainerGap(428, Short.MAX_VALUE))
230  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
231  .addGroup(jPanel1Layout.createSequentialGroup()
232  .addGap(32, 32, 32)
233  .addComponent(jScrollPane1)
234  .addContainerGap()))
235  );
236 
237  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
238  this.setLayout(layout);
239  layout.setHorizontalGroup(
240  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
241  .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
242  );
243  layout.setVerticalGroup(
244  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
245  .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
246  );
247  }// </editor-fold>//GEN-END:initComponents
248 
249  private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed
250  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog();
251  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
252  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
253  ExternalViewerRule newRule = dialog.getRule();
254  // Only allow one association for each MIME type or extension.
255  if (rules.contains(newRule)) {
256  JOptionPane.showMessageDialog(null,
257  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
258  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
259  JOptionPane.ERROR_MESSAGE);
260  } else {
261  rules.add(newRule);
262  updateRulesListModel();
263  int index = rules.indexOf(newRule);
264  rulesList.setSelectedIndex(index);
265  enableButtons();
266  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
267  }
268  }
269  }//GEN-LAST:event_newRuleButtonActionPerformed
270 
271  private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editRuleButtonActionPerformed
272  int selected = rulesList.getSelectedIndex();
273  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog(rulesListModel.get(rulesList.getSelectedIndex()));
274  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
275  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
276  rules.remove(selected);
277  ExternalViewerRule newRule = dialog.getRule();
278  // Only allow one association for each MIME type or extension.
279  if (rules.contains(newRule)) {
280  JOptionPane.showMessageDialog(null,
281  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
282  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
283  JOptionPane.ERROR_MESSAGE);
284  } else {
285  rules.add(selected, dialog.getRule());
286  updateRulesListModel();
287  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
288  }
289  }
290  rulesList.setSelectedIndex(selected);
291  enableButtons();
292  }//GEN-LAST:event_editRuleButtonActionPerformed
293 
294  private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteRuleButtonActionPerformed
295  ExternalViewerRule rule = rulesList.getSelectedValue();
296  rules.remove(rule);
297  updateRulesListModel();
298  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
299  }//GEN-LAST:event_deleteRuleButtonActionPerformed
300 
301  @Override
302  public void store() {
303  ExternalViewerRulesManager.getInstance().setUserRules(rules);
304  }
305 
306  @Override
307  public void load() {
308  rules = ExternalViewerRulesManager.getInstance().getUserRules();
309  updateRulesListModel();
310  enableButtons();
311  }
312 
316  private void enableButtons() {
317  boolean ruleIsSelected = rulesList.getSelectedIndex() != -1;
318  editRuleButton.setEnabled(ruleIsSelected);
319  deleteRuleButton.setEnabled(ruleIsSelected);
320  }
321 
326  private void updateRulesListModel() {
327  rulesListModel.clear();
328  Collections.sort(rules);
329  for (ExternalViewerRule rule : rules) {
330  rulesListModel.addElement(rule);
331  }
332  }
333 
337  private void populateExePath() {
338  ExternalViewerRule rule = rulesList.getSelectedValue();
339  if (rule != null) {
340  if (rule.getRuleType() == ExternalViewerRule.RuleType.MIME) {
341  exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
342  "ExternalViewerGlobalSettingsPanel.exePathLabel.MIME.text"));
343  } else {
344  exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
345  "ExternalViewerGlobalSettingsPanel.exePathLabel.EXT.text"));
346  }
347  exePathNameLabel.setText(rule.getExePath());
348  }
349  enableButtons();
350  }
351 
355  private void clearExePath() {
356  rulesList.clearSelection();
357  exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
358  "ExternalViewerGlobalSettingsPanel.exePathLabel.text"));
359  exePathNameLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
360  "ExternalViewerGlobalSettingsPanel.exePathLabel.empty.text"));
361  enableButtons();
362  }
363 
364  // Variables declaration - do not modify//GEN-BEGIN:variables
365  private javax.swing.JButton deleteRuleButton;
366  private javax.swing.JButton editRuleButton;
367  private javax.swing.JPanel exePanel;
368  private javax.swing.JLabel exePathLabel;
369  private javax.swing.JLabel exePathNameLabel;
370  private javax.swing.JLabel externalViewerTitleLabel;
371  private javax.swing.JPanel jPanel1;
372  private javax.swing.JScrollPane jScrollPane1;
373  private javax.swing.JSplitPane jSplitPane1;
374  private javax.swing.JButton newRuleButton;
375  private javax.swing.JLabel ruleListLabel;
376  private javax.swing.JList<ExternalViewerRule> rulesList;
377  private javax.swing.JPanel rulesPanel;
378  private javax.swing.JScrollPane rulesScrollPane;
379  // End of variables declaration//GEN-END:variables
380 }
synchronized static Logger getLogger(String name)
Definition: Logger.java:124

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