19 package org.sleuthkit.autopsy.modules.filetypeid;
21 import java.util.ArrayList;
22 import java.util.List;
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.openide.util.NbBundle;
28 import org.openide.util.NbBundle.Messages;
36 class AddFileTypePanel
extends javax.swing.JPanel {
38 private static final long serialVersionUID = 1L;
40 private AddFileTypeSignatureDialog addSigDialog;
41 private DefaultListModel<FileType.Signature> signaturesListModel;
48 this.signaturesListModel =
new DefaultListModel<>();
49 this.signatureList.setModel(signaturesListModel);
50 this.addTypeListSelectionListener();
63 AddFileTypePanel(FileType toEdit) {
65 this.setComponentValues(toEdit);
73 private void setComponentValues(FileType toEdit) {
74 this.mimeTypeTextField.setText(toEdit.getMimeType());
75 for (Signature sig : toEdit.getSignatures()) {
76 this.signaturesListModel.addElement(sig);
87 @Messages({
"AddMimeTypePanel.emptySigList.message=Must have at least one signature.",
88 "AddMimeTypePanel.emptySigList.title=Invalid Signature List",
89 "AddMimeTypePanel.emptySetName.message=Interesting files set name is required if alert is requested.",
90 "AddMimeTypePanel.emptySetName.title=Missing Interesting Files Set Name"})
91 FileType getFileType() {
92 String typeName = mimeTypeTextField.getText();
93 if (typeName.isEmpty()) {
94 JOptionPane.showMessageDialog(null,
95 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.message"),
96 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.title"),
97 JOptionPane.ERROR_MESSAGE);
101 if (this.signaturesListModel.isEmpty()) {
102 JOptionPane.showMessageDialog(null,
103 Bundle.AddMimeTypePanel_emptySigList_message(),
104 Bundle.AddMimeTypePanel_emptySigList_title(),
105 JOptionPane.ERROR_MESSAGE);
109 List<Signature> sigList =
new ArrayList<>();
110 for (
int i = 0; i < this.signaturesListModel.getSize(); i++) {
111 sigList.add(this.signaturesListModel.elementAt(i));
115 if (this.postHitCheckBox.isSelected()) {
116 if (this.setNameTextField.getText().isEmpty()) {
117 JOptionPane.showMessageDialog(null,
118 Bundle.AddMimeTypePanel_emptySetName_message(),
119 Bundle.AddMimeTypePanel_emptySetName_title(),
120 JOptionPane.ERROR_MESSAGE);
124 setName = this.setNameTextField.getText();
126 return new FileType(typeName, sigList, this.postHitCheckBox.isSelected(), setName);
133 private void addTypeListSelectionListener() {
134 this.signatureList.addListSelectionListener(
new ListSelectionListener() {
136 public void valueChanged(ListSelectionEvent e) {
137 if (e.getValueIsAdjusting() ==
false) {
149 private void enableButtons() {
150 if (signatureList.getSelectedIndex() == -1) {
151 editSigButton.setEnabled(
false);
152 deleteSigButton.setEnabled(
false);
154 editSigButton.setEnabled(
true);
155 deleteSigButton.setEnabled(
true);
159 boolean hasSignature() {
160 return !this.signaturesListModel.isEmpty();
168 @SuppressWarnings(
"unchecked")
170 private
void initComponents() {
172 editSigButton =
new javax.swing.JButton();
173 deleteSigButton =
new javax.swing.JButton();
174 mimeTypeLabel =
new javax.swing.JLabel();
175 jScrollPane1 =
new javax.swing.JScrollPane();
176 signatureList =
new javax.swing.JList<>();
177 mimeTypeTextField =
new javax.swing.JTextField();
178 addSigButton =
new javax.swing.JButton();
179 jLabel1 =
new javax.swing.JLabel();
180 postHitCheckBox =
new javax.swing.JCheckBox();
181 setNameLabel =
new javax.swing.JLabel();
182 setNameTextField =
new javax.swing.JTextField();
184 editSigButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png")));
185 org.openide.awt.Mnemonics.setLocalizedText(editSigButton,
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.editSigButton.text"));
186 editSigButton.addActionListener(
new java.awt.event.ActionListener() {
187 public void actionPerformed(java.awt.event.ActionEvent evt) {
188 editSigButtonActionPerformed(evt);
192 deleteSigButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png")));
193 org.openide.awt.Mnemonics.setLocalizedText(deleteSigButton,
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.deleteSigButton.text"));
194 deleteSigButton.addActionListener(
new java.awt.event.ActionListener() {
195 public void actionPerformed(java.awt.event.ActionEvent evt) {
196 deleteSigButtonActionPerformed(evt);
200 mimeTypeLabel.setFont(mimeTypeLabel.getFont().deriveFont(mimeTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
201 org.openide.awt.Mnemonics.setLocalizedText(mimeTypeLabel,
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.mimeTypeLabel.text"));
203 signatureList.setModel(
new javax.swing.AbstractListModel<FileType.Signature>() {
204 Signature[] signatures = {};
205 public int getSize() {
return signatures.length; }
206 public Signature getElementAt(
int i) {
return signatures[i]; }
208 jScrollPane1.setViewportView(signatureList);
210 mimeTypeTextField.setFont(mimeTypeTextField.getFont().deriveFont(mimeTypeTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
211 mimeTypeTextField.setText(
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.mimeTypeTextField.text"));
213 addSigButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png")));
214 org.openide.awt.Mnemonics.setLocalizedText(addSigButton,
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.addSigButton.text"));
215 addSigButton.addActionListener(
new java.awt.event.ActionListener() {
216 public void actionPerformed(java.awt.event.ActionEvent evt) {
217 addSigButtonActionPerformed(evt);
221 org.openide.awt.Mnemonics.setLocalizedText(jLabel1,
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.jLabel1.text"));
223 org.openide.awt.Mnemonics.setLocalizedText(postHitCheckBox,
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.postHitCheckBox.text"));
224 postHitCheckBox.addActionListener(
new java.awt.event.ActionListener() {
225 public void actionPerformed(java.awt.event.ActionEvent evt) {
226 postHitCheckBoxActionPerformed(evt);
230 org.openide.awt.Mnemonics.setLocalizedText(setNameLabel,
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.setNameLabel.text"));
231 setNameLabel.setEnabled(postHitCheckBox.isSelected());
233 setNameTextField.setText(
org.openide.util.NbBundle.getMessage(AddFileTypePanel.class,
"AddFileTypePanel.setNameTextField.text"));
234 setNameTextField.setEnabled(postHitCheckBox.isSelected());
236 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
237 this.setLayout(layout);
238 layout.setHorizontalGroup(
239 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
240 .addGroup(layout.createSequentialGroup()
242 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
243 .addGroup(layout.createSequentialGroup()
244 .addComponent(mimeTypeLabel)
246 .addComponent(mimeTypeTextField))
247 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
248 .addGap(0, 0, Short.MAX_VALUE)
249 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
250 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
251 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
252 .addComponent(addSigButton)
253 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
254 .addComponent(editSigButton)
255 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
256 .addComponent(deleteSigButton))
257 .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 393, javax.swing.GroupLayout.PREFERRED_SIZE))
258 .addGroup(layout.createSequentialGroup()
260 .addComponent(setNameLabel)
261 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
262 .addComponent(setNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE))))
263 .addGroup(layout.createSequentialGroup()
264 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
265 .addComponent(jLabel1)
266 .addComponent(postHitCheckBox))
267 .addGap(0, 0, Short.MAX_VALUE)))
270 layout.setVerticalGroup(
271 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
272 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
274 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
275 .addComponent(mimeTypeLabel)
276 .addComponent(mimeTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
278 .addComponent(jLabel1)
280 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
281 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
282 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
283 .addComponent(addSigButton)
284 .addComponent(editSigButton)
285 .addComponent(deleteSigButton))
286 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
287 .addComponent(postHitCheckBox)
288 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
289 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
290 .addComponent(setNameLabel)
291 .addComponent(setNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
292 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
296 private void editSigButtonActionPerformed(java.awt.event.ActionEvent evt) {
297 if (evt.getSource().equals(this.editSigButton) && this.signatureList.getSelectedValue() != null) {
298 int selected = this.signatureList.getSelectedIndex();
299 this.addSigDialog =
new AddFileTypeSignatureDialog(this.signatureList.getSelectedValue());
300 if (addSigDialog.getResult() == BUTTON_PRESSED.OK) {
301 signaturesListModel.removeElementAt(selected);
302 this.signaturesListModel.add(selected, this.addSigDialog.getSignature());
307 private void deleteSigButtonActionPerformed(java.awt.event.ActionEvent evt) {
308 if (this.signatureList.getSelectedIndex() != -1) {
309 signaturesListModel.removeElementAt(this.signatureList.getSelectedIndex());
310 if (!this.signaturesListModel.isEmpty()) {
311 signatureList.setSelectedIndex(0);
313 firePropertyChange(SIG_LIST_CHANGED.toString(), null, null);
317 private void addSigButtonActionPerformed(java.awt.event.ActionEvent evt) {
318 if (evt.getSource().equals(this.addSigButton)) {
319 this.addSigDialog =
new AddFileTypeSignatureDialog();
320 if (addSigDialog.getResult() == AddFileTypeSignatureDialog.BUTTON_PRESSED.OK) {
321 signaturesListModel.addElement(this.addSigDialog.getSignature());
323 firePropertyChange(SIG_LIST_CHANGED.toString(), null, null);
327 private void postHitCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
328 if (evt.getSource().equals(postHitCheckBox)) {
329 this.setNameLabel.setEnabled(postHitCheckBox.isSelected());
330 this.setNameTextField.setEnabled(postHitCheckBox.isSelected());
336 private javax.swing.JButton addSigButton;
337 private javax.swing.JButton deleteSigButton;
338 private javax.swing.JButton editSigButton;
339 private javax.swing.JLabel jLabel1;
340 private javax.swing.JScrollPane jScrollPane1;
341 private javax.swing.JLabel mimeTypeLabel;
342 private javax.swing.JTextField mimeTypeTextField;
343 private javax.swing.JCheckBox postHitCheckBox;
344 private javax.swing.JLabel setNameLabel;
345 private javax.swing.JTextField setNameTextField;
346 private javax.swing.JList<FileType.Signature> signatureList;