19 package org.sleuthkit.autopsy.modules.interestingitems;
 
   21 import java.util.ArrayList;
 
   22 import java.util.List;
 
   23 import java.util.Observable;
 
   24 import java.util.Observer;
 
   25 import java.util.TreeMap;
 
   26 import javax.swing.JTable;
 
   27 import javax.swing.table.AbstractTableModel;
 
   28 import javax.swing.table.TableColumn;
 
   29 import org.openide.util.Exceptions;
 
   30 import org.openide.util.NbBundle.Messages;
 
   38 final class FilesIdentifierIngestJobSettingsPanel 
extends IngestModuleIngestJobSettingsPanel implements Observer {
 
   40         "FilesIdentifierIngestJobSettingsPanel.updateError=Error updating interesting files sets settings file.",
 
   41         "FilesIdentifierIngestJobSettingsPanel.getError=Error getting interesting files sets from settings file." 
   44     private final FilesSetsTableModel tableModel;
 
   49     private TreeMap<String, FilesSet> filesSetSnapshot;
 
   58     static FilesIdentifierIngestJobSettingsPanel makePanel(FilesIdentifierIngestJobSettings settings) {
 
   59         FilesIdentifierIngestJobSettingsPanel panel = 
new FilesIdentifierIngestJobSettingsPanel(settings);
 
   65         InterestingItemDefsManager.getInstance().addObserver(panel);
 
   74     private FilesIdentifierIngestJobSettingsPanel(FilesIdentifierIngestJobSettings settings) {
 
   84         List<FilesSetRow> filesSetRows = 
new ArrayList<>();
 
   86             this.filesSetSnapshot = 
new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets());
 
   87         } 
catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {
 
   88             MessageNotifyUtil.Message.error(Bundle.FilesIdentifierIngestJobSettingsPanel_getError());
 
   89             this.filesSetSnapshot = 
new TreeMap<>();
 
   91         for (FilesSet set : this.filesSetSnapshot.values()) {
 
   92             filesSetRows.add(
new FilesSetRow(set, settings.interestingFilesSetIsEnabled(set.getName())));
 
   96         this.tableModel = 
new FilesSetsTableModel(filesSetRows);
 
  101         this.filesSetTable.setModel(tableModel);
 
  102         this.filesSetTable.setTableHeader(null);
 
  103         this.filesSetTable.setRowSelectionAllowed(
false);
 
  104         final int width = this.filesSetScrollPane.getPreferredSize().width;
 
  105         this.filesSetTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
 
  107         for (
int i = 0; i < this.filesSetTable.getColumnCount(); i++) {
 
  108             column = this.filesSetTable.getColumnModel().getColumn(i);
 
  110                 column.setPreferredWidth(((
int) (width * 0.07)));
 
  112                 column.setPreferredWidth(((
int) (width * 0.92)));
 
  118     public IngestModuleIngestJobSettings getSettings() {
 
  119         List<String> enabledInterestingFilesSets = 
new ArrayList<>();
 
  120         List<String> disabledInterestingFilesSets = 
new ArrayList<>();
 
  121         for (FilesSetRow rowModel : this.tableModel.filesSetRows) {
 
  122             if (rowModel.isEnabled()) {
 
  123                 enabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
 
  125                 disabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
 
  128         return new FilesIdentifierIngestJobSettings(enabledInterestingFilesSets, disabledInterestingFilesSets);
 
  132     public void update(Observable o, Object arg
 
  135         FilesIdentifierIngestJobSettings settings = (FilesIdentifierIngestJobSettings) this.getSettings();
 
  138         List<FilesSetRow> rowModels = 
new ArrayList<>();
 
  139         TreeMap<String, FilesSet> newFilesSetSnapshot;
 
  141             newFilesSetSnapshot = 
new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets());
 
  142         } 
catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {
 
  143             MessageNotifyUtil.Message.error(Bundle.FilesIdentifierIngestJobSettingsPanel_updateError());
 
  146         for (FilesSet set : newFilesSetSnapshot.values()) {
 
  147             if (this.filesSetSnapshot.keySet().contains(set.getName())) {
 
  149                 rowModels.add(
new FilesSetRow(set, settings.interestingFilesSetIsEnabled(set.getName())));
 
  152                 rowModels.add(
new FilesSetRow(set, 
true));
 
  155         this.tableModel.resetTableData(rowModels);
 
  158         this.filesSetSnapshot = newFilesSetSnapshot;
 
  187         void resetTableData(List<FilesSetRow> filesSetRows) {
 
  189             this.fireTableDataChanged();
 
  194             return this.filesSetRows.size();
 
  204             if (columnIndex == 0) {
 
  205                 return this.filesSetRows.get(rowIndex).isEnabled();
 
  207                 return this.filesSetRows.get(rowIndex).getFilesSet().getName();
 
  213             return (columnIndex == 0);
 
  217         public void setValueAt(Object aValue, 
int rowIndex, 
int columnIndex) {
 
  218             if (columnIndex == 0) {
 
  219                 this.filesSetRows.get(rowIndex).setEnabled((Boolean) aValue);
 
  234         private final FilesSet 
set;
 
  242         FilesSet getFilesSet() {
 
  246         boolean isEnabled() {
 
  250         void setEnabled(
boolean enabled) {
 
  260     @SuppressWarnings(
"unchecked")
 
  262     private 
void initComponents() {
 
  264         filesSetScrollPane = 
new javax.swing.JScrollPane();
 
  265         filesSetTable = 
new javax.swing.JTable();
 
  267         setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(FilesIdentifierIngestJobSettingsPanel.class, 
"FilesIdentifierIngestJobSettingsPanel.border.title"))); 
 
  269         filesSetTable.setBackground(
new java.awt.Color(240, 240, 240));
 
  270         filesSetTable.setModel(
new javax.swing.table.DefaultTableModel(
 
  278         filesSetTable.setShowHorizontalLines(
false);
 
  279         filesSetTable.setShowVerticalLines(
false);
 
  280         filesSetScrollPane.setViewportView(filesSetTable);
 
  282         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  283         this.setLayout(layout);
 
  284         layout.setHorizontalGroup(
 
  285             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  286             .addGroup(layout.createSequentialGroup()
 
  288                 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE)
 
  291         layout.setVerticalGroup(
 
  292             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  293             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 
  295                 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE)
 
  301     private javax.swing.JScrollPane filesSetScrollPane;
 
  302     private javax.swing.JTable filesSetTable;
 
Class<?> getColumnClass(int c)
Object getValueAt(int rowIndex, int columnIndex)
boolean isCellEditable(int rowIndex, int columnIndex)
List< FilesSetRow > filesSetRows
void setValueAt(Object aValue, int rowIndex, int columnIndex)