Autopsy  4.4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
IngestJobSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2017 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.ingest;
20 
21 import java.awt.Component;
22 import java.awt.Dimension;
23 import java.awt.Toolkit;
24 import java.awt.event.ActionEvent;
25 import java.awt.event.WindowAdapter;
26 import java.awt.event.WindowEvent;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.logging.Level;
32 import java.util.logging.Logger;
33 import javax.swing.DefaultComboBoxModel;
34 import javax.swing.Icon;
35 import javax.swing.ImageIcon;
36 import javax.swing.JDialog;
37 import javax.swing.JLabel;
38 import javax.swing.JTable;
39 import javax.swing.ListSelectionModel;
40 import javax.swing.SwingUtilities;
41 import javax.swing.event.ListSelectionEvent;
42 import javax.swing.table.AbstractTableModel;
43 import javax.swing.table.DefaultTableCellRenderer;
44 import javax.swing.table.TableColumn;
45 import org.openide.util.NbBundle.Messages;
52 import org.sleuthkit.datamodel.Content;
53 import org.sleuthkit.datamodel.IngestJobInfo;
54 import org.sleuthkit.datamodel.IngestModuleInfo;
55 import org.sleuthkit.datamodel.SleuthkitCase;
56 import org.sleuthkit.datamodel.TskCoreException;
58 
62 public final class IngestJobSettingsPanel extends javax.swing.JPanel {
63 
64  private static final long serialVersionUID = 1L;
65  private static ImageIcon warningIcon = new ImageIcon(IngestJobSettingsPanel.class.getResource("/org/sleuthkit/autopsy/images/warning_triangle.png"));
66  private static ImageIcon infoIcon = new ImageIcon(IngestJobSettingsPanel.class.getResource("/org/sleuthkit/autopsy/images/information-frame.png"));
67  private final IngestJobSettings settings;
68  private final List<Content> dataSources = new ArrayList<>();
69  private final List<IngestJobInfo> ingestJobs = new ArrayList<>();
70  private final List<IngestModuleModel> modules = new ArrayList<>();
73  private static final Logger logger = Logger.getLogger(IngestJobSettingsPanel.class.getName());
74 
82  this.settings = settings;
83  for (IngestModuleTemplate moduleTemplate : settings.getIngestModuleTemplates()) {
84  modules.add(new IngestModuleModel(moduleTemplate));
85  }
88  fileIngestFilterComboBox.setSelectedItem(settings.getFileIngestFilter().getName());
89  }
90 
98  public IngestJobSettingsPanel(IngestJobSettings settings, List<Content> dataSources) {
99  this.settings = settings;
100  this.dataSources.addAll(dataSources);
101  try {
102  SleuthkitCase skCase = Case.getCurrentCase().getSleuthkitCase();
103  ingestJobs.addAll(skCase.getIngestJobs());
104  } catch (IllegalStateException ex) {
105  logger.log(Level.SEVERE, "No open case", ex);
106  } catch (TskCoreException ex) {
107  logger.log(Level.SEVERE, "Failed to load ingest job information", ex);
108  }
109  for (IngestModuleTemplate moduleTemplate : settings.getIngestModuleTemplates()) {
110  this.modules.add(new IngestModuleModel(moduleTemplate));
111  }
112  initComponents();
114  fileIngestFilterComboBox.setSelectedItem(settings.getFileIngestFilter().getName());
115  }
116 
123  List<IngestModuleTemplate> moduleTemplates = new ArrayList<>();
124  for (IngestModuleModel module : modules) {
125  IngestModuleTemplate moduleTemplate = module.getIngestModuleTemplate();
126  if (module.hasModuleSettingsPanel()) {
127  IngestModuleIngestJobSettings moduleSettings = module.getModuleSettingsPanel().getSettings();
128  moduleTemplate.setModuleSettings(moduleSettings);
129  }
130  moduleTemplates.add(moduleTemplate);
131  }
132  this.settings.setIngestModuleTemplates(moduleTemplates);
133  return this.settings;
134  }
135 
136  @Messages({"IngestJobSettingsPanel.noPerRunSettings=The selected module has no per-run settings."})
137  private void customizeComponents() {
138  modulesTable.setModel(tableModel);
139  modulesTable.setTableHeader(null);
140  modulesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
141 
142  // Set the column widths in the table model and add a custom cell
143  // renderer that will display module descriptions from the module models
144  // as tooltips.
146  int width = modulesScrollPane.getPreferredSize().width;
147  for (int i = 0; i < modulesTable.getColumnCount(); ++i) {
148  TableColumn column = modulesTable.getColumnModel().getColumn(i);
149  if (0 == i) {
150  column.setPreferredWidth(((int) (width * 0.15)));
151  } else {
152  column.setCellRenderer(renderer);
153  column.setPreferredWidth(((int) (width * 0.84)));
154  }
155  }
156 
157  // Add a selection listener to the table model that will display the
158  // ingest job options panel of the currently selected module model and
159  // enable or disable the resources configuration panel invocation button.
160  modulesTable.getSelectionModel().addListSelectionListener((ListSelectionEvent e) -> {
161  ListSelectionModel listSelectionModel = (ListSelectionModel) e.getSource();
162  if (!listSelectionModel.isSelectionEmpty()) {
163  int index = listSelectionModel.getMinSelectionIndex();
164  selectedModule = modules.get(index);
165  ingestSettingsPanel.removeAll();
166  if (null != selectedModule.getModuleSettingsPanel()) {
167  ingestSettingsPanel.add(selectedModule.getModuleSettingsPanel());
168  } else {
169  ingestSettingsPanel.add(new JLabel(Bundle.IngestJobSettingsPanel_noPerRunSettings()));
170  }
171  ingestSettingsPanel.revalidate();
172  ingestSettingsPanel.repaint();
173  globalSettingsButton.setEnabled(null != selectedModule.getGlobalSettingsPanel());
174  descriptionLabel.setText(selectedModule.getDescription());
175  descriptionLabel.setToolTipText(selectedModule.getDescription());
176  }
177  });
178  modulesTable.setRowSelectionInterval(0, 0);
179  this.modulesTable.getColumnModel().getColumn(0).setMaxWidth(22);
180  this.modulesTable.getColumnModel().getColumn(1).setMaxWidth(20);
181  this.modulesTable.getColumnModel().getColumn(1).setMinWidth(20);
182  modulesTable.setRowHeight(20);
183 
184  /*
185  * Only enable the ingest jobs history panel if there are data sources
186  * and jobs for which to display the history.
187  */
188  pastJobsButton.setEnabled(!dataSources.isEmpty() && !ingestJobs.isEmpty());
189  }
190 
191  void setPastJobsButtonVisible(boolean isVisible) {
192  pastJobsButton.setVisible(isVisible);
193  }
194 
200  @SuppressWarnings("unchecked")
201  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
202  private void initComponents() {
203 
204  timeGroup = new javax.swing.ButtonGroup();
205  modulesScrollPane = new javax.swing.JScrollPane();
206  modulesTable = new javax.swing.JTable();
207  jPanel1 = new javax.swing.JPanel();
208  globalSettingsButton = new javax.swing.JButton();
209  jSeparator2 = new javax.swing.JSeparator();
210  descriptionLabel = new javax.swing.JLabel();
211  jScrollPane1 = new javax.swing.JScrollPane();
212  ingestSettingsPanel = new javax.swing.JPanel();
213  jButtonSelectAll = new javax.swing.JButton();
214  jButtonDeselectAll = new javax.swing.JButton();
215  pastJobsButton = new javax.swing.JButton();
216  fileIngestFilterLabel = new javax.swing.JLabel();
217  fileIngestFilterComboBox = new javax.swing.JComboBox<>();
218 
219  setMaximumSize(new java.awt.Dimension(5750, 3000));
220  setMinimumSize(new java.awt.Dimension(0, 0));
221  setPreferredSize(new java.awt.Dimension(625, 450));
222 
223  modulesScrollPane.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(160, 160, 160)));
224  modulesScrollPane.setMinimumSize(new java.awt.Dimension(0, 0));
225  modulesScrollPane.setPreferredSize(new java.awt.Dimension(160, 160));
226 
227  modulesTable.setBackground(new java.awt.Color(240, 240, 240));
228  modulesTable.setModel(new javax.swing.table.DefaultTableModel(
229  new Object [][] {
230 
231  },
232  new String [] {
233 
234  }
235  ));
236  modulesTable.setShowHorizontalLines(false);
237  modulesTable.setShowVerticalLines(false);
238  modulesScrollPane.setViewportView(modulesTable);
239 
240  jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(160, 160, 160)));
241  jPanel1.setPreferredSize(new java.awt.Dimension(338, 257));
242 
243  globalSettingsButton.setText(org.openide.util.NbBundle.getMessage(IngestJobSettingsPanel.class, "IngestJobSettingsPanel.globalSettingsButton.text")); // NOI18N
244  globalSettingsButton.setActionCommand(org.openide.util.NbBundle.getMessage(IngestJobSettingsPanel.class, "IngestJobSettingsPanel.globalSettingsButton.actionCommand")); // NOI18N
245  globalSettingsButton.setEnabled(false);
246  globalSettingsButton.addActionListener(new java.awt.event.ActionListener() {
247  public void actionPerformed(java.awt.event.ActionEvent evt) {
249  }
250  });
251 
252  descriptionLabel.setText("DO NOT REMOVE. This dummy text is used to anchor the inner panel's size to the outer panel, while still being expandable. Without this the expandability behavior doesn't work well. This text will never be shown, as it would only be shown when no module is selected (which is not possible).");
253 
254  jScrollPane1.setBorder(null);
255  jScrollPane1.setPreferredSize(new java.awt.Dimension(250, 180));
256 
257  ingestSettingsPanel.setMinimumSize(new java.awt.Dimension(0, 300));
258  ingestSettingsPanel.setLayout(new javax.swing.BoxLayout(ingestSettingsPanel, javax.swing.BoxLayout.PAGE_AXIS));
259  jScrollPane1.setViewportView(ingestSettingsPanel);
260 
261  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
262  jPanel1.setLayout(jPanel1Layout);
263  jPanel1Layout.setHorizontalGroup(
264  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
265  .addComponent(jSeparator2, javax.swing.GroupLayout.Alignment.TRAILING)
266  .addGroup(jPanel1Layout.createSequentialGroup()
267  .addGap(8, 8, 8)
268  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
269  .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
270  .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE)
271  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
272  .addGap(0, 0, Short.MAX_VALUE)
273  .addComponent(globalSettingsButton)))
274  .addGap(8, 8, 8))
275  );
276  jPanel1Layout.setVerticalGroup(
277  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
278  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
279  .addContainerGap()
280  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 330, Short.MAX_VALUE)
281  .addGap(18, 18, 18)
282  .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
283  .addGap(8, 8, 8)
284  .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
285  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
286  .addComponent(globalSettingsButton)
287  .addGap(8, 8, 8))
288  );
289 
290  jButtonSelectAll.setText(org.openide.util.NbBundle.getMessage(IngestJobSettingsPanel.class, "IngestJobSettingsPanel.jButtonSelectAll.text")); // NOI18N
291  jButtonSelectAll.setMargin(new java.awt.Insets(2, 8, 2, 8));
292  jButtonSelectAll.setMaximumSize(new java.awt.Dimension(87, 23));
293  jButtonSelectAll.setMinimumSize(new java.awt.Dimension(87, 23));
294  jButtonSelectAll.setPreferredSize(new java.awt.Dimension(86, 23));
295  jButtonSelectAll.addActionListener(new java.awt.event.ActionListener() {
296  public void actionPerformed(java.awt.event.ActionEvent evt) {
298  }
299  });
300 
301  jButtonDeselectAll.setText(org.openide.util.NbBundle.getMessage(IngestJobSettingsPanel.class, "IngestJobSettingsPanel.jButtonDeselectAll.text")); // NOI18N
302  jButtonDeselectAll.setMargin(new java.awt.Insets(2, 8, 2, 8));
303  jButtonDeselectAll.setPreferredSize(new java.awt.Dimension(86, 23));
304  jButtonDeselectAll.addActionListener(new java.awt.event.ActionListener() {
305  public void actionPerformed(java.awt.event.ActionEvent evt) {
307  }
308  });
309 
310  pastJobsButton.setText(org.openide.util.NbBundle.getMessage(IngestJobSettingsPanel.class, "IngestJobSettingsPanel.pastJobsButton.text")); // NOI18N
311  pastJobsButton.setMargin(new java.awt.Insets(2, 8, 2, 8));
312  pastJobsButton.setMaximumSize(new java.awt.Dimension(87, 23));
313  pastJobsButton.setMinimumSize(new java.awt.Dimension(87, 23));
314  pastJobsButton.setPreferredSize(new java.awt.Dimension(87, 23));
315  pastJobsButton.addActionListener(new java.awt.event.ActionListener() {
316  public void actionPerformed(java.awt.event.ActionEvent evt) {
318  }
319  });
320 
321  fileIngestFilterLabel.setText(org.openide.util.NbBundle.getMessage(IngestJobSettingsPanel.class, "IngestJobSettingsPanel.fileIngestFilterLabel.text")); // NOI18N
322 
323  fileIngestFilterComboBox.setModel(new DefaultComboBoxModel<>(getComboBoxContents()));
324  fileIngestFilterComboBox.addActionListener(new java.awt.event.ActionListener() {
325  public void actionPerformed(java.awt.event.ActionEvent evt) {
327  }
328  });
329 
330  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
331  this.setLayout(layout);
332  layout.setHorizontalGroup(
333  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
334  .addGroup(layout.createSequentialGroup()
335  .addGap(5, 5, 5)
336  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
337  .addGroup(layout.createSequentialGroup()
338  .addComponent(jButtonSelectAll, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
339  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
340  .addComponent(jButtonDeselectAll, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
341  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
342  .addComponent(pastJobsButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
343  .addComponent(modulesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
344  .addComponent(fileIngestFilterLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
345  .addComponent(fileIngestFilterComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
346  .addGap(4, 4, 4)
347  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
348  .addGap(5, 5, 5))
349  );
350 
351  layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButtonDeselectAll, jButtonSelectAll, pastJobsButton});
352 
353  layout.setVerticalGroup(
354  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
355  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
356  .addContainerGap()
357  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
358  .addGroup(layout.createSequentialGroup()
359  .addComponent(fileIngestFilterLabel)
360  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
361  .addComponent(fileIngestFilterComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
362  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
363  .addComponent(modulesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
364  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
365  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
366  .addComponent(jButtonSelectAll, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
367  .addComponent(jButtonDeselectAll, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
368  .addComponent(pastJobsButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
369  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE))
370  .addContainerGap())
371  );
372  }// </editor-fold>//GEN-END:initComponents
373 
374  private void globalSettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_globalSettingsButtonActionPerformed
376 
377  dialog.addApplyButtonListener((ActionEvent e) -> {
378  if (selectedModule.hasGlobalSettingsPanel()) {
379  selectedModule.saveResourcesConfig();
380  }
381  dialog.close();
382  });
383 
384  dialog.addWindowListener(new WindowAdapter() {
385  @Override
386  public void windowClosing(WindowEvent e) {
387  dialog.close();
388  }
389  });
390 
391  dialog.display(selectedModule.getGlobalSettingsPanel());
392  }//GEN-LAST:event_globalSettingsButtonActionPerformed
393 
394  private void jButtonSelectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSelectAllActionPerformed
395  SelectAllModules(true);
396  }//GEN-LAST:event_jButtonSelectAllActionPerformed
397 
398  private void jButtonDeselectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDeselectAllActionPerformed
399  SelectAllModules(false);
400  }//GEN-LAST:event_jButtonDeselectAllActionPerformed
401  @Messages({"IngestJobSettingsPanel.pastJobsButton.action.frame.title=Ingest History"})
402  private void pastJobsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pastJobsButtonActionPerformed
403  JDialog topFrame = (JDialog) SwingUtilities.getWindowAncestor(this);
404  JDialog dialog = new JDialog(topFrame, Bundle.IngestJobSettingsPanel_pastJobsButton_action_frame_title(), false);
405  IngestJobInfoPanel ingestInfo = new IngestJobInfoPanel();
406  dialog.add(ingestInfo);
407  Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
408  double w = dialog.getSize().getWidth();
409  double h = dialog.getSize().getHeight();
410  dialog.setLocation((int) ((screenDimension.getWidth() - w) / 2), (int) ((screenDimension.getHeight() - h) / 2));
411  dialog.setResizable(true);
412  dialog.pack();
413  dialog.setVisible(true);
414  }//GEN-LAST:event_pastJobsButtonActionPerformed
415 
416  private void fileIngestFilterComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileIngestFilterComboBoxActionPerformed
417  if (fileIngestFilterComboBox.getSelectedItem().toString().equals(FilesSetPanel.getCreateNewFileIngestFilterString())) {
419  FilesSetDefsPanel fileIngestFilterPanel;
421  fileIngestFilterPanel.load();
422  //save the filters that exist before any are created
423  final ArrayList<String> oldFilterList = new ArrayList<>(Arrays.asList(getComboBoxContents()));
424  dialog.addApplyButtonListener(
425  (ActionEvent e) -> {
426  fileIngestFilterPanel.store();
427  ArrayList<FilesSet> newFilterList = new ArrayList<>();
428  try {
429  newFilterList.addAll(FilesSetsManager.getInstance().getCustomFileIngestFilters().values());
431  logger.log(Level.SEVERE, "Failed to get user created file ingest filters, only default available for selection", ex); //NON-NLS
432  }
433  for (FilesSet filter : newFilterList) { //getting one of the recently created filters
434  if (!oldFilterList.contains(filter.getName())) {
435  //set newly created filter to selected filter
436  settings.setFileIngestFilter(filter);
437  break;
438  }
439  }
440  fileIngestFilterComboBox.setModel(new DefaultComboBoxModel<>(getComboBoxContents()));
441  //set the selected filter after the comboBox Contents were updated to include it
442  fileIngestFilterComboBox.setSelectedItem(settings.getFileIngestFilter().getName());
443  dialog.close();
444  }
445  );
446  dialog.display(fileIngestFilterPanel);
447  //return to saved selection in case they cancel out of filter creation
448  fileIngestFilterComboBox.setSelectedItem(settings.getFileIngestFilter().getName());
449  } else if (evt.getActionCommand().equals("comboBoxChanged")) {
450  try {
451  Map<String, FilesSet> fileIngestFilters = FilesSetsManager.getInstance()
454  fileIngestFilters.put(fSet.getName(), fSet);
455  }
456  settings.setFileIngestFilter(fileIngestFilters
457  .get(fileIngestFilterComboBox.getSelectedItem().toString()));
459  settings.setFileIngestFilter(FilesSetsManager.getDefaultFilter());
460  logger.log(Level.SEVERE, "Failed to get file ingest filter from combobox selection, default filter being used", ex); //NON-NLS
461  }
462  }
463  }//GEN-LAST:event_fileIngestFilterComboBoxActionPerformed
464 
475  private String[] getComboBoxContents() {
476  ArrayList<String> nameList = new ArrayList<>();
478  nameList.add(fSet.getName());
479  }
480  try {
482  nameList.add(fSet.getName());
483  }
485  logger.log(Level.SEVERE, "Failed to get user created file ingest filters for combo box, only default available for selection", ex); //NON-NLS
486  }
488  return nameList.toArray(new String[nameList.size()]);
489  }
490 
491  private void SelectAllModules(boolean set) {
492  for (IngestModuleModel module : modules) {
493  module.setEnabled(set);
494  }
495  modulesTable.repaint();
496  }
497 
498  // Variables declaration - do not modify//GEN-BEGIN:variables
499  private javax.swing.JLabel descriptionLabel;
500  private javax.swing.JComboBox<String> fileIngestFilterComboBox;
501  private javax.swing.JLabel fileIngestFilterLabel;
502  private javax.swing.JButton globalSettingsButton;
503  private javax.swing.JPanel ingestSettingsPanel;
504  private javax.swing.JButton jButtonDeselectAll;
505  private javax.swing.JButton jButtonSelectAll;
506  private javax.swing.JPanel jPanel1;
507  private javax.swing.JScrollPane jScrollPane1;
508  private javax.swing.JSeparator jSeparator2;
509  private javax.swing.JScrollPane modulesScrollPane;
510  private javax.swing.JTable modulesTable;
511  private javax.swing.JButton pastJobsButton;
512  private javax.swing.ButtonGroup timeGroup;
513  // End of variables declaration//GEN-END:variables
514 
520  static private class IngestModuleModel {
521 
522  private final IngestModuleTemplate moduleTemplate;
525 
526  IngestModuleModel(IngestModuleTemplate moduleTemplate) {
527  this.moduleTemplate = moduleTemplate;
528  if (moduleTemplate.hasModuleSettingsPanel()) {
529  moduleSettingsPanel = moduleTemplate.getModuleSettingsPanel();
530  }
531  if (moduleTemplate.hasGlobalSettingsPanel()) {
532  globalSettingsPanel = moduleTemplate.getGlobalSettingsPanel();
533  }
534  }
535 
536  IngestModuleTemplate getIngestModuleTemplate() {
537  return moduleTemplate;
538  }
539 
540  String getName() {
541  return moduleTemplate.getModuleName();
542  }
543 
544  String getDescription() {
545  return moduleTemplate.getModuleDescription();
546  }
547 
548  void setEnabled(boolean enabled) {
549  moduleTemplate.setEnabled(enabled);
550  }
551 
552  boolean isEnabled() {
553  return moduleTemplate.isEnabled();
554  }
555 
556  boolean hasModuleSettingsPanel() {
557  return moduleTemplate.hasModuleSettingsPanel();
558  }
559 
560  IngestModuleIngestJobSettingsPanel getModuleSettingsPanel() {
561  return moduleSettingsPanel;
562  }
563 
564  boolean hasGlobalSettingsPanel() {
565  return moduleTemplate.hasGlobalSettingsPanel();
566  }
567 
568  IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() {
569  return globalSettingsPanel;
570  }
571 
572  void saveResourcesConfig() {
573  globalSettingsPanel.saveSettings();
574  }
575  }
576 
581  private class IngestModulesTableModel extends AbstractTableModel {
582 
583  private static final long serialVersionUID = 1L;
584 
585  @Override
586  public int getRowCount() {
587  return modules.size();
588  }
589 
590  @Override
591  public int getColumnCount() {
592  return 3;
593  }
594 
595  @Override
596  public Object getValueAt(int rowIndex, int columnIndex) {
597  IngestModuleModel module = modules.get(rowIndex);
598  switch (columnIndex) {
599  case 0:
600  return module.isEnabled();
601  case 1:
602  return getIcon(module);
603  default:
604  return module.getName();
605  }
606  }
607 
608  @Override
609  public boolean isCellEditable(int rowIndex, int columnIndex) {
610  return columnIndex == 0;
611  }
612 
613  @Override
614  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
615  if (columnIndex == 0) {
616  modules.get(rowIndex).setEnabled((boolean) aValue);
617  }
618  }
619 
620  @Override
621  public Class<?> getColumnClass(int c) {
622  return getValueAt(0, c).getClass();
623  }
624 
625  private ImageIcon getIcon(IngestModuleModel module) {
626  if (dataSources.isEmpty() || ingestJobs.isEmpty()) {
627  return null;
628  }
629  boolean previousVersionRun = false;
630  for (IngestJobInfo ingestJob : ingestJobs) {
631  if (ingestJob.getStatus() != IngestJobInfo.IngestJobStatusType.COMPLETED) {
632  continue;
633  }
634  long objectId = ingestJob.getObjectId();
635  boolean isSameDataSource = false;
636  for (Content dataSource : dataSources) {
637  isSameDataSource = isSameDataSource || dataSource.getId() == objectId;
638  }
639  if (isSameDataSource) {
640  IngestModuleFactory factory = module.getIngestModuleTemplate().getModuleFactory();
641  if (factory.isDataSourceIngestModuleFactory()) {
642  String uniqueName = FactoryClassNameNormalizer.normalize(factory.getClass().getCanonicalName()) + "-"
643  + factory.getModuleDisplayName() + "-"
644  + IngestModuleInfo.IngestModuleType.DATA_SOURCE_LEVEL.toString() + "-"
645  + factory.getModuleVersionNumber();
646  for (IngestModuleInfo ingestModuleInfo : ingestJob.getIngestModuleInfo()) {
647  boolean sameModule = ingestModuleInfo.getUniqueName().equals(uniqueName);
648  if (sameModule) {
649  if (ingestModuleInfo.getVersion().equals(module.getIngestModuleTemplate().getModuleFactory().getModuleVersionNumber())) {
650  return warningIcon;
651  }
652  }
653  previousVersionRun = previousVersionRun || sameModule;
654  }
655  }
656  if (factory.isFileIngestModuleFactory()) {
657  String uniqueName = FactoryClassNameNormalizer.normalize(factory.getClass().getCanonicalName()) + "-"
658  + factory.getModuleDisplayName() + "-"
659  + IngestModuleInfo.IngestModuleType.FILE_LEVEL.toString() + "-"
660  + factory.getModuleVersionNumber();
661  for (IngestModuleInfo ingestModuleInfo : ingestJob.getIngestModuleInfo()) {
662  boolean sameModule = ingestModuleInfo.getUniqueName().equals(uniqueName);
663  if (sameModule) {
664  if (ingestModuleInfo.getVersion().equals(module.getIngestModuleTemplate().getModuleFactory().getModuleVersionNumber())) {
665  return warningIcon;
666  }
667  }
668  previousVersionRun = previousVersionRun || sameModule;
669  }
670  }
671  }
672  }
673  if (previousVersionRun) {
674  return infoIcon;
675  }
676  return null;
677  }
678  }
679 
684  @Messages({"IngestJobSettingsPanel.IngestModulesTableRenderer.warning.message=This ingest module has been run before on this data source.",
685  "IngestJobSettingsPanel.IngestModulesTableRenderer.info.message=A previous version of this ingest module has been run before on this data source."})
686  private class IngestModulesTableRenderer extends DefaultTableCellRenderer {
687 
688  private static final long serialVersionUID = 1L;
689 
690  List<String> tooltips = new ArrayList<>();
691 
693  for (IngestModuleModel moduleTemplate : modules) {
694  tooltips.add(moduleTemplate.getDescription());
695  }
696  }
697 
698  @Override
699  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
700  super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
701  if (2 == column) {
702  setIcon(null);
703  setToolTipText(tooltips.get(row));
704  } else if (1 == column) {
705  setIcon((Icon) value);
706  setText("");
707  if (warningIcon.equals(value)) {
708  setToolTipText(Bundle.IngestJobSettingsPanel_IngestModulesTableRenderer_warning_message());
709  } else if (infoIcon.equals(value)) {
710  setToolTipText(Bundle.IngestJobSettingsPanel_IngestModulesTableRenderer_info_message());
711  }
712  }
713  return this;
714  }
715  }
716 }
IngestJobSettingsPanel(IngestJobSettings settings, List< Content > dataSources)
void pastJobsButtonActionPerformed(java.awt.event.ActionEvent evt)
void jButtonSelectAllActionPerformed(java.awt.event.ActionEvent evt)
void globalSettingsButtonActionPerformed(java.awt.event.ActionEvent evt)
void fileIngestFilterComboBoxActionPerformed(java.awt.event.ActionEvent evt)
void jButtonDeselectAllActionPerformed(java.awt.event.ActionEvent evt)
Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
synchronized static Logger getLogger(String name)
Definition: Logger.java:161

Copyright © 2012-2016 Basis Technology. Generated on: Fri Sep 29 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.