19 package org.sleuthkit.autopsy.modules.filetypeid;
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;
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;
50 final class FileTypeIdGlobalSettingsPanel
extends IngestModuleGlobalSettingsPanel implements OptionsPanel {
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");
61 private DefaultListModel<String> typesListModel;
62 private Map<String, FileType> fileTypes;
73 IngestJobEventPropertyChangeListener ingestJobEventsListener;
78 FileTypeIdGlobalSettingsPanel() {
80 customizeComponents();
81 addIngestJobEventsListener();
88 private void customizeComponents() {
89 setFileTypesListModel();
90 setSignatureTypeComboBoxModel();
91 clearTypeDetailsComponents();
92 addTypeListSelectionListener();
93 addTextFieldListeners();
99 private void setFileTypesListModel() {
100 typesListModel =
new DefaultListModel<>();
101 typesList.setModel(typesListModel);
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);
120 private void addTypeListSelectionListener() {
121 typesList.addListSelectionListener(
new ListSelectionListener() {
123 public void valueChanged(ListSelectionEvent e) {
124 if (e.getValueIsAdjusting() ==
false) {
125 if (typesList.getSelectedIndex() == -1) {
126 clearTypeDetailsComponents();
128 populateTypeDetailsComponents();
139 private void addTextFieldListeners() {
140 DocumentListener listener =
new DocumentListener() {
142 public void changedUpdate(DocumentEvent e) {
147 public void removeUpdate(DocumentEvent e) {
152 public void insertUpdate(DocumentEvent e) {
157 mimeTypeTextField.getDocument().addDocumentListener(listener);
158 offsetTextField.getDocument().addDocumentListener(listener);
159 signatureTextField.getDocument().addDocumentListener(listener);
160 filesSetNameTextField.getDocument().addDocumentListener(listener);
172 private void addIngestJobEventsListener() {
173 ingestJobEventsListener =
new IngestJobEventPropertyChangeListener();
174 IngestManager.getInstance().addIngestJobEventListener(ingestJobEventsListener);
184 EventQueue.invokeLater(
new Runnable() {
197 private void enableButtons() {
199 newTypeButton.setEnabled(!ingestIsRunning);
201 boolean fileTypeIsSelected = typesList.getSelectedIndex() != -1;
202 deleteTypeButton.setEnabled(!ingestIsRunning && fileTypeIsSelected);
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);
211 ingestRunningWarningLabel.setVisible(ingestIsRunning);
220 fileTypes = UserDefinedFileTypesManager.getInstance().getUserDefinedFileTypes();
221 updateFileTypesListModel();
222 if (!typesListModel.isEmpty()) {
223 typesList.setSelectedIndex(0);
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();
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);
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());
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);
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());
286 private void clearTypeDetailsComponents() {
287 typesList.clearSelection();
288 mimeTypeTextField.setText(
"");
289 signatureTypeComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
290 hexPrefixLabel.setVisible(
true);
291 signatureTextField.setText(
"0000");
292 offsetTextField.setText(
"");
293 postHitCheckBox.setSelected(
false);
294 filesSetNameTextField.setText(
"");
295 filesSetNameTextField.setEnabled(
false);
303 public void store() {
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);
318 public void saveSettings() {
326 @SuppressWarnings(
"FinalizeDeclaration")
327 protected
void finalize() throws Throwable {
328 IngestManager.getInstance().removeIngestJobEventListener(ingestJobEventsListener);
337 @SuppressWarnings(
"unchecked")
339 private
void initComponents() {
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();
364 setMaximumSize(
new java.awt.Dimension(500, 300));
365 setPreferredSize(
new java.awt.Dimension(500, 300));
367 typesList.setMaximumSize(
new java.awt.Dimension(150, 0));
368 typesList.setMinimumSize(
new java.awt.Dimension(150, 0));
369 typesScrollPane.setViewportView(typesList);
371 separator.setOrientation(javax.swing.SwingConstants.VERTICAL);
373 org.openide.awt.Mnemonics.setLocalizedText(mimeTypeLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.mimeTypeLabel.text"));
375 mimeTypeTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.mimeTypeTextField.text"));
377 org.openide.awt.Mnemonics.setLocalizedText(signatureTypeLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureTypeLabel.text"));
379 signatureTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureTextField.text"));
380 signatureTextField.addActionListener(
new java.awt.event.ActionListener() {
381 public void actionPerformed(java.awt.event.ActionEvent evt) {
382 signatureTextFieldActionPerformed(evt);
386 org.openide.awt.Mnemonics.setLocalizedText(offsetLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.offsetLabel.text"));
388 offsetTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.offsetTextField.text"));
390 org.openide.awt.Mnemonics.setLocalizedText(newTypeButton,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.newTypeButton.text"));
391 newTypeButton.addActionListener(
new java.awt.event.ActionListener() {
392 public void actionPerformed(java.awt.event.ActionEvent evt) {
393 newTypeButtonActionPerformed(evt);
397 org.openide.awt.Mnemonics.setLocalizedText(deleteTypeButton,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.deleteTypeButton.text"));
398 deleteTypeButton.addActionListener(
new java.awt.event.ActionListener() {
399 public void actionPerformed(java.awt.event.ActionEvent evt) {
400 deleteTypeButtonActionPerformed(evt);
404 org.openide.awt.Mnemonics.setLocalizedText(saveTypeButton,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.saveTypeButton.text"));
405 saveTypeButton.addActionListener(
new java.awt.event.ActionListener() {
406 public void actionPerformed(java.awt.event.ActionEvent evt) {
407 saveTypeButtonActionPerformed(evt);
411 org.openide.awt.Mnemonics.setLocalizedText(hexPrefixLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.hexPrefixLabel.text"));
413 signatureTypeComboBox.addActionListener(
new java.awt.event.ActionListener() {
414 public void actionPerformed(java.awt.event.ActionEvent evt) {
415 signatureTypeComboBoxActionPerformed(evt);
419 org.openide.awt.Mnemonics.setLocalizedText(signatureLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureLabel.text"));
421 org.openide.awt.Mnemonics.setLocalizedText(postHitCheckBox,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.postHitCheckBox.text"));
422 postHitCheckBox.addActionListener(
new java.awt.event.ActionListener() {
423 public void actionPerformed(java.awt.event.ActionEvent evt) {
424 postHitCheckBoxActionPerformed(evt);
428 org.openide.awt.Mnemonics.setLocalizedText(filesSetNameLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.filesSetNameLabel.text"));
430 filesSetNameTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.filesSetNameTextField.text"));
432 ingestRunningWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/filetypeid/warning16.png")));
433 org.openide.awt.Mnemonics.setLocalizedText(ingestRunningWarningLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.ingestRunningWarningLabel.text"));
435 jLabel1.setFont(
new java.awt.Font(
"Tahoma", 1, 11));
436 org.openide.awt.Mnemonics.setLocalizedText(jLabel1,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.jLabel1.text"));
438 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.jLabel2.text"));
440 org.openide.awt.Mnemonics.setLocalizedText(jLabel3,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.jLabel3.text"));
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()
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)
452 .addGroup(layout.createSequentialGroup()
453 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
454 .addComponent(jLabel2)
455 .addGroup(layout.createSequentialGroup()
457 .addComponent(deleteTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
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)
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()
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)
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))))
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))
520 .addComponent(ingestRunningWarningLabel))
521 .addGroup(layout.createSequentialGroup()
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))))
551 layout.linkSize(javax.swing.SwingConstants.VERTICAL,
new java.awt.Component[] {deleteTypeButton, newTypeButton, saveTypeButton});
555 private void newTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {
556 clearTypeDetailsComponents();
559 private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {
560 String typeName = typesList.getSelectedValue();
561 fileTypes.remove(typeName);
562 updateFileTypesListModel();
563 if (!typesListModel.isEmpty()) {
564 typesList.setSelectedIndex(0);
568 private void saveTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {
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);
584 FileType.Signature.Type sigType = signatureTypeComboBox.getSelectedItem() == FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM ? FileType.Signature.Type.RAW : FileType.Signature.Type.ASCII;
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);
597 byte[] signatureBytes;
598 if (FileType.Signature.Type.RAW == sigType) {
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);
609 signatureBytes = sigString.getBytes(Charset.forName(
"UTF-8"));
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);
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);
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);
648 private void postHitCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
649 filesSetNameTextField.setEnabled(postHitCheckBox.isSelected());
653 private void signatureTypeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
654 if (signatureTypeComboBox.getSelectedItem() == FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM) {
655 hexPrefixLabel.setVisible(
true);
656 signatureTextField.setText(
"0000");
659 hexPrefixLabel.setVisible(
false);
660 signatureTextField.setText(
"");
664 private void signatureTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
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;
void propertyChange(PropertyChangeEvent evt)
static synchronized IngestManager getInstance()
boolean isIngestRunning()