19 package org.sleuthkit.autopsy.directorytree;
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;
37 final class ExternalViewerGlobalSettingsPanel
extends javax.swing.JPanel implements OptionsPanel {
39 private static final Logger logger = Logger.
getLogger(ExternalViewerGlobalSettingsPanel.class.getName());
40 private DefaultListModel<ExternalViewerRule> rulesListModel;
41 private java.util.List<ExternalViewerRule> rules;
46 public ExternalViewerGlobalSettingsPanel() {
48 customizeComponents();
54 private void customizeComponents() {
55 rulesListModel =
new DefaultListModel<>();
56 rules =
new ArrayList<>();
57 rulesList.setModel(rulesListModel);
58 rulesList.addListSelectionListener(
new ListSelectionListener() {
60 public void valueChanged(ListSelectionEvent e) {
61 if (e.getValueIsAdjusting() ==
false) {
62 if (rulesList.getSelectedIndex() == -1) {
77 @SuppressWarnings(
"unchecked")
79 private
void initComponents() {
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<>();
96 setPreferredSize(
new java.awt.Dimension(701, 453));
98 jPanel1.setPreferredSize(
new java.awt.Dimension(701, 453));
100 org.openide.awt.Mnemonics.setLocalizedText(externalViewerTitleLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text"));
102 jSplitPane1.setDividerSize(1);
104 exePanel.setPreferredSize(
new java.awt.Dimension(311, 224));
106 org.openide.awt.Mnemonics.setLocalizedText(exePathLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.exePathLabel.text"));
108 org.openide.awt.Mnemonics.setLocalizedText(exePathNameLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.exePathNameLabel.text"));
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()
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))
121 exePanelLayout.setVerticalGroup(
122 exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
123 .addGroup(exePanelLayout.createSequentialGroup()
125 .addComponent(exePathLabel)
126 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
127 .addComponent(exePathNameLabel)
128 .addContainerGap(355, Short.MAX_VALUE))
131 jSplitPane1.setRightComponent(exePanel);
133 org.openide.awt.Mnemonics.setLocalizedText(ruleListLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.ruleListLabel.text"));
135 newRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png")));
136 org.openide.awt.Mnemonics.setLocalizedText(newRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.newRuleButton.text"));
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);
145 editRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png")));
146 org.openide.awt.Mnemonics.setLocalizedText(editRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.editRuleButton.text"));
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);
155 deleteRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png")));
156 org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.deleteRuleButton.text"));
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);
165 jScrollPane2.setViewportView(rulesList);
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()
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()
177 .addComponent(newRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
179 .addComponent(editRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
181 .addComponent(deleteRuleButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
182 .addComponent(jScrollPane2))
185 rulesPanelLayout.setVerticalGroup(
186 rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
187 .addGroup(rulesPanelLayout.createSequentialGroup()
189 .addComponent(ruleListLabel)
190 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
191 .addComponent(jScrollPane2)
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))
200 jSplitPane1.setLeftComponent(rulesPanel);
202 jScrollPane1.setViewportView(jSplitPane1);
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()
210 .addComponent(externalViewerTitleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 681, Short.MAX_VALUE)
212 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
213 .addGroup(jPanel1Layout.createSequentialGroup()
215 .addComponent(jScrollPane1)
218 jPanel1Layout.setVerticalGroup(
219 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
220 .addGroup(jPanel1Layout.createSequentialGroup()
222 .addComponent(externalViewerTitleLabel)
223 .addContainerGap(428, Short.MAX_VALUE))
224 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
225 .addGroup(jPanel1Layout.createSequentialGroup()
227 .addComponent(jScrollPane1)
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)
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)
243 private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
244 AddExternalViewerRuleDialog dialog =
new AddExternalViewerRuleDialog();
245 AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
246 if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
247 ExternalViewerRule newRule = dialog.getRule();
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);
256 updateRulesListModel();
257 int index = rules.indexOf(newRule);
258 rulesList.setSelectedIndex(index);
260 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
265 private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
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();
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);
279 rules.add(selected, dialog.getRule());
280 updateRulesListModel();
281 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
284 rulesList.setSelectedIndex(selected);
288 private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
289 ExternalViewerRule rule = rulesList.getSelectedValue();
291 updateRulesListModel();
292 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
296 public void store() {
297 ExternalViewerRulesManager.getInstance().setUserRules(rules);
302 rules = ExternalViewerRulesManager.getInstance().getUserRules();
303 updateRulesListModel();
310 private void enableButtons() {
311 boolean ruleIsSelected = rulesList.getSelectedIndex() != -1;
312 editRuleButton.setEnabled(ruleIsSelected);
313 deleteRuleButton.setEnabled(ruleIsSelected);
320 private void updateRulesListModel() {
321 rulesListModel.clear();
322 Collections.sort(rules);
323 for (ExternalViewerRule rule : rules) {
324 rulesListModel.addElement(rule);
331 private void populateExePath() {
332 ExternalViewerRule rule = rulesList.getSelectedValue();
334 if (rule.getRuleType() == ExternalViewerRule.RuleType.MIME) {
335 exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
336 "ExternalViewerGlobalSettingsPanel.exePathLabel.MIME.text"));
338 exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
339 "ExternalViewerGlobalSettingsPanel.exePathLabel.EXT.text"));
341 exePathNameLabel.setText(rule.getExePath());
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"));
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;
synchronized static Logger getLogger(String name)