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)));
 
  121     public IngestModuleIngestJobSettings getSettings() {
 
  122         List<String> enabledInterestingFilesSets = 
new ArrayList<>();
 
  123         List<String> disabledInterestingFilesSets = 
new ArrayList<>();
 
  124         for (FilesSetRow rowModel : this.tableModel.filesSetRows) {
 
  125             if (rowModel.isEnabled()) {
 
  126                 enabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
 
  128                 disabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
 
  131         return new FilesIdentifierIngestJobSettings(enabledInterestingFilesSets, disabledInterestingFilesSets);
 
  138     public void update(Observable o, Object arg
 
  141         FilesIdentifierIngestJobSettings settings = (FilesIdentifierIngestJobSettings) this.getSettings();
 
  144         List<FilesSetRow> rowModels = 
new ArrayList<>();
 
  145         TreeMap<String, FilesSet> newFilesSetSnapshot;
 
  147             newFilesSetSnapshot = 
new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets());
 
  148         } 
catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {
 
  149             MessageNotifyUtil.Message.error(Bundle.FilesIdentifierIngestJobSettingsPanel_updateError());
 
  152         for (FilesSet set : newFilesSetSnapshot.values()) {
 
  153             if (this.filesSetSnapshot.keySet().contains(set.getName())) {
 
  155                 rowModels.add(
new FilesSetRow(set, settings.interestingFilesSetIsEnabled(set.getName())));
 
  158                 rowModels.add(
new FilesSetRow(set, 
true));
 
  161         this.tableModel.resetTableData(rowModels);
 
  164         this.filesSetSnapshot = newFilesSetSnapshot;
 
  193         void resetTableData(List<FilesSetRow> filesSetRows) {
 
  195             this.fireTableDataChanged();
 
  203             return this.filesSetRows.size();
 
  219             if (columnIndex == 0) {
 
  220                 return this.filesSetRows.get(rowIndex).isEnabled();
 
  222                 return this.filesSetRows.get(rowIndex).getFilesSet().getName();
 
  231             return (columnIndex == 0);
 
  238         public void setValueAt(Object aValue, 
int rowIndex, 
int columnIndex) {
 
  239             if (columnIndex == 0) {
 
  240                 this.filesSetRows.get(rowIndex).setEnabled((Boolean) aValue);
 
  258         private final FilesSet 
set;
 
  266         FilesSet getFilesSet() {
 
  270         boolean isEnabled() {
 
  274         void setEnabled(
boolean enabled) {
 
  284     @SuppressWarnings(
"unchecked")
 
  286     private 
void initComponents() {
 
  288         filesSetScrollPane = 
new javax.swing.JScrollPane();
 
  289         filesSetTable = 
new javax.swing.JTable();
 
  291         setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(FilesIdentifierIngestJobSettingsPanel.class, 
"FilesIdentifierIngestJobSettingsPanel.border.title"))); 
 
  293         filesSetTable.setBackground(
new java.awt.Color(240, 240, 240));
 
  294         filesSetTable.setModel(
new javax.swing.table.DefaultTableModel(
 
  302         filesSetTable.setShowHorizontalLines(
false);
 
  303         filesSetTable.setShowVerticalLines(
false);
 
  304         filesSetScrollPane.setViewportView(filesSetTable);
 
  306         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  307         this.setLayout(layout);
 
  308         layout.setHorizontalGroup(
 
  309             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  310             .addGroup(layout.createSequentialGroup()
 
  312                 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE)
 
  315         layout.setVerticalGroup(
 
  316             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  317             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
 
  319                 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE)
 
  325     private javax.swing.JScrollPane filesSetScrollPane;
 
  326     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)