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.Collections;
27 import javax.swing.DefaultComboBoxModel;
28 import javax.swing.DefaultListModel;
29 import javax.swing.JOptionPane;
30 import javax.swing.event.DocumentEvent;
31 import javax.swing.event.DocumentListener;
32 import javax.swing.event.ListSelectionEvent;
33 import javax.swing.event.ListSelectionListener;
34 import javax.xml.bind.DatatypeConverter;
35 import org.openide.util.NbBundle;
47 final class FileTypeIdGlobalSettingsPanel
extends IngestModuleGlobalSettingsPanel implements OptionsPanel {
49 private static final String RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureComboBox.rawItem");
50 private static final String ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureComboBox.asciiItem");
52 private static final String START_OFFSET_RELATIVE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.offsetComboBox.startItem");
53 private static final String END_OFFSET_RELATIVE_COMBO_BOX_ITEM = NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.offsetComboBox.endItem");
60 private DefaultListModel<FileType> typesListModel;
61 private java.util.List<FileType> fileTypes;
72 IngestJobEventPropertyChangeListener ingestJobEventsListener;
77 FileTypeIdGlobalSettingsPanel() {
79 customizeComponents();
80 addIngestJobEventsListener();
87 @NbBundle.Messages({
"FileTypeIdGlobalSettingsPanel.Title=Global File Type Identification Settings"})
88 private void customizeComponents() {
89 setName(Bundle.FileTypeIdGlobalSettingsPanel_Title());
90 setFileTypesListModel();
91 setSignatureTypeComboBoxModel();
92 setOffsetRealtiveToComboBoxModel();
93 clearTypeDetailsComponents();
94 addTypeListSelectionListener();
95 addTextFieldListeners();
101 private void setFileTypesListModel() {
102 typesListModel =
new DefaultListModel<>();
103 typesList.setModel(typesListModel);
109 private void setSignatureTypeComboBoxModel() {
110 DefaultComboBoxModel<String> sigTypeComboBoxModel =
new DefaultComboBoxModel<>();
111 sigTypeComboBoxModel.addElement(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
112 sigTypeComboBoxModel.addElement(FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM);
113 signatureTypeComboBox.setModel(sigTypeComboBoxModel);
114 signatureTypeComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
120 private void setOffsetRealtiveToComboBoxModel() {
121 DefaultComboBoxModel<String> offsetRelComboBoxModel =
new DefaultComboBoxModel<>();
122 offsetRelComboBoxModel.addElement(FileTypeIdGlobalSettingsPanel.START_OFFSET_RELATIVE_COMBO_BOX_ITEM);
123 offsetRelComboBoxModel.addElement(FileTypeIdGlobalSettingsPanel.END_OFFSET_RELATIVE_COMBO_BOX_ITEM);
124 offsetRelativeToComboBox.setModel(offsetRelComboBoxModel);
125 offsetRelativeToComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.START_OFFSET_RELATIVE_COMBO_BOX_ITEM);
133 private void addTypeListSelectionListener() {
134 typesList.addListSelectionListener(
new ListSelectionListener() {
136 public void valueChanged(ListSelectionEvent e) {
137 if (e.getValueIsAdjusting() ==
false) {
138 if (typesList.getSelectedIndex() == -1) {
139 clearTypeDetailsComponents();
141 populateTypeDetailsComponents();
152 private void addTextFieldListeners() {
153 DocumentListener listener =
new DocumentListener() {
155 public void changedUpdate(DocumentEvent e) {
160 public void removeUpdate(DocumentEvent e) {
165 public void insertUpdate(DocumentEvent e) {
170 mimeTypeTextField.getDocument().addDocumentListener(listener);
171 offsetTextField.getDocument().addDocumentListener(listener);
172 signatureTextField.getDocument().addDocumentListener(listener);
173 filesSetNameTextField.getDocument().addDocumentListener(listener);
185 private void addIngestJobEventsListener() {
186 ingestJobEventsListener =
new IngestJobEventPropertyChangeListener();
187 IngestManager.getInstance().addIngestJobEventListener(ingestJobEventsListener);
197 EventQueue.invokeLater(
new Runnable() {
210 private void enableButtons() {
212 newTypeButton.setEnabled(!ingestIsRunning);
214 boolean fileTypeIsSelected = typesList.getSelectedIndex() != -1;
215 deleteTypeButton.setEnabled(!ingestIsRunning && fileTypeIsSelected);
217 boolean requiredFieldsPopulated
218 = !mimeTypeTextField.getText().isEmpty()
219 && !offsetTextField.getText().isEmpty()
220 && !signatureTextField.getText().isEmpty()
221 && (postHitCheckBox.isSelected() ? !filesSetNameTextField.getText().isEmpty() :
true);
222 saveTypeButton.setEnabled(!ingestIsRunning && requiredFieldsPopulated);
224 ingestRunningWarningLabel.setVisible(ingestIsRunning);
233 fileTypes = UserDefinedFileTypesManager.getInstance().getUserDefinedFileTypes();
234 updateFileTypesListModel();
235 if (!typesListModel.isEmpty()) {
236 typesList.setSelectedIndex(0);
238 }
catch (UserDefinedFileTypesException ex) {
239 JOptionPane.showMessageDialog(null,
240 ex.getLocalizedMessage(),
241 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.loadFailed.title"),
242 JOptionPane.ERROR_MESSAGE);
243 fileTypes = Collections.emptyList();
251 private void updateFileTypesListModel() {
252 typesListModel.clear();
253 for (FileType fileType : fileTypes) {
254 typesListModel.addElement(fileType);
263 private void populateTypeDetailsComponents() {
264 FileType fileType = typesList.getSelectedValue();
265 if (null != fileType) {
266 mimeTypeTextField.setText(fileType.getMimeType());
267 mimeTypeTextField.setEditable(
false);
268 Signature signature = fileType.getSignature();
269 FileType.Signature.Type sigType = signature.getType();
270 signatureTypeComboBox.setSelectedItem(sigType == FileType.Signature.Type.RAW ? FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.ASCII_SIGNATURE_TYPE_COMBO_BOX_ITEM);
271 String signatureBytes;
272 if (Signature.Type.RAW == signature.getType()) {
273 signatureBytes = DatatypeConverter.printHexBinary(signature.getSignatureBytes());
276 signatureBytes =
new String(signature.getSignatureBytes(),
"UTF-8");
277 }
catch (UnsupportedEncodingException ex) {
278 JOptionPane.showMessageDialog(null,
279 ex.getLocalizedMessage(),
280 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"),
281 JOptionPane.ERROR_MESSAGE);
285 signatureTextField.setText(signatureBytes);
286 offsetRelativeToComboBox.setSelectedItem(signature.isRelativeToStart() ? FileTypeIdGlobalSettingsPanel.START_OFFSET_RELATIVE_COMBO_BOX_ITEM : FileTypeIdGlobalSettingsPanel.END_OFFSET_RELATIVE_COMBO_BOX_ITEM);
287 offsetTextField.setText(Long.toString(signature.getOffset()));
288 postHitCheckBox.setSelected(fileType.alertOnMatch());
289 filesSetNameTextField.setEnabled(postHitCheckBox.isSelected());
290 filesSetNameTextField.setText(fileType.getFilesSetName());
299 private void clearTypeDetailsComponents() {
300 typesList.clearSelection();
301 mimeTypeTextField.setText(
"");
302 mimeTypeTextField.setEditable(
true);
303 signatureTypeComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM);
304 hexPrefixLabel.setVisible(
true);
305 signatureTextField.setText(
"0000");
306 offsetRelativeToComboBox.setSelectedItem(FileTypeIdGlobalSettingsPanel.START_OFFSET_RELATIVE_COMBO_BOX_ITEM);
307 offsetTextField.setText(
"");
308 postHitCheckBox.setSelected(
false);
309 filesSetNameTextField.setText(
"");
310 filesSetNameTextField.setEnabled(
false);
318 public void store() {
320 UserDefinedFileTypesManager.getInstance().setUserDefinedFileTypes(fileTypes);
321 }
catch (UserDefinedFileTypesManager.UserDefinedFileTypesException ex) {
322 JOptionPane.showMessageDialog(null,
323 ex.getLocalizedMessage(),
324 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.storeFailed.title"),
325 JOptionPane.ERROR_MESSAGE);
333 public void saveSettings() {
341 @SuppressWarnings(
"FinalizeDeclaration")
342 protected
void finalize() throws Throwable {
343 IngestManager.getInstance().removeIngestJobEventListener(ingestJobEventsListener);
352 @SuppressWarnings(
"unchecked")
354 private
void initComponents() {
356 typesScrollPane =
new javax.swing.JScrollPane();
357 typesList =
new javax.swing.JList<FileType>();
358 separator =
new javax.swing.JSeparator();
359 mimeTypeLabel =
new javax.swing.JLabel();
360 mimeTypeTextField =
new javax.swing.JTextField();
361 signatureTypeLabel =
new javax.swing.JLabel();
362 signatureTextField =
new javax.swing.JTextField();
363 offsetLabel =
new javax.swing.JLabel();
364 offsetTextField =
new javax.swing.JTextField();
365 newTypeButton =
new javax.swing.JButton();
366 deleteTypeButton =
new javax.swing.JButton();
367 saveTypeButton =
new javax.swing.JButton();
368 hexPrefixLabel =
new javax.swing.JLabel();
369 signatureTypeComboBox =
new javax.swing.JComboBox<String>();
370 signatureLabel =
new javax.swing.JLabel();
371 postHitCheckBox =
new javax.swing.JCheckBox();
372 filesSetNameLabel =
new javax.swing.JLabel();
373 filesSetNameTextField =
new javax.swing.JTextField();
374 ingestRunningWarningLabel =
new javax.swing.JLabel();
375 jLabel2 =
new javax.swing.JLabel();
376 jLabel3 =
new javax.swing.JLabel();
377 offsetRelativeToComboBox =
new javax.swing.JComboBox<String>();
378 offsetRelativeToLabel =
new javax.swing.JLabel();
380 setMaximumSize(
new java.awt.Dimension(500, 300));
381 setPreferredSize(
new java.awt.Dimension(500, 300));
383 typesList.setFont(typesList.getFont().deriveFont(typesList.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
384 typesList.setMaximumSize(
new java.awt.Dimension(150, 0));
385 typesList.setMinimumSize(
new java.awt.Dimension(150, 0));
386 typesScrollPane.setViewportView(typesList);
388 separator.setOrientation(javax.swing.SwingConstants.VERTICAL);
390 mimeTypeLabel.setFont(mimeTypeLabel.getFont().deriveFont(mimeTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
391 org.openide.awt.Mnemonics.setLocalizedText(mimeTypeLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.mimeTypeLabel.text"));
393 mimeTypeTextField.setFont(mimeTypeTextField.getFont().deriveFont(mimeTypeTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
394 mimeTypeTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.mimeTypeTextField.text"));
396 signatureTypeLabel.setFont(signatureTypeLabel.getFont().deriveFont(signatureTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
397 org.openide.awt.Mnemonics.setLocalizedText(signatureTypeLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureTypeLabel.text"));
399 signatureTextField.setFont(signatureTextField.getFont().deriveFont(signatureTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
400 signatureTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureTextField.text"));
401 signatureTextField.addActionListener(
new java.awt.event.ActionListener() {
402 public void actionPerformed(java.awt.event.ActionEvent evt) {
403 signatureTextFieldActionPerformed(evt);
407 offsetLabel.setFont(offsetLabel.getFont().deriveFont(offsetLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
408 org.openide.awt.Mnemonics.setLocalizedText(offsetLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.offsetLabel.text"));
410 offsetTextField.setFont(offsetTextField.getFont().deriveFont(offsetTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
411 offsetTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.offsetTextField.text"));
413 newTypeButton.setFont(newTypeButton.getFont().deriveFont(newTypeButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
414 org.openide.awt.Mnemonics.setLocalizedText(newTypeButton,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.newTypeButton.text"));
415 newTypeButton.addActionListener(
new java.awt.event.ActionListener() {
416 public void actionPerformed(java.awt.event.ActionEvent evt) {
417 newTypeButtonActionPerformed(evt);
421 deleteTypeButton.setFont(deleteTypeButton.getFont().deriveFont(deleteTypeButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
422 org.openide.awt.Mnemonics.setLocalizedText(deleteTypeButton,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.deleteTypeButton.text"));
423 deleteTypeButton.addActionListener(
new java.awt.event.ActionListener() {
424 public void actionPerformed(java.awt.event.ActionEvent evt) {
425 deleteTypeButtonActionPerformed(evt);
429 saveTypeButton.setFont(saveTypeButton.getFont().deriveFont(saveTypeButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
430 org.openide.awt.Mnemonics.setLocalizedText(saveTypeButton,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.saveTypeButton.text"));
431 saveTypeButton.addActionListener(
new java.awt.event.ActionListener() {
432 public void actionPerformed(java.awt.event.ActionEvent evt) {
433 saveTypeButtonActionPerformed(evt);
437 hexPrefixLabel.setFont(hexPrefixLabel.getFont().deriveFont(hexPrefixLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
438 org.openide.awt.Mnemonics.setLocalizedText(hexPrefixLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.hexPrefixLabel.text"));
440 signatureTypeComboBox.setFont(signatureTypeComboBox.getFont().deriveFont(signatureTypeComboBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
441 signatureTypeComboBox.addActionListener(
new java.awt.event.ActionListener() {
442 public void actionPerformed(java.awt.event.ActionEvent evt) {
443 signatureTypeComboBoxActionPerformed(evt);
447 signatureLabel.setFont(signatureLabel.getFont().deriveFont(signatureLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
448 org.openide.awt.Mnemonics.setLocalizedText(signatureLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.signatureLabel.text"));
450 postHitCheckBox.setFont(postHitCheckBox.getFont().deriveFont(postHitCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
451 org.openide.awt.Mnemonics.setLocalizedText(postHitCheckBox,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.postHitCheckBox.text"));
452 postHitCheckBox.addActionListener(
new java.awt.event.ActionListener() {
453 public void actionPerformed(java.awt.event.ActionEvent evt) {
454 postHitCheckBoxActionPerformed(evt);
458 filesSetNameLabel.setFont(filesSetNameLabel.getFont().deriveFont(filesSetNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
459 org.openide.awt.Mnemonics.setLocalizedText(filesSetNameLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.filesSetNameLabel.text"));
461 filesSetNameTextField.setFont(filesSetNameTextField.getFont().deriveFont(filesSetNameTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
462 filesSetNameTextField.setText(
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.filesSetNameTextField.text"));
464 ingestRunningWarningLabel.setFont(ingestRunningWarningLabel.getFont().deriveFont(ingestRunningWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
465 ingestRunningWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/filetypeid/warning16.png")));
466 org.openide.awt.Mnemonics.setLocalizedText(ingestRunningWarningLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.ingestRunningWarningLabel.text"));
468 jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
469 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.jLabel2.text"));
471 jLabel3.setFont(jLabel3.getFont().deriveFont(jLabel3.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
472 org.openide.awt.Mnemonics.setLocalizedText(jLabel3,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.jLabel3.text"));
474 offsetRelativeToComboBox.setFont(offsetRelativeToComboBox.getFont().deriveFont(offsetRelativeToComboBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
476 offsetRelativeToLabel.setFont(offsetRelativeToLabel.getFont().deriveFont(offsetRelativeToLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
477 org.openide.awt.Mnemonics.setLocalizedText(offsetRelativeToLabel,
org.openide.util.NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.offsetRelativeToLabel.text"));
479 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
480 this.setLayout(layout);
481 layout.setHorizontalGroup(
482 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
483 .addGroup(layout.createSequentialGroup()
485 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
486 .addGroup(layout.createSequentialGroup()
487 .addComponent(ingestRunningWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
489 .addGroup(layout.createSequentialGroup()
490 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
491 .addGroup(layout.createSequentialGroup()
492 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
493 .addComponent(jLabel2)
494 .addGroup(layout.createSequentialGroup()
496 .addComponent(deleteTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
498 .addComponent(newTypeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
499 .addComponent(typesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
500 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
501 .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 7, javax.swing.GroupLayout.PREFERRED_SIZE)
502 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
503 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
504 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
505 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
507 .addComponent(filesSetNameLabel)
508 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
509 .addComponent(filesSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE))
510 .addGroup(layout.createSequentialGroup()
511 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
512 .addGroup(layout.createSequentialGroup()
513 .addComponent(mimeTypeLabel)
515 .addComponent(mimeTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
516 .addComponent(postHitCheckBox)
517 .addGroup(layout.createSequentialGroup()
518 .addComponent(signatureTypeLabel)
519 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
520 .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
521 .addGroup(layout.createSequentialGroup()
522 .addComponent(signatureLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
523 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
524 .addComponent(hexPrefixLabel)
525 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
526 .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE))
527 .addGroup(layout.createSequentialGroup()
528 .addComponent(offsetLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
529 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
530 .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)))
532 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
533 .addComponent(saveTypeButton)
535 .addGroup(layout.createSequentialGroup()
536 .addComponent(offsetRelativeToLabel)
537 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
538 .addComponent(offsetRelativeToComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
539 .addComponent(jLabel3))
540 .addContainerGap(28, Short.MAX_VALUE))))
542 layout.setVerticalGroup(
543 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
544 .addGroup(layout.createSequentialGroup()
546 .addComponent(jLabel3)
547 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
548 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
549 .addGroup(layout.createSequentialGroup()
550 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
551 .addGroup(layout.createSequentialGroup()
552 .addComponent(jLabel2)
553 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
554 .addComponent(typesScrollPane)
555 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
556 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
557 .addComponent(deleteTypeButton)
558 .addComponent(newTypeButton)))
559 .addComponent(separator))
561 .addComponent(ingestRunningWarningLabel))
562 .addGroup(layout.createSequentialGroup()
564 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
565 .addComponent(mimeTypeLabel)
566 .addComponent(mimeTypeTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
567 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
568 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
569 .addComponent(signatureTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
570 .addComponent(signatureTypeLabel))
571 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
572 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
573 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
574 .addComponent(hexPrefixLabel)
575 .addComponent(signatureTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
576 .addComponent(signatureLabel))
577 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
578 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
579 .addComponent(offsetLabel)
580 .addComponent(offsetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
581 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
582 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
583 .addComponent(offsetRelativeToComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
584 .addComponent(offsetRelativeToLabel))
586 .addComponent(postHitCheckBox)
587 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
588 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
589 .addComponent(filesSetNameLabel)
590 .addComponent(filesSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
591 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
592 .addComponent(saveTypeButton)
593 .addGap(0, 21, Short.MAX_VALUE))))
596 layout.linkSize(javax.swing.SwingConstants.VERTICAL,
new java.awt.Component[] {deleteTypeButton, newTypeButton, saveTypeButton});
600 private void newTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {
601 clearTypeDetailsComponents();
604 private void deleteTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {
605 FileType fileType = typesList.getSelectedValue();
606 fileTypes.remove(fileType);
607 updateFileTypesListModel();
608 if (!typesListModel.isEmpty()) {
609 typesList.setSelectedIndex(0);
613 private void saveTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {
617 String typeName = mimeTypeTextField.getText();
618 if (typeName.isEmpty()) {
619 JOptionPane.showMessageDialog(null,
620 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.message"),
621 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidMIMEType.title"),
622 JOptionPane.ERROR_MESSAGE);
629 FileType.Signature.Type sigType = signatureTypeComboBox.getSelectedItem() == FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM ? FileType.Signature.Type.RAW : FileType.Signature.Type.ASCII;
634 String sigString = signatureTextField.getText();
635 if (sigString.isEmpty()) {
636 JOptionPane.showMessageDialog(null,
637 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.message"),
638 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignature.title"),
639 JOptionPane.ERROR_MESSAGE);
642 byte[] signatureBytes;
643 if (FileType.Signature.Type.RAW == sigType) {
645 sigString = sigString.replaceAll(
"\\s",
"");
646 signatureBytes = DatatypeConverter.parseHexBinary(sigString);
647 }
catch (IllegalArgumentException ex) {
648 JOptionPane.showMessageDialog(null,
649 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidRawSignatureBytes.message"),
650 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidSignatureBytes.title"),
651 JOptionPane.ERROR_MESSAGE);
655 signatureBytes = sigString.getBytes(Charset.forName(
"UTF-8"));
662 boolean isRelativeToStart = offsetRelativeToComboBox.getSelectedItem() == FileTypeIdGlobalSettingsPanel.START_OFFSET_RELATIVE_COMBO_BOX_ITEM;
664 offset = Long.parseUnsignedLong(offsetTextField.getText());
665 if(!isRelativeToStart && signatureBytes.length > offset+1) {
666 JOptionPane.showMessageDialog(null,
667 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.length"),
668 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.title"),
669 JOptionPane.ERROR_MESSAGE);
672 }
catch (NumberFormatException ex) {
673 JOptionPane.showMessageDialog(null,
674 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.message"),
675 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidOffset.title"),
676 JOptionPane.ERROR_MESSAGE);
683 String filesSetName =
"";
684 if (postHitCheckBox.isSelected()) {
685 filesSetName = filesSetNameTextField.getText();
687 if (postHitCheckBox.isSelected() && filesSetName.isEmpty()) {
688 JOptionPane.showMessageDialog(null,
689 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.message"),
690 NbBundle.getMessage(FileTypeIdGlobalSettingsPanel.class,
"FileTypeIdGlobalSettingsPanel.JOptionPane.invalidInterestingFilesSetName.title"),
691 JOptionPane.ERROR_MESSAGE);
698 FileType.Signature signature =
new FileType.Signature(signatureBytes, offset, sigType, isRelativeToStart);
699 FileType fileType =
new FileType(typeName, signature, filesSetName, postHitCheckBox.isSelected());
700 FileType selected = typesList.getSelectedValue();
701 if (selected != null) {
702 fileTypes.remove(selected);
704 fileTypes.add(fileType);
705 updateFileTypesListModel();
706 typesList.setSelectedValue(fileType,
true);
709 private void postHitCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
710 filesSetNameTextField.setEnabled(postHitCheckBox.isSelected());
714 private void signatureTypeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
715 if (signatureTypeComboBox.getSelectedItem() == FileTypeIdGlobalSettingsPanel.RAW_SIGNATURE_TYPE_COMBO_BOX_ITEM) {
716 hexPrefixLabel.setVisible(
true);
717 signatureTextField.setText(
"0000");
719 hexPrefixLabel.setVisible(
false);
720 signatureTextField.setText(
"");
724 private void signatureTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
729 private javax.swing.JButton deleteTypeButton;
730 private javax.swing.JLabel filesSetNameLabel;
731 private javax.swing.JTextField filesSetNameTextField;
732 private javax.swing.JLabel hexPrefixLabel;
733 private javax.swing.JLabel ingestRunningWarningLabel;
734 private javax.swing.JLabel jLabel2;
735 private javax.swing.JLabel jLabel3;
736 private javax.swing.JLabel mimeTypeLabel;
737 private javax.swing.JTextField mimeTypeTextField;
738 private javax.swing.JButton newTypeButton;
739 private javax.swing.JLabel offsetLabel;
740 private javax.swing.JComboBox<String> offsetRelativeToComboBox;
741 private javax.swing.JLabel offsetRelativeToLabel;
742 private javax.swing.JTextField offsetTextField;
743 private javax.swing.JCheckBox postHitCheckBox;
744 private javax.swing.JButton saveTypeButton;
745 private javax.swing.JSeparator separator;
746 private javax.swing.JLabel signatureLabel;
747 private javax.swing.JTextField signatureTextField;
748 private javax.swing.JComboBox<String> signatureTypeComboBox;
749 private javax.swing.JLabel signatureTypeLabel;
750 private javax.swing.JList<FileType> typesList;
751 private javax.swing.JScrollPane typesScrollPane;
void propertyChange(PropertyChangeEvent evt)
static synchronized IngestManager getInstance()
boolean isIngestRunning()