19 package org.sleuthkit.autopsy.logicalimager.configuration;
21 import java.awt.event.ActionEvent;
22 import java.awt.event.KeyAdapter;
23 import java.awt.event.KeyEvent;
24 import java.io.IOException;
25 import java.util.List;
26 import javax.swing.JButton;
27 import javax.swing.JComponent;
28 import javax.swing.JOptionPane;
29 import javax.swing.JScrollPane;
30 import javax.swing.JTextArea;
31 import org.apache.commons.lang3.tuple.ImmutablePair;
32 import org.openide.util.NbBundle;
37 @SuppressWarnings(
"PMD.SingularField")
38 final class EditFullPathsRulePanel extends javax.swing.JPanel {
40 private JButton okButton;
41 private JButton cancelButton;
42 private final JTextArea fullPathsTextArea;
48 "EditFullPathsRulePanel.example=Example: "
50 EditFullPathsRulePanel(JButton okButton, JButton cancelButton, String ruleName, LogicalImagerRule rule,
boolean editing) {
54 ruleNameTextField.setEnabled(!editing);
57 this.setRule(ruleName, rule);
58 this.setButtons(okButton, cancelButton);
60 fullPathsTextArea =
new JTextArea();
61 initTextArea(fullPathsScrollPane, fullPathsTextArea);
62 setTextArea(fullPathsTextArea, rule.getFullPaths());
64 EditRulePanel.setTextFieldPrompts(fullPathsTextArea,
65 "<html>" + Bundle.EditFullPathsRulePanel_example() +
"<br>/Program Files/Common Files/system/wab32.dll<br>/Windows/System32/1033/VsGraphicsResources.dll</html>");
66 ruleNameTextField.requestFocus();
71 private void initTextArea(JScrollPane pane, JTextArea textArea) {
72 textArea.setColumns(20);
74 pane.setViewportView(textArea);
75 textArea.addKeyListener(
new KeyAdapter() {
77 public void keyPressed(KeyEvent e) {
78 if (e.getKeyCode() == KeyEvent.VK_TAB) {
79 if (e.getModifiers() > 0) {
80 textArea.transferFocusBackward();
82 textArea.transferFocus();
95 @SuppressWarnings(
"unchecked")
97 private
void initComponents() {
99 shouldSaveCheckBox =
new javax.swing.JCheckBox();
100 shouldAlertCheckBox =
new javax.swing.JCheckBox();
101 fullPathsLabel =
new javax.swing.JLabel();
102 descriptionTextField =
new javax.swing.JTextField();
103 descriptionLabel =
new javax.swing.JLabel();
104 ruleNameLabel =
new javax.swing.JLabel();
105 ruleNameTextField =
new javax.swing.JTextField();
106 fullPathsScrollPane =
new javax.swing.JScrollPane();
108 shouldSaveCheckBox.setSelected(
true);
109 org.openide.awt.Mnemonics.setLocalizedText(shouldSaveCheckBox,
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.shouldSaveCheckBox.text"));
111 org.openide.awt.Mnemonics.setLocalizedText(shouldAlertCheckBox,
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.shouldAlertCheckBox.text"));
112 shouldAlertCheckBox.setActionCommand(
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.shouldAlertCheckBox.actionCommand"));
114 org.openide.awt.Mnemonics.setLocalizedText(fullPathsLabel,
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.fullPathsLabel.text"));
115 fullPathsLabel.setToolTipText(
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.fullPathsLabel.toolTipText"));
117 descriptionTextField.setText(
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.descriptionTextField.text"));
119 org.openide.awt.Mnemonics.setLocalizedText(descriptionLabel,
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.descriptionLabel.text"));
121 org.openide.awt.Mnemonics.setLocalizedText(ruleNameLabel,
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.ruleNameLabel.text"));
123 ruleNameTextField.setText(
org.openide.util.NbBundle.getMessage(EditFullPathsRulePanel.class,
"EditFullPathsRulePanel.ruleNameTextField.text"));
125 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
126 this.setLayout(layout);
127 layout.setHorizontalGroup(
128 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
129 .addGroup(layout.createSequentialGroup()
131 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
132 .addComponent(shouldSaveCheckBox)
133 .addComponent(shouldAlertCheckBox)
134 .addGroup(layout.createSequentialGroup()
135 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
136 .addComponent(ruleNameLabel)
137 .addComponent(descriptionLabel)
138 .addComponent(fullPathsLabel))
139 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
140 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
141 .addComponent(ruleNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 519, Short.MAX_VALUE)
142 .addComponent(descriptionTextField)
143 .addComponent(fullPathsScrollPane))))
146 layout.setVerticalGroup(
147 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
148 .addGroup(layout.createSequentialGroup()
150 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
151 .addComponent(ruleNameLabel)
152 .addComponent(ruleNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
153 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
154 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
155 .addComponent(descriptionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
156 .addComponent(descriptionLabel))
157 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
158 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
159 .addGroup(layout.createSequentialGroup()
160 .addComponent(fullPathsLabel)
161 .addGap(0, 167, Short.MAX_VALUE))
162 .addComponent(fullPathsScrollPane))
163 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
164 .addComponent(shouldAlertCheckBox)
165 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
166 .addComponent(shouldSaveCheckBox)
173 private javax.swing.JLabel descriptionLabel;
174 private javax.swing.JTextField descriptionTextField;
175 private javax.swing.JLabel fullPathsLabel;
176 private javax.swing.JScrollPane fullPathsScrollPane;
177 private javax.swing.JLabel ruleNameLabel;
178 private javax.swing.JTextField ruleNameTextField;
179 private javax.swing.JCheckBox shouldAlertCheckBox;
180 private javax.swing.JCheckBox shouldSaveCheckBox;
187 private void setOkButton() {
188 if (this.okButton != null) {
189 this.okButton.setEnabled(
true);
200 private JOptionPane getOptionPane(JComponent parent) {
202 if (!(parent instanceof JOptionPane)) {
203 pane = getOptionPane((JComponent) parent.getParent());
205 pane = (JOptionPane) parent;
216 private void setButtons(JButton ok, JButton cancel) {
218 this.cancelButton = cancel;
219 okButton.addActionListener((ActionEvent e) -> {
220 JOptionPane pane = getOptionPane(okButton);
221 pane.setValue(okButton);
223 cancelButton.addActionListener((ActionEvent e) -> {
224 JOptionPane pane = getOptionPane(cancelButton);
225 pane.setValue(cancelButton);
230 private void setRule(String ruleName, LogicalImagerRule rule) {
231 ruleNameTextField.setText(ruleName);
232 descriptionTextField.setText(rule.getDescription());
233 shouldAlertCheckBox.setSelected(rule.isShouldAlert());
234 shouldSaveCheckBox.setSelected(rule.isShouldSave());
237 private void setTextArea(JTextArea textArea, List<String> set) {
239 for (String s : set) {
240 text += s + System.getProperty(
"line.separator");
242 textArea.setText(text);
246 "EditFullPathsRulePanel.fullPaths=Full paths",
248 ImmutablePair<String, LogicalImagerRule> toRule()
throws IOException {
249 List<String> fullPaths = EditRulePanel.validateTextList(fullPathsTextArea, Bundle.EditFullPathsRulePanel_fullPaths());
250 String ruleName = EditRulePanel.validRuleName(ruleNameTextField.getText());
251 LogicalImagerRule.Builder builder =
new LogicalImagerRule.Builder();
252 builder.getShouldAlert(shouldAlertCheckBox.isSelected())
253 .getShouldSave(shouldSaveCheckBox.isSelected())
255 .getDescription(descriptionTextField.getText())
256 .getFullPaths(fullPaths);
257 LogicalImagerRule rule = builder.build();
258 return new ImmutablePair<>(ruleName, rule);