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

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