mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-19 19:14:55 +00:00
375 lines
14 KiB
Java
375 lines
14 KiB
Java
/*
|
|
* Autopsy Forensic Browser
|
|
*
|
|
* Copyright 2011 - 2013 Basis Technology Corp.
|
|
* Contact: carrier <at> sleuthkit <dot> org
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package org.sleuthkit.autopsy.fileextmismatch;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.logging.Level;
|
|
import javax.swing.ListSelectionModel;
|
|
import javax.swing.event.ListSelectionEvent;
|
|
import javax.swing.event.ListSelectionListener;
|
|
import javax.swing.table.AbstractTableModel;
|
|
import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
|
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
|
|
/**
|
|
* Container panel for File Extension Mismatch Ingest Module advanced configuration options
|
|
*/
|
|
public final class FileExtMismatchConfigPanel extends javax.swing.JPanel implements OptionsPanel {
|
|
private static Logger logger = Logger.getLogger(FileExtMismatchConfigPanel.class.getName());
|
|
private HashMap<String, String[]> editableMap = new HashMap<>();
|
|
private String[] mimeList = null;
|
|
private String[] currentExtensions = null;
|
|
private MimeTableModel mimeTableModel;
|
|
private ExtTableModel extTableModel;
|
|
|
|
public FileExtMismatchConfigPanel() {
|
|
mimeTableModel = new MimeTableModel();
|
|
extTableModel = new ExtTableModel();
|
|
|
|
initComponents();
|
|
customizeComponents();
|
|
}
|
|
|
|
private void customizeComponents() {
|
|
setName("Advanced File Extension Mismatch Configuration");
|
|
final ListSelectionModel lsm = mimeTable.getSelectionModel();
|
|
lsm.addListSelectionListener(new ListSelectionListener() {
|
|
|
|
@Override
|
|
public void valueChanged(ListSelectionEvent e) {
|
|
ListSelectionModel listSelectionModel = (ListSelectionModel) e.getSource();
|
|
if (!listSelectionModel.isSelectionEmpty()) {
|
|
int index = listSelectionModel.getMinSelectionIndex();
|
|
String selectedMime = mimeList[index];
|
|
currentExtensions = editableMap.get(selectedMime);
|
|
//listSelectionModel.setSelectionInterval(index, index);
|
|
|
|
extTableModel.resync();
|
|
//initButtons();
|
|
} else {
|
|
currentExtensions = null;
|
|
extTableModel.resync();
|
|
//initButtons();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* This method is called from within the constructor to initialize the form.
|
|
* WARNING: Do NOT modify this code. The content of this method is always
|
|
* regenerated by the Form Editor.
|
|
*/
|
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
|
private void initComponents() {
|
|
|
|
jButton1 = new javax.swing.JButton();
|
|
jSplitPane1 = new javax.swing.JSplitPane();
|
|
mimePanel = new javax.swing.JPanel();
|
|
jLabel1 = new javax.swing.JLabel();
|
|
jScrollPane2 = new javax.swing.JScrollPane();
|
|
mimeTable = new javax.swing.JTable();
|
|
extensionPanel = new javax.swing.JPanel();
|
|
jTextField1 = new javax.swing.JTextField();
|
|
jButton2 = new javax.swing.JButton();
|
|
jScrollPane3 = new javax.swing.JScrollPane();
|
|
extTable = new javax.swing.JTable();
|
|
jButton3 = new javax.swing.JButton();
|
|
jLabel2 = new javax.swing.JLabel();
|
|
|
|
jButton1.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jButton1.text")); // NOI18N
|
|
jButton1.setEnabled(false);
|
|
|
|
jSplitPane1.setDividerLocation(400);
|
|
|
|
jLabel1.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jLabel1.text")); // NOI18N
|
|
|
|
mimeTable.setModel(mimeTableModel);
|
|
jScrollPane2.setViewportView(mimeTable);
|
|
|
|
javax.swing.GroupLayout mimePanelLayout = new javax.swing.GroupLayout(mimePanel);
|
|
mimePanel.setLayout(mimePanelLayout);
|
|
mimePanelLayout.setHorizontalGroup(
|
|
mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE)
|
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
|
.addComponent(jLabel1)
|
|
.addGap(0, 264, Short.MAX_VALUE)))
|
|
.addContainerGap())
|
|
);
|
|
mimePanelLayout.setVerticalGroup(
|
|
mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(mimePanelLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addComponent(jLabel1)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 311, Short.MAX_VALUE)
|
|
.addContainerGap())
|
|
);
|
|
|
|
jSplitPane1.setLeftComponent(mimePanel);
|
|
|
|
jTextField1.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jTextField1.text")); // NOI18N
|
|
|
|
jButton2.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jButton2.text")); // NOI18N
|
|
|
|
extTable.setModel(extTableModel);
|
|
jScrollPane3.setViewportView(extTable);
|
|
|
|
jButton3.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jButton3.text")); // NOI18N
|
|
|
|
jLabel2.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jLabel2.text")); // NOI18N
|
|
|
|
javax.swing.GroupLayout extensionPanelLayout = new javax.swing.GroupLayout(extensionPanel);
|
|
extensionPanel.setLayout(extensionPanelLayout);
|
|
extensionPanelLayout.setHorizontalGroup(
|
|
extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(extensionPanelLayout.createSequentialGroup()
|
|
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(jButton2))
|
|
.addComponent(jButton3)
|
|
.addComponent(jLabel2))
|
|
.addGap(0, 105, Short.MAX_VALUE)))
|
|
.addContainerGap())
|
|
);
|
|
extensionPanelLayout.setVerticalGroup(
|
|
extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, extensionPanelLayout.createSequentialGroup()
|
|
.addComponent(jLabel2)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 239, Short.MAX_VALUE)
|
|
.addGap(18, 18, 18)
|
|
.addGroup(extensionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(jButton2))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(jButton3)
|
|
.addGap(19, 19, 19))
|
|
);
|
|
|
|
jSplitPane1.setRightComponent(extensionPanel);
|
|
|
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
|
this.setLayout(layout);
|
|
layout.setHorizontalGroup(
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
|
.addGap(0, 0, Short.MAX_VALUE)
|
|
.addComponent(jButton1)
|
|
.addGap(20, 20, 20))
|
|
.addGroup(layout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
|
.addContainerGap())
|
|
);
|
|
layout.setVerticalGroup(
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(layout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addComponent(jSplitPane1)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(jButton1)
|
|
.addGap(15, 15, 15))
|
|
);
|
|
}// </editor-fold>//GEN-END:initComponents
|
|
|
|
@Override
|
|
public void load() {
|
|
// Load the XML into a buffer that the user can modify. They can choose
|
|
// to save it back to the file after making changes.
|
|
editableMap = FileExtMismatchXML.getDefault().load();
|
|
mimeList = editableMap.keySet().toArray(new String[0]);
|
|
}
|
|
|
|
@Override
|
|
public void store() {
|
|
//FileExtMismatchXML.getDefault().save(editableMap);
|
|
//refresh the list viewer/searcher panel
|
|
//FileExtMismatchXML.getDefault().resync();
|
|
}
|
|
|
|
public void cancel() {
|
|
//FileExtMismatchXML.getDefault().reload();
|
|
}
|
|
|
|
boolean valid() {
|
|
// TODO check whether form is consistent and complete
|
|
return true;
|
|
}
|
|
|
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
private javax.swing.JTable extTable;
|
|
private javax.swing.JPanel extensionPanel;
|
|
private javax.swing.JButton jButton1;
|
|
private javax.swing.JButton jButton2;
|
|
private javax.swing.JButton jButton3;
|
|
private javax.swing.JLabel jLabel1;
|
|
private javax.swing.JLabel jLabel2;
|
|
private javax.swing.JScrollPane jScrollPane2;
|
|
private javax.swing.JScrollPane jScrollPane3;
|
|
private javax.swing.JSplitPane jSplitPane1;
|
|
private javax.swing.JTextField jTextField1;
|
|
private javax.swing.JPanel mimePanel;
|
|
private javax.swing.JTable mimeTable;
|
|
// End of variables declaration//GEN-END:variables
|
|
|
|
private class MimeTableModel extends AbstractTableModel {
|
|
|
|
@Override
|
|
public int getColumnCount() {
|
|
return 1;
|
|
}
|
|
|
|
@Override
|
|
public int getRowCount() {
|
|
return editableMap == null ? 0 : editableMap.size();
|
|
}
|
|
|
|
@Override
|
|
public String getColumnName(int column) {
|
|
String colName = null;
|
|
|
|
switch (column) {
|
|
case 0:
|
|
colName = "Mime Type";
|
|
break;
|
|
default:
|
|
;
|
|
|
|
}
|
|
return colName;
|
|
}
|
|
|
|
@Override
|
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
|
Object ret = null;
|
|
if ((mimeList == null) || (rowIndex > mimeList.length)) {
|
|
return "";
|
|
}
|
|
String word = mimeList[rowIndex];
|
|
switch (columnIndex) {
|
|
case 0:
|
|
ret = (Object) word;
|
|
break;
|
|
default:
|
|
logger.log(Level.SEVERE, "Invalid table column index: " + columnIndex);
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
@Override
|
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
|
}
|
|
|
|
@Override
|
|
public Class<?> getColumnClass(int c) {
|
|
return getValueAt(0, c).getClass();
|
|
}
|
|
|
|
void resync() {
|
|
fireTableDataChanged();
|
|
}
|
|
}
|
|
|
|
private class ExtTableModel extends AbstractTableModel {
|
|
|
|
@Override
|
|
public int getColumnCount() {
|
|
return 1;
|
|
}
|
|
|
|
@Override
|
|
public int getRowCount() {
|
|
return currentExtensions == null ? 0 : currentExtensions.length;
|
|
}
|
|
|
|
@Override
|
|
public String getColumnName(int column) {
|
|
String colName = null;
|
|
|
|
switch (column) {
|
|
case 0:
|
|
colName = "Extension";
|
|
break;
|
|
default:
|
|
;
|
|
|
|
}
|
|
return colName;
|
|
}
|
|
|
|
@Override
|
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
|
Object ret = null;
|
|
|
|
if ((currentExtensions == null) || (rowIndex > currentExtensions.length)) {
|
|
return "";
|
|
}
|
|
String word = currentExtensions[rowIndex];
|
|
switch (columnIndex) {
|
|
case 0:
|
|
ret = (Object) word;
|
|
break;
|
|
default:
|
|
logger.log(Level.SEVERE, "Invalid table column index: " + columnIndex);
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
@Override
|
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
|
}
|
|
|
|
@Override
|
|
public Class<?> getColumnClass(int c) {
|
|
return getValueAt(0, c).getClass();
|
|
}
|
|
|
|
void resync() {
|
|
fireTableDataChanged();
|
|
}
|
|
}
|
|
|
|
}
|