Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
AddFileTypePanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2016 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.modules.filetypeid;
20 
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;
29 import static org.sleuthkit.autopsy.modules.filetypeid.AddFileTypePanel.EVENT.SIG_LIST_CHANGED;
32 
36 class AddFileTypePanel extends javax.swing.JPanel {
37 
38  private static final long serialVersionUID = 1L;
39 
40  private AddFileTypeSignatureDialog addSigDialog;
41  private DefaultListModel<FileType.Signature> signaturesListModel;
42 
46  AddFileTypePanel() {
47  initComponents();
48  this.signaturesListModel = new DefaultListModel<>();
49  this.signatureList.setModel(signaturesListModel);
50  this.addTypeListSelectionListener();
51  this.enableButtons();
52  }
53 
54  enum EVENT {
55  SIG_LIST_CHANGED
56  }
57 
63  AddFileTypePanel(FileType toEdit) {
64  this();
65  this.setComponentValues(toEdit);
66  }
67 
73  private void setComponentValues(FileType toEdit) {
74  this.mimeTypeTextField.setText(toEdit.getMimeType());
75  for (Signature sig : toEdit.getSignatures()) {
76  this.signaturesListModel.addElement(sig);
77  }
78  }
79 
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);
98  return null;
99  }
100 
101  if (this.signaturesListModel.isEmpty()) {
102  JOptionPane.showMessageDialog(null,
103  Bundle.AddMimeTypePanel_emptySigList_message(),
104  Bundle.AddMimeTypePanel_emptySigList_title(),
105  JOptionPane.ERROR_MESSAGE);
106 
107  return null;
108  }
109  List<Signature> sigList = new ArrayList<>();
110  for (int i = 0; i < this.signaturesListModel.getSize(); i++) {
111  sigList.add(this.signaturesListModel.elementAt(i));
112  }
113 
114  String setName = "";
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);
121 
122  return null;
123  }
124  setName = this.setNameTextField.getText();
125  }
126  return new FileType(typeName, sigList, this.postHitCheckBox.isSelected(), setName);
127  }
128 
133  private void addTypeListSelectionListener() {
134  this.signatureList.addListSelectionListener(new ListSelectionListener() {
135  @Override
136  public void valueChanged(ListSelectionEvent e) {
137  if (e.getValueIsAdjusting() == false) {
138  enableButtons();
139 
140  }
141  }
142  });
143  }
144 
149  private void enableButtons() {
150  if (signatureList.getSelectedIndex() == -1) {
151  editSigButton.setEnabled(false);
152  deleteSigButton.setEnabled(false);
153  } else {
154  editSigButton.setEnabled(true);
155  deleteSigButton.setEnabled(true);
156  }
157  }
158 
159  boolean hasSignature() {
160  return !this.signaturesListModel.isEmpty();
161  }
162 
168  @SuppressWarnings("unchecked")
169  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
170  private void initComponents() {
171 
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();
183 
184  editSigButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
185  org.openide.awt.Mnemonics.setLocalizedText(editSigButton, org.openide.util.NbBundle.getMessage(AddFileTypePanel.class, "AddFileTypePanel.editSigButton.text")); // NOI18N
186  editSigButton.addActionListener(new java.awt.event.ActionListener() {
187  public void actionPerformed(java.awt.event.ActionEvent evt) {
188  editSigButtonActionPerformed(evt);
189  }
190  });
191 
192  deleteSigButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
193  org.openide.awt.Mnemonics.setLocalizedText(deleteSigButton, org.openide.util.NbBundle.getMessage(AddFileTypePanel.class, "AddFileTypePanel.deleteSigButton.text")); // NOI18N
194  deleteSigButton.addActionListener(new java.awt.event.ActionListener() {
195  public void actionPerformed(java.awt.event.ActionEvent evt) {
196  deleteSigButtonActionPerformed(evt);
197  }
198  });
199 
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")); // NOI18N
202 
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]; }
207  });
208  jScrollPane1.setViewportView(signatureList);
209 
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")); // NOI18N
212 
213  addSigButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
214  org.openide.awt.Mnemonics.setLocalizedText(addSigButton, org.openide.util.NbBundle.getMessage(AddFileTypePanel.class, "AddFileTypePanel.addSigButton.text")); // NOI18N
215  addSigButton.addActionListener(new java.awt.event.ActionListener() {
216  public void actionPerformed(java.awt.event.ActionEvent evt) {
217  addSigButtonActionPerformed(evt);
218  }
219  });
220 
221  org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AddFileTypePanel.class, "AddFileTypePanel.jLabel1.text")); // NOI18N
222 
223  org.openide.awt.Mnemonics.setLocalizedText(postHitCheckBox, org.openide.util.NbBundle.getMessage(AddFileTypePanel.class, "AddFileTypePanel.postHitCheckBox.text")); // NOI18N
224  postHitCheckBox.addActionListener(new java.awt.event.ActionListener() {
225  public void actionPerformed(java.awt.event.ActionEvent evt) {
226  postHitCheckBoxActionPerformed(evt);
227  }
228  });
229 
230  org.openide.awt.Mnemonics.setLocalizedText(setNameLabel, org.openide.util.NbBundle.getMessage(AddFileTypePanel.class, "AddFileTypePanel.setNameLabel.text")); // NOI18N
231  setNameLabel.setEnabled(postHitCheckBox.isSelected());
232 
233  setNameTextField.setText(org.openide.util.NbBundle.getMessage(AddFileTypePanel.class, "AddFileTypePanel.setNameTextField.text")); // NOI18N
234  setNameTextField.setEnabled(postHitCheckBox.isSelected());
235 
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()
241  .addContainerGap()
242  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
243  .addGroup(layout.createSequentialGroup()
244  .addComponent(mimeTypeLabel)
245  .addGap(18, 18, 18)
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()
259  .addGap(28, 28, 28)
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)))
268  .addContainerGap())
269  );
270  layout.setVerticalGroup(
271  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
272  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
273  .addContainerGap()
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))
277  .addGap(3, 3, 3)
278  .addComponent(jLabel1)
279  .addGap(1, 1, 1)
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))
293  );
294  }// </editor-fold>//GEN-END:initComponents
295 
296  private void editSigButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editSigButtonActionPerformed
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());
303  }
304  }
305  }//GEN-LAST:event_editSigButtonActionPerformed
306 
307  private void deleteSigButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteSigButtonActionPerformed
308  if (this.signatureList.getSelectedIndex() != -1) {
309  signaturesListModel.removeElementAt(this.signatureList.getSelectedIndex());
310  if (!this.signaturesListModel.isEmpty()) {
311  signatureList.setSelectedIndex(0);
312  }
313  firePropertyChange(SIG_LIST_CHANGED.toString(), null, null);
314  }
315  }//GEN-LAST:event_deleteSigButtonActionPerformed
316 
317  private void addSigButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addSigButtonActionPerformed
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());
322  }
323  firePropertyChange(SIG_LIST_CHANGED.toString(), null, null);
324  }
325  }//GEN-LAST:event_addSigButtonActionPerformed
326 
327  private void postHitCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_postHitCheckBoxActionPerformed
328  if (evt.getSource().equals(postHitCheckBox)) {
329  this.setNameLabel.setEnabled(postHitCheckBox.isSelected());
330  this.setNameTextField.setEnabled(postHitCheckBox.isSelected());
331  }
332  }//GEN-LAST:event_postHitCheckBoxActionPerformed
333 
334 
335  // Variables declaration - do not modify//GEN-BEGIN:variables
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;
347  // End of variables declaration//GEN-END:variables
348 }

Copyright © 2012-2016 Basis Technology. Generated on: Tue Oct 25 2016
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.