diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties index 2b35b09fb2..6b38c1e586 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/Bundle.properties @@ -1,8 +1,8 @@ OpenIDE-Module-Name=FileExtMismatch FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.text=Skip Known Files FileExtMismatchSimpleConfigPanel.skipKnownCheckBox.toolTipText=Depending on how many files have known hashes, checking this box will improve the speed of mismatch detection. -FileExtMismatchConfigPanel.jLabel1.text=Mime Type: -FileExtMismatchConfigPanel.jLabel2.text=Allowed Extensions: +FileExtMismatchConfigPanel.jLabel1.text=Files Types: +FileExtMismatchConfigPanel.jLabel2.text=Allowed Name Extensions: FileExtMismatchConfigPanel.jButton1.text=Save FileExtMismatchConfigPanel.jTextField1.text= FileExtMismatchConfigPanel.jButton2.text=Add diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.form b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.form index 8b1353fb73..8e20afdfc4 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.form +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.form @@ -23,7 +23,7 @@ - + @@ -32,8 +32,8 @@ - - + + @@ -69,10 +69,10 @@ - + - + @@ -85,7 +85,8 @@ - + + @@ -102,15 +103,10 @@ - + - - - - - - -
+ +
@@ -142,7 +138,7 @@ - + @@ -154,7 +150,7 @@ - + @@ -186,15 +182,10 @@ - + - - - - - - -
+ +
diff --git a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java index 4cd218c81b..ab8a7cf0c8 100644 --- a/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java +++ b/FileExtMismatch/src/org/sleuthkit/autopsy/fileextmismatch/FileExtMismatchConfigPanel.java @@ -19,22 +19,59 @@ 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 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"); + 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(); + } + } + }); } /** @@ -50,12 +87,12 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme mimePanel = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); - jTable2 = new javax.swing.JTable(); + 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(); - jTable1 = new javax.swing.JTable(); + extTable = new javax.swing.JTable(); jButton3 = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); @@ -66,18 +103,8 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme jLabel1.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jLabel1.text")); // NOI18N - jTable2.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { - {null, null, null, null}, - {null, null, null, null}, - {null, null, null, null}, - {null, null, null, null} - }, - new String [] { - "Title 1", "Title 2", "Title 3", "Title 4" - } - )); - jScrollPane2.setViewportView(jTable2); + mimeTable.setModel(mimeTableModel); + jScrollPane2.setViewportView(mimeTable); javax.swing.GroupLayout mimePanelLayout = new javax.swing.GroupLayout(mimePanel); mimePanel.setLayout(mimePanelLayout); @@ -86,10 +113,10 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme .addGroup(mimePanelLayout.createSequentialGroup() .addContainerGap() .addGroup(mimePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 321, Short.MAX_VALUE) .addGroup(mimePanelLayout.createSequentialGroup() .addComponent(jLabel1) - .addGap(0, 144, Short.MAX_VALUE))) + .addGap(0, 264, Short.MAX_VALUE))) .addContainerGap()) ); mimePanelLayout.setVerticalGroup( @@ -98,7 +125,8 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 311, Short.MAX_VALUE) + .addContainerGap()) ); jSplitPane1.setLeftComponent(mimePanel); @@ -107,18 +135,8 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme jButton2.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jButton2.text")); // NOI18N - jTable1.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { - {null, null, null, null}, - {null, null, null, null}, - {null, null, null, null}, - {null, null, null, null} - }, - new String [] { - "Title 1", "Title 2", "Title 3", "Title 4" - } - )); - jScrollPane3.setViewportView(jTable1); + extTable.setModel(extTableModel); + jScrollPane3.setViewportView(extTable); jButton3.setText(org.openide.util.NbBundle.getMessage(FileExtMismatchConfigPanel.class, "FileExtMismatchConfigPanel.jButton3.text")); // NOI18N @@ -140,7 +158,7 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme .addComponent(jButton2)) .addComponent(jButton3) .addComponent(jLabel2)) - .addGap(0, 121, Short.MAX_VALUE))) + .addGap(0, 105, Short.MAX_VALUE))) .addContainerGap()) ); extensionPanelLayout.setVerticalGroup( @@ -148,7 +166,7 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, extensionPanelLayout.createSequentialGroup() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 74, Short.MAX_VALUE) + .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) @@ -170,15 +188,15 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme .addGap(20, 20, 20)) .addGroup(layout.createSequentialGroup() .addContainerGap() - .addComponent(jSplitPane1) + .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, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE) + .addComponent(jSplitPane1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jButton1) .addGap(15, 15, 15)) ); @@ -189,6 +207,7 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme // 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 @@ -208,6 +227,7 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme } // 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; @@ -217,9 +237,138 @@ public final class FileExtMismatchConfigPanel extends javax.swing.JPanel impleme private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JSplitPane jSplitPane1; - private javax.swing.JTable jTable1; - private javax.swing.JTable jTable2; 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(); + } + } + }