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(750, 500));
98 org.openide.awt.Mnemonics.setLocalizedText(externalViewerTitleLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text"));
100 jSplitPane1.setDividerLocation(350);
101 jSplitPane1.setDividerSize(1);
103 org.openide.awt.Mnemonics.setLocalizedText(exePathLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.exePathLabel.text"));
105 org.openide.awt.Mnemonics.setLocalizedText(exePathNameLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.exePathNameLabel.text"));
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()
113 .addGroup(exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
114 .addComponent(exePathLabel)
115 .addComponent(exePathNameLabel))
116 .addContainerGap(159, Short.MAX_VALUE))
118 exePanelLayout.setVerticalGroup(
119 exePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
120 .addGroup(exePanelLayout.createSequentialGroup()
122 .addComponent(exePathLabel)
123 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
124 .addComponent(exePathNameLabel)
125 .addContainerGap(408, Short.MAX_VALUE))
128 jSplitPane1.setRightComponent(exePanel);
130 org.openide.awt.Mnemonics.setLocalizedText(ruleListLabel,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.ruleListLabel.text"));
132 rulesScrollPane.setViewportView(rulesList);
134 newRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png")));
135 org.openide.awt.Mnemonics.setLocalizedText(newRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.newRuleButton.text"));
136 newRuleButton.addActionListener(
new java.awt.event.ActionListener() {
137 public void actionPerformed(java.awt.event.ActionEvent evt) {
138 newRuleButtonActionPerformed(evt);
142 editRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png")));
143 org.openide.awt.Mnemonics.setLocalizedText(editRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.editRuleButton.text"));
144 editRuleButton.addActionListener(
new java.awt.event.ActionListener() {
145 public void actionPerformed(java.awt.event.ActionEvent evt) {
146 editRuleButtonActionPerformed(evt);
150 deleteRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png")));
151 org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton,
org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
"ExternalViewerGlobalSettingsPanel.deleteRuleButton.text"));
152 deleteRuleButton.addActionListener(
new java.awt.event.ActionListener() {
153 public void actionPerformed(java.awt.event.ActionEvent evt) {
154 deleteRuleButtonActionPerformed(evt);
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()
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)))
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))))
180 rulesPanelLayout.setVerticalGroup(
181 rulesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
182 .addGroup(rulesPanelLayout.createSequentialGroup()
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))
195 jSplitPane1.setLeftComponent(rulesPanel);
197 jScrollPane1.setViewportView(jSplitPane1);
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()
205 .addComponent(externalViewerTitleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 777, Short.MAX_VALUE)
207 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
208 .addGroup(jPanel1Layout.createSequentialGroup()
210 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 777, Short.MAX_VALUE)
213 jPanel1Layout.setVerticalGroup(
214 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
215 .addGroup(jPanel1Layout.createSequentialGroup()
217 .addComponent(externalViewerTitleLabel)
218 .addContainerGap(475, Short.MAX_VALUE))
219 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
220 .addGroup(jPanel1Layout.createSequentialGroup()
222 .addComponent(jScrollPane1)
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)
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)
238 private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
239 AddExternalViewerRuleDialog dialog =
new AddExternalViewerRuleDialog();
240 AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
241 if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
242 ExternalViewerRule newRule = dialog.getRule();
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);
251 updateRulesListModel();
252 int index = rules.indexOf(newRule);
253 rulesList.setSelectedIndex(index);
255 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
260 private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
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();
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);
274 rules.add(selected, dialog.getRule());
275 updateRulesListModel();
276 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
279 rulesList.setSelectedIndex(selected);
283 private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {
284 ExternalViewerRule rule = rulesList.getSelectedValue();
286 updateRulesListModel();
287 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
291 public void store() {
292 ExternalViewerRulesManager.getInstance().setUserRules(rules);
297 rules = ExternalViewerRulesManager.getInstance().getUserRules();
298 updateRulesListModel();
305 private void enableButtons() {
306 boolean ruleIsSelected = rulesList.getSelectedIndex() != -1;
307 editRuleButton.setEnabled(ruleIsSelected);
308 deleteRuleButton.setEnabled(ruleIsSelected);
315 private void updateRulesListModel() {
316 rulesListModel.clear();
317 Collections.sort(rules);
318 for (ExternalViewerRule rule : rules) {
319 rulesListModel.addElement(rule);
326 private void populateExePath() {
327 ExternalViewerRule rule = rulesList.getSelectedValue();
329 if (rule.getRuleType() == ExternalViewerRule.RuleType.MIME) {
330 exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
331 "ExternalViewerGlobalSettingsPanel.exePathLabel.MIME.text"));
333 exePathLabel.setText(NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class,
334 "ExternalViewerGlobalSettingsPanel.exePathLabel.EXT.text"));
336 exePathNameLabel.setText(rule.getExePath());
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"));
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;
synchronized static Logger getLogger(String name)