Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
FileTypeIdGlobalSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2014 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.awt.*;
22 import java.beans.PropertyChangeEvent;
23 import java.beans.PropertyChangeListener;
24 import java.io.UnsupportedEncodingException;
25 import java.nio.charset.Charset;
26 import java.util.ArrayList;
27 import java.util.Collections;
28 import java.util.Map;
29 import javax.swing.DefaultComboBoxModel;
30 import javax.swing.DefaultListModel;
31 import javax.swing.JOptionPane;
32 import javax.swing.event.DocumentEvent;
33 import javax.swing.event.DocumentListener;
34 import javax.swing.event.ListSelectionEvent;
35 import javax.swing.event.ListSelectionListener;
36 import javax.xml.bind.DatatypeConverter;
37 import org.openide.util.Exceptions;
38 import org.openide.util.NbBundle;
44 
50 final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPanel implements OptionsPanel {
51 
52  private static final String RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.signatureComboBox.rawItem");
53  private static final String ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.signatureComboBox.asciiItem");
54 
61  private DefaultListModel<String> typesListModel;
62  private Map<String, FileType> fileTypes;
63 
70  // TODO: Disabling during ingest would not be necessary if the file ingest
71  // modules obtained and shared a per data source ingest job snapshot of the
72  // file type definitions.
73  IngestJobEventPropertyChangeListener ingestJobEventsListener;
74 
78  FileTypeIdGlobalSettingsPanel() {
79  initComponents();
80  customizeComponents();
81  addIngestJobEventsListener();
82  }
83 
88  private void customizeComponents() {
89  setFileTypesListModel();
90  setSignatureTypeComboBoxModel();
91  clearTypeDetailsComponents();
92  addTypeListSelectionListener();
93  addTextFieldListeners();
94  }
95 
99  private void setFileTypesListModel() {
100  typesListModel = new DefaultListModel<>();
101  typesList.setModel(typesListModel);
102  }
103 
107  private void setSignatureTypeComboBoxModel() {
108  DefaultComboBoxModel<String> sigTypeComboBoxModel = new DefaultComboBoxModel<>();
109  sigTypeComboBoxModel.addElement(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
110  sigTypeComboBoxModel.addElement(FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM);
111  signatureTypeComboBox.setModel(sigTypeComboBoxModel);
112  signatureTypeComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
113  }
114 
120  private void addTypeListSelectionListener() {
121  typesList.addListSelectionListener(new ListSelectionListener() {
122  @Override
123  public void valueChanged(ListSelectionEvent e) {
124  if (e.getValueIsAdjusting() == false) {
125  if (typesList.getSelectedIndex() == -1) {
126  clearTypeDetailsComponents();
127  } else {
128  populateTypeDetailsComponents();
129  }
130  }
131  }
132  });
133  }
134 
139  private void addTextFieldListeners() {
140  DocumentListener listener = new DocumentListener() {
141  @Override
142  public void changedUpdate(DocumentEvent e) {
143  enableButtons();
144  }
145 
146  @Override
147  public void removeUpdate(DocumentEvent e) {
148  enableButtons();
149  }
150 
151  @Override
152  public void insertUpdate(DocumentEvent e) {
153  enableButtons();
154  }
155  };
156 
157  mimeTypeTextField.getDocument().addDocumentListener(listener);
158  offsetTextField.getDocument().addDocumentListener(listener);
159  signatureTextField.getDocument().addDocumentListener(listener);
160  filesSetNameTextField.getDocument().addDocumentListener(listener);
161  }
162 
169  // TODO: Disabling during ingest would not be necessary if the file ingest
170  // modules obtained and shared a per data source ingest job snapshot of the
171  // file type definitions.
172  private void addIngestJobEventsListener() {
173  ingestJobEventsListener = new IngestJobEventPropertyChangeListener();
174  IngestManager.getInstance().addIngestJobEventListener(ingestJobEventsListener);
175  }
176 
180  private class IngestJobEventPropertyChangeListener implements PropertyChangeListener {
181 
182  @Override
183  public void propertyChange(PropertyChangeEvent evt) {
184  EventQueue.invokeLater(new Runnable() {
185  @Override
186  public void run() {
187  enableButtons();
188  }
189  });
190  }
191  }
192 
197  private void enableButtons() {
198  boolean ingestIsRunning = IngestManager.getInstance().isIngestRunning();
199  newTypeButton.setEnabled(!ingestIsRunning);
200 
201  boolean fileTypeIsSelected = typesList.getSelectedIndex() != -1;
202  deleteTypeButton.setEnabled(!ingestIsRunning && fileTypeIsSelected);
203 
204  boolean requiredFieldsPopulated
205  = !mimeTypeTextField.getText().isEmpty()
206  && !offsetTextField.getText().isEmpty()
207  && !signatureTextField.getText().isEmpty()
208  && (postHitCheckBox.isSelected() ? !filesSetNameTextField.getText().isEmpty() : true);
209  saveTypeButton.setEnabled(!ingestIsRunning && requiredFieldsPopulated);
210 
211  ingestRunningWarningLabel.setVisible(ingestIsRunning);
212  }
213 
217  @Override
218  public void load() {
219  try {
220  fileTypes = UserDefinedFileTypesManager.getInstance().getUserDefinedFileTypes();
221  updateFileTypesListModel();
222  if (!typesListModel.isEmpty()) {
223  typesList.setSelectedIndex(0);
224  }
225  } catch (UserDefinedFileTypesException ex) {
226  JOptionPane.showMessageDialog(null,
227  ex.getLocalizedMessage(),
228  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title"),
229  JOptionPane.ERROR_MESSAGE);
230  fileTypes = Collections.emptyMap();
231  }
232  enableButtons();
233  }
234 
238  private void updateFileTypesListModel() {
239  ArrayList<String> mimeTypes = new ArrayList<>(fileTypes.keySet());
240  Collections.sort(mimeTypes);
241  typesListModel.clear();
242  for (String mimeType : mimeTypes) {
243  typesListModel.addElement(mimeType);
244  }
245  }
246 
251  private void populateTypeDetailsComponents() {
252  String mimeType = typesList.getSelectedValue();
253  FileType fileType = fileTypes.get(mimeType);
254  if (null != fileType) {
255  mimeTypeTextField.setText(fileType.getMimeType());
256  Signature signature = fileType.getSignature();
257  FileType.Signature.Type sigType = signature.getType();
258  signatureTypeComboBox.setSelectedItem(sigType == FileType.Signature.Type.RAW ? FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM);
259  String signatureBytes;
260  if (Signature.Type.RAW == signature.getType()) {
261  signatureBytes = DatatypeConverter.printHexBinary(signature.getSignatureBytes());
262  } else {
263  try {
264  signatureBytes = new String(signature.getSignatureBytes(), "UTF-8");
265  } catch (UnsupportedEncodingException ex) {
266  JOptionPane.showMessageDialog(null,
267  ex.getLocalizedMessage(),
268  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"),
269  JOptionPane.ERROR_MESSAGE);
270  signatureBytes = "";
271  }
272  }
273  signatureTextField.setText(signatureBytes);
274  offsetTextField.setText(Long.toString(signature.getOffset()));
275  postHitCheckBox.setSelected(fileType.alertOnMatch());
276  filesSetNameTextField.setEnabled(postHitCheckBox.isSelected());
277  filesSetNameTextField.setText(fileType.getFilesSetName());
278  }
279  enableButtons();
280  }
281 
286  private void clearTypeDetailsComponents() {
287  typesList.clearSelection();
288  mimeTypeTextField.setText(""); //NON-NLS
289  signatureTypeComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
290  hexPrefixLabel.setVisible(true);
291  signatureTextField.setText("0000"); //NON-NLS
292  offsetTextField.setText(""); //NON-NLS
293  postHitCheckBox.setSelected(false);
294  filesSetNameTextField.setText(""); //NON-NLS
295  filesSetNameTextField.setEnabled(false);
296  enableButtons();
297  }
298 
302  @Override
303  public void store() {
304  try {
305  UserDefinedFileTypesManager.getInstance().setUserDefinedFileTypes(fileTypes);
306  } catch (UserDefinedFileTypesManager.UserDefinedFileTypesException ex) {
307  JOptionPane.showMessageDialog(null,
308  ex.getLocalizedMessage(),
309  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"),
310  JOptionPane.ERROR_MESSAGE);
311  }
312  }
313 
317  @Override
318  public void saveSettings() {
319  store();
320  }
321 
325  @Override
326  @SuppressWarnings("FinalizeDeclaration")
327  protected void finalize() throws Throwable {
328  IngestManager.getInstance().removeIngestJobEventListener(ingestJobEventsListener);
329  super.finalize();
330  }
331 
337  @SuppressWarnings("unchecked")
338  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
339  private void initComponents() {
340 
341  typesScrollPane = new javax.swing.JScrollPane();
342  typesList = new javax.swing.JList<String>();
343  separator = new javax.swing.JSeparator();
344  mimeTypeLabel = new javax.swing.JLabel();
345  mimeTypeTextField = new javax.swing.JTextField();
346  signatureTypeLabel = new javax.swing.JLabel();
347  signatureTextField = new javax.swing.JTextField();
348  offsetLabel = new javax.swing.JLabel();
349  offsetTextField = new javax.swing.JTextField();
350  newTypeButton = new javax.swing.JButton();
351  deleteTypeButton = new javax.swing.JButton();
352  saveTypeButton = new javax.swing.JButton();
353  hexPrefixLabel = new javax.swing.JLabel();
354  signatureTypeComboBox = new javax.swing.JComboBox<String>();
355  signatureLabel = new javax.swing.JLabel();
356  postHitCheckBox = new javax.swing.JCheckBox();
357  filesSetNameLabel = new javax.swing.JLabel();
358  filesSetNameTextField = new javax.swing.JTextField();
359  ingestRunningWarningLabel = new javax.swing.JLabel();
360  jLabel1 = new javax.swing.JLabel();
361  jLabel2 = new javax.swing.JLabel();
362  jLabel3 = new javax.swing.JLabel();
363 
364  setMaximumSize(new java.awt.Dimension(500, 300));
365  setPreferredSize(new java.awt.Dimension(500, 300));
366 
367  typesList.setMaximumSize(new java.awt.Dimension(150, 0));
368  typesList.setMinimumSize(new java.awt.Dimension(150, 0));
369  typesScrollPane.setViewportView(typesList);
370 
371  separator.setOrientation(javax.swing.SwingConstants.VERTICAL);
372 
373  org.openide.awt.Mnemonics.setLocalizedText(mimeTypeLabel, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.mimeTypeLabel.text")); // NOI18N
374 
375  mimeTypeTextField.setText(org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.mimeTypeTextField.text")); // NOI18N
376 
377  org.openide.awt.Mnemonics.setLocalizedText(signatureTypeLabel, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.signatureTypeLabel.text")); // NOI18N
378 
379  signatureTextField.setText(org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.signatureTextField.text")); // NOI18N
380  signatureTextField.addActionListener(new java.awt.event.ActionListener() {
381  public void actionPerformed(java.awt.event.ActionEvent evt) {
382  signatureTextFieldActionPerformed(evt);
383  }
384  });
385 
386  org.openide.awt.Mnemonics.setLocalizedText(offsetLabel, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.offsetLabel.text")); // NOI18N
387 
388  offsetTextField.setText(org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.offsetTextField.text")); // NOI18N
389 
390  org.openide.awt.Mnemonics.setLocalizedText(newTypeButton, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.newTypeButton.text")); // NOI18N
391  newTypeButton.addActionListener(new java.awt.event.ActionListener() {
392  public void actionPerformed(java.awt.event.ActionEvent evt) {
393  newTypeButtonActionPerformed(evt);
394  }
395  });
396 
397  org.openide.awt.Mnemonics.setLocalizedText(deleteTypeButton, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.deleteTypeButton.text")); // NOI18N
398  deleteTypeButton.addActionListener(new java.awt.event.ActionListener() {
399  public void actionPerformed(java.awt.event.ActionEvent evt) {
400  deleteTypeButtonActionPerformed(evt);
401  }
402  });
403 
404  org.openide.awt.Mnemonics.setLocalizedText(saveTypeButton, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.saveTypeButton.text")); // NOI18N
405  saveTypeButton.addActionListener(new java.awt.event.ActionListener() {
406  public void actionPerformed(java.awt.event.ActionEvent evt) {
407  saveTypeButtonActionPerformed(evt);
408  }
409  });
410 
411  org.openide.awt.Mnemonics.setLocalizedText(hexPrefixLabel, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.hexPrefixLabel.text")); // NOI18N
412 
413  signatureTypeComboBox.addActionListener(new java.awt.event.ActionListener() {
414  public void actionPerformed(java.awt.event.ActionEvent evt) {
415  signatureTypeComboBoxActionPerformed(evt);
416  }
417  });
418 
419  org.openide.awt.Mnemonics.setLocalizedText(signatureLabel, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.signatureLabel.text")); // NOI18N
420 
421  org.openide.awt.Mnemonics.setLocalizedText(postHitCheckBox, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.postHitCheckBox.text")); // NOI18N
422  postHitCheckBox.addActionListener(new java.awt.event.ActionListener() {
423  public void actionPerformed(java.awt.event.ActionEvent evt) {
424  postHitCheckBoxActionPerformed(evt);
425  }
426  });
427 
428  org.openide.awt.Mnemonics.setLocalizedText(filesSetNameLabel, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.filesSetNameLabel.text")); // NOI18N
429 
430  filesSetNameTextField.setText(org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.filesSetNameTextField.text")); // NOI18N
431 
432  ingestRunningWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/filetypeid/warning16.png"))); // NOI18N
433  org.openide.awt.Mnemonics.setLocalizedText(ingestRunningWarningLabel, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.ingestRunningWarningLabel.text")); // NOI18N
434 
435  jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
436  org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel1.text")); // NOI18N
437 
438  org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel2.text")); // NOI18N
439 
440  org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.jLabel3.text")); // NOI18N
441 
442  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
443  this.setLayout(layout);
444  layout.setHorizontalGroup(
445  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
446  .addGroup(layout.createSequentialGroup()
447  .addContainerGap()
448  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
449  .addGroup(layout.createSequentialGroup()
450  .addComponent(ingestRunningWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
451  .addGap(30, 30, 30))
452  .addGroup(layout.createSequentialGroup()
453  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
454  .addComponent(jLabel2)
455  .addGroup(layout.createSequentialGroup()
456  .addGap(10, 10, 10)
457  .addComponent(deleteTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
458  .addGap(18, 18, 18)
459  .addComponent(newTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
460  .addComponent(typesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
461  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
462  .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE)
463  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
464  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
465  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
466  .addGroup(layout.createSequentialGroup()
467  .addComponent(mimeTypeLabel)
468  .addGap(30, 30, 30)
469  .addComponent(mimeTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
470  .addComponent(postHitCheckBox)
471  .addGroup(layout.createSequentialGroup()
472  .addComponent(signatureTypeLabel)
473  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
474  .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
475  .addGroup(layout.createSequentialGroup()
476  .addComponent(signatureLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
477  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
478  .addComponent(hexPrefixLabel)
479  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
480  .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE))
481  .addGroup(layout.createSequentialGroup()
482  .addComponent(offsetLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
483  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
484  .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE))
485  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
486  .addGap(21, 21, 21)
487  .addComponent(filesSetNameLabel)
488  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
489  .addComponent(filesSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)))
490  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
491  .addComponent(saveTypeButton)
492  .addGap(8, 8, 8)))
493  .addContainerGap())
494  .addGroup(layout.createSequentialGroup()
495  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
496  .addComponent(jLabel1)
497  .addComponent(jLabel3))
498  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
499  );
500  layout.setVerticalGroup(
501  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
502  .addGroup(layout.createSequentialGroup()
503  .addComponent(jLabel1)
504  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
505  .addComponent(jLabel3)
506  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
507  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
508  .addGroup(layout.createSequentialGroup()
509  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
510  .addGroup(layout.createSequentialGroup()
511  .addComponent(jLabel2)
512  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
513  .addComponent(typesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 177, Short.MAX_VALUE)
514  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
515  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
516  .addComponent(deleteTypeButton)
517  .addComponent(newTypeButton)))
518  .addComponent(separator))
519  .addGap(18, 18, 18)
520  .addComponent(ingestRunningWarningLabel))
521  .addGroup(layout.createSequentialGroup()
522  .addGap(24, 24, 24)
523  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
524  .addComponent(mimeTypeLabel)
525  .addComponent(mimeTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
526  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
527  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
528  .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
529  .addComponent(signatureTypeLabel))
530  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
531  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
532  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
533  .addComponent(hexPrefixLabel)
534  .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
535  .addComponent(signatureLabel))
536  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
537  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
538  .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
539  .addComponent(offsetLabel))
540  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
541  .addComponent(postHitCheckBox)
542  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
543  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
544  .addComponent(filesSetNameLabel)
545  .addComponent(filesSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
546  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
547  .addComponent(saveTypeButton)
548  .addGap(0, 0, Short.MAX_VALUE))))
549  );
550 
551  layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteTypeButton, newTypeButton, saveTypeButton});
552 
553  }// </editor-fold>//GEN-END:initComponents
554 
555  private void newTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newTypeButtonActionPerformed
556  clearTypeDetailsComponents();
557  }//GEN-LAST:event_newTypeButtonActionPerformed
558 
559  private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteTypeButtonActionPerformed
560  String typeName = typesList.getSelectedValue();
561  fileTypes.remove(typeName);
562  updateFileTypesListModel();
563  if (!typesListModel.isEmpty()) {
564  typesList.setSelectedIndex(0);
565  }
566  }//GEN-LAST:event_deleteTypeButtonActionPerformed
567 
568  private void saveTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveTypeButtonActionPerformed
572  String typeName = mimeTypeTextField.getText();
573  if (typeName.isEmpty()) {
574  JOptionPane.showMessageDialog(null,
575  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.message"),
576  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.title"),
577  JOptionPane.ERROR_MESSAGE);
578  return;
579  }
580 
584  FileType.Signature.Type sigType = signatureTypeComboBox.getSelectedItem() == FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM ? FileType.Signature.Type.RAW : FileType.Signature.Type.ASCII;
585 
589  String sigString = signatureTextField.getText();
590  if (sigString.isEmpty()) {
591  JOptionPane.showMessageDialog(null,
592  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.message"),
593  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.title"),
594  JOptionPane.ERROR_MESSAGE);
595  return;
596  }
597  byte[] signatureBytes;
598  if (FileType.Signature.Type.RAW == sigType) {
599  try {
600  signatureBytes = DatatypeConverter.parseHexBinary(sigString);
601  } catch (IllegalArgumentException ex) {
602  JOptionPane.showMessageDialog(null,
603  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidRawSignatureBytes.message"),
604  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignatureBytes.title"),
605  JOptionPane.ERROR_MESSAGE);
606  return;
607  }
608  } else {
609  signatureBytes = sigString.getBytes(Charset.forName("UTF-8"));
610  }
611 
615  long offset;
616  try {
617  offset = Long.parseUnsignedLong(offsetTextField.getText());
618  } catch (NumberFormatException ex) {
619  JOptionPane.showMessageDialog(null,
620  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.message"),
621  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.title"),
622  JOptionPane.ERROR_MESSAGE);
623  return;
624  }
625 
629  String filesSetName = filesSetNameTextField.getText();
630  if (postHitCheckBox.isSelected() && filesSetName.isEmpty()) {
631  JOptionPane.showMessageDialog(null,
632  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message"),
633  NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class, "FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.title"),
634  JOptionPane.ERROR_MESSAGE);
635  return;
636  }
637 
641  FileType.Signature signature = new FileType.Signature(signatureBytes, offset, sigType);
642  FileType fileType = new FileType(typeName, signature, filesSetName, postHitCheckBox.isSelected());
643  fileTypes.put(typeName, fileType);
644  updateFileTypesListModel();
645  typesList.setSelectedValue(fileType.getMimeType(), true);
646  }//GEN-LAST:event_saveTypeButtonActionPerformed
647 
648  private void postHitCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_postHitCheckBoxActionPerformed
649  filesSetNameTextField.setEnabled(postHitCheckBox.isSelected());
650  enableButtons();
651  }//GEN-LAST:event_postHitCheckBoxActionPerformed
652 
653  private void signatureTypeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_signatureTypeComboBoxActionPerformed
654  if (signatureTypeComboBox.getSelectedItem() == FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM) {
655  hexPrefixLabel.setVisible(true);
656  signatureTextField.setText("0000");
657  }
658  else {
659  hexPrefixLabel.setVisible(false);
660  signatureTextField.setText("");
661  }
662  }//GEN-LAST:event_signatureTypeComboBoxActionPerformed
663 
664  private void signatureTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_signatureTextFieldActionPerformed
665  // TODO add your handling code here:
666  }//GEN-LAST:event_signatureTextFieldActionPerformed
667 
668  // Variables declaration - do not modify//GEN-BEGIN:variables
669  private javax.swing.JButton deleteTypeButton;
670  private javax.swing.JLabel filesSetNameLabel;
671  private javax.swing.JTextField filesSetNameTextField;
672  private javax.swing.JLabel hexPrefixLabel;
673  private javax.swing.JLabel ingestRunningWarningLabel;
674  private javax.swing.JLabel jLabel1;
675  private javax.swing.JLabel jLabel2;
676  private javax.swing.JLabel jLabel3;
677  private javax.swing.JLabel mimeTypeLabel;
678  private javax.swing.JTextField mimeTypeTextField;
679  private javax.swing.JButton newTypeButton;
680  private javax.swing.JLabel offsetLabel;
681  private javax.swing.JTextField offsetTextField;
682  private javax.swing.JCheckBox postHitCheckBox;
683  private javax.swing.JButton saveTypeButton;
684  private javax.swing.JSeparator separator;
685  private javax.swing.JLabel signatureLabel;
686  private javax.swing.JTextField signatureTextField;
687  private javax.swing.JComboBox<String> signatureTypeComboBox;
688  private javax.swing.JLabel signatureTypeLabel;
689  private javax.swing.JList<String> typesList;
690  private javax.swing.JScrollPane typesScrollPane;
691  // End of variables declaration//GEN-END:variables
692 
693 }
static synchronized IngestManager getInstance()

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