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 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();
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.setDividerLocation(365);
103 jSplitPane1.setDividerSize(1);
105 exePanel.setPreferredSize(
new java.awt.Dimension(311, 224));
107 org.openide.awt.Mnemonics.setLocalizedText(exePathLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.exePathLabel.text"));
109 org.openide.awt.Mnemonics.setLocalizedText(exePathNameLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.exePathNameLabel.text"));
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()
117 .addGroup(exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
118 .addComponent(exePathLabel)
119 .addComponent(exePathNameLabel))
120 .addContainerGap(47, Short.MAX_VALUE))
122 exePanelLayout.setVerticalGroup(
123 exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
124 .addGroup(exePanelLayout.createSequentialGroup()
126 .addComponent(exePathLabel)
127 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
128 .addComponent(exePathNameLabel)
129 .addContainerGap(361, Short.MAX_VALUE))
132 jSplitPane1.setRightComponent(exePanel);
134 rulesPanel.setPreferredSize(
new java.awt.Dimension(365, 406));
136 org.openide.awt.Mnemonics.setLocalizedText(ruleListLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.ruleListLabel.text"));
138 rulesScrollPane.setViewportView(rulesList);
140 newRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png")));
141 org.openide.awt.Mnemonics.setLocalizedText(newRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.newRuleButton.text"));
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);
151 editRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png")));
152 org.openide.awt.Mnemonics.setLocalizedText(editRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.editRuleButton.text"));
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);
162 deleteRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png")));
163 org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.deleteRuleButton.text"));
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);
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()
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)))
191 rulesPanelLayout.setVerticalGroup(
192 rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
193 .addGroup(rulesPanelLayout.createSequentialGroup()
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))
206 jSplitPane1.setLeftComponent(rulesPanel);
208 jScrollPane1.setViewportView(jSplitPane1);
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()
216 .addComponent(externalViewerTitleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 681, Short.MAX_VALUE)
218 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
219 .addGroup(jPanel1Layout.createSequentialGroup()
221 .addComponent(jScrollPane1)
224 jPanel1Layout.setVerticalGroup(
225 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
226 .addGroup(jPanel1Layout.createSequentialGroup()
228 .addComponent(externalViewerTitleLabel)
229 .addContainerGap(428, Short.MAX_VALUE))
230 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
231 .addGroup(jPanel1Layout.createSequentialGroup()
233 .addComponent(jScrollPane1)
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)
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)
249 private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
250 AddExternalViewerRuleDialog dialog =
new AddExternalViewerRuleDialog();
251 AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
252 if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
253 ExternalViewerRule newRule = dialog.getRule();
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);
262 updateRulesListModel();
263 int index = rules.indexOf(newRule);
264 rulesList.setSelectedIndex(index);
266 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
271 private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
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();
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);
285 rules.add(selected, dialog.getRule());
286 updateRulesListModel();
287 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
290 rulesList.setSelectedIndex(selected);
294 private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
295 ExternalViewerRule rule = rulesList.getSelectedValue();
297 updateRulesListModel();
298 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
302 public void store() {
303 ExternalViewerRulesManager.getInstance().setUserRules(rules);
308 rules = ExternalViewerRulesManager.getInstance().getUserRules();
309 updateRulesListModel();
316 private void enableButtons() {
317 boolean ruleIsSelected = rulesList.getSelectedIndex() != -1;
318 editRuleButton.setEnabled(ruleIsSelected);
319 deleteRuleButton.setEnabled(ruleIsSelected);
326 private void updateRulesListModel() {
327 rulesListModel.clear();
328 Collections.sort(rules);
329 for (ExternalViewerRule rule : rules) {
330 rulesListModel.addElement(rule);
337 private void populateExePath() {
338 ExternalViewerRule rule = rulesList.getSelectedValue();
340 if (rule.getRuleType() == ExternalViewerRule.RuleType.MIME) {
341 exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
342 "ExternalViewerGlobalSettingsPanel.exePathLabel.MIME.text"));
344 exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
345 "ExternalViewerGlobalSettingsPanel.exePathLabel.EXT.text"));
347 exePathNameLabel.setText(rule.getExePath());
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"));
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;
synchronized static Logger getLogger(String name)