Autopsy  4.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
HashLookupSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011 - 2015 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.modules.hashdatabase;
20 
21 import java.awt.*;
22 import java.awt.event.KeyEvent;
23 import java.beans.PropertyChangeEvent;
24 import java.beans.PropertyChangeListener;
25 import java.io.File;
26 import java.util.ArrayList;
27 import java.util.List;
28 import java.util.logging.Level;
29 import javax.swing.JComponent;
30 import javax.swing.JOptionPane;
31 import javax.swing.JTable;
32 import javax.swing.ListSelectionModel;
33 import javax.swing.event.ListSelectionEvent;
34 import javax.swing.event.ListSelectionListener;
35 import javax.swing.table.AbstractTableModel;
36 import javax.swing.table.TableCellRenderer;
37 
38 import org.openide.util.NbBundle;
43 import org.sleuthkit.datamodel.TskCoreException;
47 
53 
54  private static final String NO_SELECTION_TEXT = NbBundle
55  .getMessage(HashLookupSettingsPanel.class, "HashDbConfigPanel.noSelectionText");
56  private static final String ERROR_GETTING_PATH_TEXT = NbBundle
57  .getMessage(HashLookupSettingsPanel.class, "HashDbConfigPanel.errorGettingPathText");
58  private static final String ERROR_GETTING_INDEX_STATUS_TEXT = NbBundle
59  .getMessage(HashLookupSettingsPanel.class, "HashDbConfigPanel.errorGettingIndexStatusText");
62 
67 
68  // Listen to the ingest modules to refresh the enabled/disabled state of
69  // the components in sync with file ingest.
70  IngestManager.getInstance().addIngestJobEventListener(new PropertyChangeListener() {
71  @Override
72  public void propertyChange(PropertyChangeEvent evt) {
73  if (isLocalIngestJobEvent(evt)) {
74  EventQueue.invokeLater(new Runnable() {
75  @Override
76  public void run() {
78  }
79  });
80  }
81  }
82  });
83  }
84 
85  @NbBundle.Messages({"HashLookupSettingsPanel.Title=Global Hash Lookup Settings"})
86  private void customizeComponents() {
87  setName(Bundle.HashLookupSettingsPanel_Title());
88  this.ingestWarningLabel.setVisible(false);
89  this.hashSetTable.setModel(hashSetTableModel);
90  this.hashSetTable.setTableHeader(null);
91  hashSetTable.getParent().setBackground(hashSetTable.getBackground());
92  hashSetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
93  hashSetTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
94  @Override
95  public void valueChanged(ListSelectionEvent e) {
96  if (!e.getValueIsAdjusting()) {
98  }
99  }
100  });
101  }
102 
103  private void updateComponents() {
104  HashDb db = ((HashSetTable) hashSetTable).getSelection();
105  if (db != null) {
107  } else {
109  }
110  }
111 
113  boolean ingestIsRunning = IngestManager.getInstance().isIngestRunning();
114 
115  // Update descriptive labels.
116  hashDbNameLabel.setText(NO_SELECTION_TEXT);
117  hashDbTypeLabel.setText(NO_SELECTION_TEXT);
118  hashDbLocationLabel.setText(NO_SELECTION_TEXT);
119  indexPathLabel.setText(NO_SELECTION_TEXT);
120 
121  // Update indexing components.
122  hashDbIndexStatusLabel.setText(NO_SELECTION_TEXT);
123  hashDbIndexStatusLabel.setForeground(Color.black);
124  indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
125  indexButton.setEnabled(false);
126  addHashesToDatabaseButton.setEnabled(false);
127 
128  // Update ingest options.
129  sendIngestMessagesCheckBox.setSelected(false);
130  sendIngestMessagesCheckBox.setEnabled(false);
131  optionsLabel.setEnabled(false);
132  optionsSeparator.setEnabled(false);
133 
134  // Update database action buttons.
135  createDatabaseButton.setEnabled(true);
136  importDatabaseButton.setEnabled(true);
137  deleteDatabaseButton.setEnabled(false);
138 
139  // Update ingest in progress warning label.
140  ingestWarningLabel.setVisible(ingestIsRunning);
141  }
142 
144  boolean ingestIsRunning = IngestManager.getInstance().isIngestRunning();
145 
146  // Update descriptive labels.
147  hashDbNameLabel.setText(db.getHashSetName());
149 
150  try {
152  } catch (TskCoreException ex) {
153  Logger.getLogger(HashLookupSettingsPanel.class.getName()).log(Level.SEVERE, "Error getting database path of " + db.getHashSetName() + " hash database", ex); //NON-NLS
154  hashDbLocationLabel.setText(ERROR_GETTING_PATH_TEXT);
155  }
156 
157  try {
158  indexPathLabel.setText(shortenPath(db.getIndexPath()));
159  } catch (TskCoreException ex) {
160  Logger.getLogger(HashLookupSettingsPanel.class.getName()).log(Level.SEVERE, "Error getting index path of " + db.getHashSetName() + " hash database", ex); //NON-NLS
161  indexPathLabel.setText(ERROR_GETTING_PATH_TEXT);
162  }
163 
164  try {
165  addHashesToDatabaseButton.setEnabled(!ingestIsRunning && db.isUpdateable());
166  } catch (TskCoreException ex) {
167  Logger.getLogger(HashLookupSettingsPanel.class.getName()).log(Level.SEVERE, "Error identifying if the database is updateable.", ex); //NON-NLS
168  addHashesToDatabaseButton.setEnabled(false);
169  }
170 
171  // Update indexing components.
172  try {
173  if (db.isIndexing()) {
174  indexButton.setText(
175  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.indexing"));
176  hashDbIndexStatusLabel.setText(
177  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.indexGen"));
178  hashDbIndexStatusLabel.setForeground(Color.black);
179  indexButton.setEnabled(false);
180  } else if (db.hasIndex()) {
181  if (db.hasIndexOnly()) {
182  hashDbIndexStatusLabel.setText(
183  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.indexOnly"));
184  } else {
185  hashDbIndexStatusLabel.setText(
186  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.indexed"));
187  }
188  hashDbIndexStatusLabel.setForeground(Color.black);
189  if (db.canBeReIndexed()) {
190  indexButton.setText(
191  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.reIndex"));
192  indexButton.setEnabled(true);
193  } else {
194  indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
195  indexButton.setEnabled(false);
196  }
197  } else {
198  hashDbIndexStatusLabel.setText(
199  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexStatusText.noIndex"));
200  hashDbIndexStatusLabel.setForeground(Color.red);
201  indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
202  indexButton.setEnabled(true);
203  }
204  } catch (TskCoreException ex) {
205  Logger.getLogger(HashLookupSettingsPanel.class.getName()).log(Level.SEVERE, "Error getting index state of hash database", ex); //NON-NLS
206  hashDbIndexStatusLabel.setText(ERROR_GETTING_INDEX_STATUS_TEXT);
207  hashDbIndexStatusLabel.setForeground(Color.red);
208  indexButton.setText(NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.indexButtonText.index"));
209  indexButton.setEnabled(false);
210  }
211 
212  // Disable the indexing button if ingest is in progress.
213  if (ingestIsRunning) {
214  indexButton.setEnabled(false);
215  }
216 
217  // Update ingest option components.
219  sendIngestMessagesCheckBox.setEnabled(!ingestIsRunning && db.getSearchDuringIngest() && db.getKnownFilesType().equals(KnownFilesType.KNOWN_BAD));
220  optionsLabel.setEnabled(!ingestIsRunning);
221  optionsSeparator.setEnabled(!ingestIsRunning);
222 
223  // Update database action buttons.
224  createDatabaseButton.setEnabled(true);
225  importDatabaseButton.setEnabled(true);
226  deleteDatabaseButton.setEnabled(!ingestIsRunning);
227 
228  // Update ingest in progress warning label.
229  ingestWarningLabel.setVisible(ingestIsRunning);
230  }
231 
232  private static String shortenPath(String path) {
233  String shortenedPath = path;
234  if (shortenedPath.length() > 50) {
235  shortenedPath = shortenedPath.substring(0, 10 + shortenedPath.substring(10).indexOf(File.separator) + 1) + "..." + shortenedPath.substring((shortenedPath.length() - 20) + shortenedPath.substring(shortenedPath.length() - 20).indexOf(File.separator));
236  }
237  return shortenedPath;
238  }
239 
240  private boolean isLocalIngestJobEvent(PropertyChangeEvent evt) {
241  if (evt instanceof AutopsyEvent) {
242  AutopsyEvent event = (AutopsyEvent) evt;
243  if (event.getSourceType() == AutopsyEvent.SourceType.LOCAL) {
244  String eventType = event.getPropertyName();
245  return (eventType.equals(IngestManager.IngestJobEvent.STARTED.toString())
246  || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())
247  || eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()));
248  }
249  }
250  return false;
251  }
252 
253  @Override
254  public void saveSettings() {
255  //Checking for for any unindexed databases
256  List<HashDb> unindexed = new ArrayList<>();
257  for (HashDb hashSet : hashSetManager.getAllHashSets()) {
258  try {
259  if (!hashSet.hasIndex()) {
260  unindexed.add(hashSet);
261  }
262  } catch (TskCoreException ex) {
263  Logger.getLogger(HashLookupSettingsPanel.class.getName()).log(Level.SEVERE, "Error getting index info for hash database", ex); //NON-NLS
264  }
265  }
266 
267  //If unindexed ones are found, show a popup box that will either index them, or remove them.
268  if (unindexed.size() == 1) {
269  showInvalidIndex(false, unindexed);
270  } else if (unindexed.size() > 1) {
271  showInvalidIndex(true, unindexed);
272  }
273 
274  hashSetManager.save();
275  }
276 
277  @Override
278  public void load() {
279  hashSetTable.clearSelection();
280  hashSetTableModel.refreshModel();
281  }
282 
283  @Override
284  public void store() {
285  saveSettings();
286  }
287 
288  public void cancel() {
289  /*
290  * Revert back to last settings only if the user could have made
291  * changes. Doing this while ingest is running causes hash dbs to be
292  * closed while they are still being used.
293  */
294  if (IngestManager.getInstance().isIngestRunning() == false) {
296  }
297  }
298 
299  void removeThese(List<HashDb> toRemove) {
300  for (HashDb hashDb : toRemove) {
301  hashSetManager.removeHashDatabaseInternal(hashDb);
302  }
303  hashSetTableModel.refreshModel();
304  }
305 
314  private void showInvalidIndex(boolean plural, List<HashDb> unindexed) {
315  String total = "";
316  String message;
317  for (HashDb hdb : unindexed) {
318  total += "\n" + hdb.getHashSetName();
319  }
320  if (plural) {
321  message = NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.dbsNotIndexedMsg", total);
322  } else {
323  message = NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.dbNotIndexedMsg", total);
324  }
325  int res = JOptionPane.showConfirmDialog(this, message,
326  NbBundle.getMessage(this.getClass(),
327  "HashDbConfigPanel.unindexedDbsMsg"),
328  JOptionPane.YES_NO_OPTION);
329  if (res == JOptionPane.YES_OPTION) {
330  ModalNoButtons indexingDialog = new ModalNoButtons(this, new Frame(), unindexed);
331  indexingDialog.setLocationRelativeTo(null);
332  indexingDialog.setVisible(true);
333  indexingDialog.setModal(true);
334  hashSetTableModel.refreshModel();
335  }
336  if (res == JOptionPane.NO_OPTION) {
337  JOptionPane.showMessageDialog(this, NbBundle.getMessage(this.getClass(),
338  "HashDbConfigPanel.allUnindexedDbsRmFromListMsg"));
339  removeThese(unindexed);
340  }
341  }
342 
343  boolean valid() {
344  return true;
345  }
346 
350  private class HashSetTable extends JTable {
351 
352  @Override
353  public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
354  // Use the hash set name as the cell text.
355  JComponent cellRenderer = (JComponent) super.prepareRenderer(renderer, row, column);
356  cellRenderer.setToolTipText((String) getValueAt(row, column));
357 
358  // Give the user a visual indication of any hash sets with a hash
359  // database that needs to be indexed by displaying the hash set name
360  // in red.
361  if (hashSetTableModel.indexExists(row)) {
362  cellRenderer.setForeground(Color.black);
363  } else {
364  cellRenderer.setForeground(Color.red);
365  }
366 
367  return cellRenderer;
368  }
369 
370  public HashDb getSelection() {
371  return hashSetTableModel.getHashSetAt(getSelectionModel().getMinSelectionIndex());
372  }
373 
374  public void setSelection(int index) {
375  if (index >= 0 && index < hashSetTable.getRowCount()) {
376  getSelectionModel().setSelectionInterval(index, index);
377  }
378  }
379 
380  public void selectRowByName(String name) {
381  setSelection(hashSetTableModel.getIndexByName(name));
382  }
383  }
384 
389  private class HashSetTableModel extends AbstractTableModel {
390 
391  List<HashDb> hashSets = HashDbManager.getInstance().getAllHashSets();
392 
393  @Override
394  public int getColumnCount() {
395  return 1;
396  }
397 
398  @Override
399  public int getRowCount() {
400  return hashSets.size();
401  }
402 
403  @Override
404  public String getColumnName(int column) {
405  return NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.nameColLbl");
406  }
407 
408  @Override
409  public Object getValueAt(int rowIndex, int columnIndex) {
410  return hashSets.get(rowIndex).getHashSetName();
411  }
412 
413  private boolean indexExists(int rowIndex) {
414  try {
415  return hashSets.get(rowIndex).hasIndex();
416  } catch (TskCoreException ex) {
417  Logger.getLogger(HashSetTableModel.class.getName()).log(Level.SEVERE, "Error getting index info for hash database", ex); //NON-NLS
418  return false;
419  }
420  }
421 
422  @Override
423  public boolean isCellEditable(int rowIndex, int columnIndex) {
424  return false;
425  }
426 
427  @Override
428  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
429  throw new UnsupportedOperationException(
430  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.editingCellsNotSupportedMsg"));
431  }
432 
433  @Override
434  public Class<?> getColumnClass(int c) {
435  return getValueAt(0, c).getClass();
436  }
437 
438  HashDb getHashSetAt(int index) {
439  if (!hashSets.isEmpty() && index >= 0 && index < hashSets.size()) {
440  return hashSets.get(index);
441  } else {
442  return null;
443  }
444  }
445 
446  int getIndexByName(String name) {
447  for (int i = 0; i < hashSets.size(); ++i) {
448  if (hashSets.get(i).getHashSetName().equals(name)) {
449  return i;
450  }
451  }
452  return -1;
453  }
454 
455  void refreshModel() {
456  hashSets = HashDbManager.getInstance().getAllHashSets();
457  refreshDisplay();
458  }
459 
460  void refreshDisplay() {
461  fireTableDataChanged();
462  }
463  }
464 
470  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
471  private void initComponents() {
472 
473  jLabel2 = new javax.swing.JLabel();
474  jLabel4 = new javax.swing.JLabel();
475  jLabel6 = new javax.swing.JLabel();
476  jButton3 = new javax.swing.JButton();
477  jScrollPane2 = new javax.swing.JScrollPane();
478  jPanel1 = new javax.swing.JPanel();
479  ingestWarningLabel = new javax.swing.JLabel();
480  jScrollPane1 = new javax.swing.JScrollPane();
481  hashSetTable = new HashSetTable();
482  deleteDatabaseButton = new javax.swing.JButton();
483  importDatabaseButton = new javax.swing.JButton();
484  hashDatabasesLabel = new javax.swing.JLabel();
485  nameLabel = new javax.swing.JLabel();
486  hashDbNameLabel = new javax.swing.JLabel();
487  hashDbLocationLabel = new javax.swing.JLabel();
488  locationLabel = new javax.swing.JLabel();
489  typeLabel = new javax.swing.JLabel();
490  hashDbTypeLabel = new javax.swing.JLabel();
491  hashDbIndexStatusLabel = new javax.swing.JLabel();
492  indexLabel = new javax.swing.JLabel();
493  indexButton = new javax.swing.JButton();
494  sendIngestMessagesCheckBox = new javax.swing.JCheckBox();
495  informationLabel = new javax.swing.JLabel();
496  optionsLabel = new javax.swing.JLabel();
497  informationSeparator = new javax.swing.JSeparator();
498  optionsSeparator = new javax.swing.JSeparator();
499  createDatabaseButton = new javax.swing.JButton();
500  indexPathLabelLabel = new javax.swing.JLabel();
501  indexPathLabel = new javax.swing.JLabel();
502  addHashesToDatabaseButton = new javax.swing.JButton();
503 
504  jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
505  org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.jLabel2.text")); // NOI18N
506 
507  jLabel4.setFont(jLabel4.getFont().deriveFont(jLabel4.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
508  org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.jLabel4.text")); // NOI18N
509 
510  jLabel6.setFont(jLabel6.getFont().deriveFont(jLabel6.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
511  org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.jLabel6.text")); // NOI18N
512 
513  jButton3.setFont(jButton3.getFont().deriveFont(jButton3.getFont().getStyle() & ~java.awt.Font.BOLD, 14));
514  org.openide.awt.Mnemonics.setLocalizedText(jButton3, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.jButton3.text")); // NOI18N
515 
516  setMinimumSize(new java.awt.Dimension(700, 430));
517  setPreferredSize(new java.awt.Dimension(700, 430));
518 
519  jPanel1.setPreferredSize(new java.awt.Dimension(671, 430));
520 
521  ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
522  ingestWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png"))); // NOI18N
523  org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.ingestWarningLabel.text")); // NOI18N
524 
525  hashSetTable.setFont(hashSetTable.getFont().deriveFont(hashSetTable.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
526  hashSetTable.setModel(new javax.swing.table.DefaultTableModel(
527  new Object [][] {
528 
529  },
530  new String [] {
531 
532  }
533  ));
534  hashSetTable.setShowHorizontalLines(false);
535  hashSetTable.setShowVerticalLines(false);
536  hashSetTable.addKeyListener(new java.awt.event.KeyAdapter() {
537  public void keyPressed(java.awt.event.KeyEvent evt) {
539  }
540  });
541  jScrollPane1.setViewportView(hashSetTable);
542 
543  deleteDatabaseButton.setFont(deleteDatabaseButton.getFont().deriveFont(deleteDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
544  deleteDatabaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/delete16.png"))); // NOI18N
545  org.openide.awt.Mnemonics.setLocalizedText(deleteDatabaseButton, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.deleteDatabaseButton.text")); // NOI18N
546  deleteDatabaseButton.setMaximumSize(new java.awt.Dimension(140, 25));
547  deleteDatabaseButton.setMinimumSize(new java.awt.Dimension(140, 25));
548  deleteDatabaseButton.setPreferredSize(new java.awt.Dimension(140, 25));
549  deleteDatabaseButton.addActionListener(new java.awt.event.ActionListener() {
550  public void actionPerformed(java.awt.event.ActionEvent evt) {
552  }
553  });
554 
555  importDatabaseButton.setFont(importDatabaseButton.getFont().deriveFont(importDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
556  importDatabaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/import16.png"))); // NOI18N
557  org.openide.awt.Mnemonics.setLocalizedText(importDatabaseButton, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.importDatabaseButton.text")); // NOI18N
558  importDatabaseButton.setMaximumSize(new java.awt.Dimension(140, 25));
559  importDatabaseButton.setMinimumSize(new java.awt.Dimension(140, 25));
560  importDatabaseButton.setPreferredSize(new java.awt.Dimension(140, 25));
561  importDatabaseButton.addActionListener(new java.awt.event.ActionListener() {
562  public void actionPerformed(java.awt.event.ActionEvent evt) {
564  }
565  });
566 
567  hashDatabasesLabel.setFont(hashDatabasesLabel.getFont().deriveFont(hashDatabasesLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
568  org.openide.awt.Mnemonics.setLocalizedText(hashDatabasesLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.hashDatabasesLabel.text")); // NOI18N
569 
570  nameLabel.setFont(nameLabel.getFont().deriveFont(nameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
571  org.openide.awt.Mnemonics.setLocalizedText(nameLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.nameLabel.text")); // NOI18N
572 
573  hashDbNameLabel.setFont(hashDbNameLabel.getFont().deriveFont(hashDbNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
574  org.openide.awt.Mnemonics.setLocalizedText(hashDbNameLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.hashDbNameLabel.text")); // NOI18N
575 
576  hashDbLocationLabel.setFont(hashDbLocationLabel.getFont().deriveFont(hashDbLocationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
577  org.openide.awt.Mnemonics.setLocalizedText(hashDbLocationLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.hashDbLocationLabel.text")); // NOI18N
578 
579  locationLabel.setFont(locationLabel.getFont().deriveFont(locationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
580  org.openide.awt.Mnemonics.setLocalizedText(locationLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.locationLabel.text")); // NOI18N
581 
582  typeLabel.setFont(typeLabel.getFont().deriveFont(typeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
583  org.openide.awt.Mnemonics.setLocalizedText(typeLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.typeLabel.text")); // NOI18N
584 
585  hashDbTypeLabel.setFont(hashDbTypeLabel.getFont().deriveFont(hashDbTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
586  org.openide.awt.Mnemonics.setLocalizedText(hashDbTypeLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.hashDbTypeLabel.text")); // NOI18N
587 
588  hashDbIndexStatusLabel.setFont(hashDbIndexStatusLabel.getFont().deriveFont(hashDbIndexStatusLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
589  org.openide.awt.Mnemonics.setLocalizedText(hashDbIndexStatusLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.hashDbIndexStatusLabel.text")); // NOI18N
590 
591  indexLabel.setFont(indexLabel.getFont().deriveFont(indexLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
592  org.openide.awt.Mnemonics.setLocalizedText(indexLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.indexLabel.text")); // NOI18N
593 
594  indexButton.setFont(indexButton.getFont().deriveFont(indexButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
595  org.openide.awt.Mnemonics.setLocalizedText(indexButton, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.indexButton.text")); // NOI18N
596  indexButton.setEnabled(false);
597  indexButton.addActionListener(new java.awt.event.ActionListener() {
598  public void actionPerformed(java.awt.event.ActionEvent evt) {
600  }
601  });
602 
603  sendIngestMessagesCheckBox.setFont(sendIngestMessagesCheckBox.getFont().deriveFont(sendIngestMessagesCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
604  org.openide.awt.Mnemonics.setLocalizedText(sendIngestMessagesCheckBox, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.sendIngestMessagesCheckBox.text")); // NOI18N
605  sendIngestMessagesCheckBox.addActionListener(new java.awt.event.ActionListener() {
606  public void actionPerformed(java.awt.event.ActionEvent evt) {
608  }
609  });
610 
611  informationLabel.setFont(informationLabel.getFont().deriveFont(informationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
612  org.openide.awt.Mnemonics.setLocalizedText(informationLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.informationLabel.text")); // NOI18N
613 
614  optionsLabel.setFont(optionsLabel.getFont().deriveFont(optionsLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
615  org.openide.awt.Mnemonics.setLocalizedText(optionsLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.optionsLabel.text")); // NOI18N
616 
617  createDatabaseButton.setFont(createDatabaseButton.getFont().deriveFont(createDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
618  createDatabaseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/hashdatabase/new16.png"))); // NOI18N
619  org.openide.awt.Mnemonics.setLocalizedText(createDatabaseButton, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.createDatabaseButton.text")); // NOI18N
620  createDatabaseButton.setMaximumSize(new java.awt.Dimension(140, 25));
621  createDatabaseButton.setMinimumSize(new java.awt.Dimension(140, 25));
622  createDatabaseButton.setPreferredSize(new java.awt.Dimension(140, 25));
623  createDatabaseButton.addActionListener(new java.awt.event.ActionListener() {
624  public void actionPerformed(java.awt.event.ActionEvent evt) {
626  }
627  });
628 
629  indexPathLabelLabel.setFont(indexPathLabelLabel.getFont().deriveFont(indexPathLabelLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
630  org.openide.awt.Mnemonics.setLocalizedText(indexPathLabelLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.indexPathLabelLabel.text")); // NOI18N
631 
632  indexPathLabel.setFont(indexPathLabel.getFont().deriveFont(indexPathLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
633  org.openide.awt.Mnemonics.setLocalizedText(indexPathLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.indexPathLabel.text")); // NOI18N
634 
635  addHashesToDatabaseButton.setFont(addHashesToDatabaseButton.getFont().deriveFont(addHashesToDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
636  org.openide.awt.Mnemonics.setLocalizedText(addHashesToDatabaseButton, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.addHashesToDatabaseButton.text")); // NOI18N
637  addHashesToDatabaseButton.setEnabled(false);
638  addHashesToDatabaseButton.addActionListener(new java.awt.event.ActionListener() {
639  public void actionPerformed(java.awt.event.ActionEvent evt) {
641  }
642  });
643 
644  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
645  jPanel1.setLayout(jPanel1Layout);
646  jPanel1Layout.setHorizontalGroup(
647  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
648  .addGroup(jPanel1Layout.createSequentialGroup()
649  .addContainerGap()
650  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
651  .addGroup(jPanel1Layout.createSequentialGroup()
652  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
653  .addGroup(jPanel1Layout.createSequentialGroup()
654  .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
655  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
656  .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE))
657  .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE))
658  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
659  .addGroup(jPanel1Layout.createSequentialGroup()
660  .addGap(10, 10, 10)
661  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
662  .addGroup(jPanel1Layout.createSequentialGroup()
663  .addComponent(informationLabel)
664  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
665  .addComponent(informationSeparator))
666  .addComponent(ingestWarningLabel)
667  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
668  .addGap(10, 10, 10)
669  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
670  .addGroup(jPanel1Layout.createSequentialGroup()
671  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
672  .addComponent(locationLabel)
673  .addComponent(indexButton, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
674  .addComponent(typeLabel)
675  .addComponent(indexLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE)
676  .addComponent(indexPathLabelLabel))
677  .addGap(10, 10, 10)
678  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
679  .addComponent(hashDbTypeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
680  .addComponent(hashDbLocationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
681  .addComponent(indexPathLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
682  .addComponent(hashDbIndexStatusLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
683  .addGroup(jPanel1Layout.createSequentialGroup()
684  .addComponent(addHashesToDatabaseButton)
685  .addGap(0, 0, Short.MAX_VALUE))))
686  .addGroup(jPanel1Layout.createSequentialGroup()
687  .addComponent(nameLabel)
688  .addGap(53, 53, 53)
689  .addComponent(hashDbNameLabel)
690  .addGap(0, 0, Short.MAX_VALUE))))
691  .addGroup(jPanel1Layout.createSequentialGroup()
692  .addComponent(optionsLabel)
693  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
694  .addComponent(optionsSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 324, javax.swing.GroupLayout.PREFERRED_SIZE))))
695  .addGroup(jPanel1Layout.createSequentialGroup()
696  .addGap(23, 23, 23)
697  .addComponent(sendIngestMessagesCheckBox)
698  .addGap(0, 0, Short.MAX_VALUE))))
699  .addGroup(jPanel1Layout.createSequentialGroup()
700  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
701  .addComponent(hashDatabasesLabel)
702  .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE))
703  .addGap(0, 0, Short.MAX_VALUE)))
704  .addContainerGap())
705  );
706  jPanel1Layout.setVerticalGroup(
707  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
708  .addGroup(jPanel1Layout.createSequentialGroup()
709  .addContainerGap()
710  .addComponent(hashDatabasesLabel)
711  .addGap(6, 6, 6)
712  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
713  .addGroup(jPanel1Layout.createSequentialGroup()
714  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
715  .addComponent(informationLabel)
716  .addGroup(jPanel1Layout.createSequentialGroup()
717  .addGap(7, 7, 7)
718  .addComponent(informationSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 3, javax.swing.GroupLayout.PREFERRED_SIZE)))
719  .addGap(7, 7, 7)
720  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
721  .addComponent(nameLabel)
722  .addComponent(hashDbNameLabel))
723  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
724  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
725  .addComponent(typeLabel)
726  .addComponent(hashDbTypeLabel))
727  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
728  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
729  .addComponent(locationLabel)
730  .addComponent(hashDbLocationLabel))
731  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
732  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
733  .addComponent(indexPathLabelLabel)
734  .addComponent(indexPathLabel))
735  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
736  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
737  .addComponent(indexLabel)
738  .addComponent(hashDbIndexStatusLabel))
739  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
740  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
741  .addComponent(indexButton)
742  .addComponent(addHashesToDatabaseButton))
743  .addGap(18, 18, 18)
744  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
745  .addComponent(optionsLabel)
746  .addComponent(optionsSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE))
747  .addGap(18, 18, 18)
748  .addComponent(sendIngestMessagesCheckBox)
749  .addGap(18, 18, 18)
750  .addComponent(ingestWarningLabel))
751  .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 304, javax.swing.GroupLayout.PREFERRED_SIZE))
752  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
753  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
754  .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
755  .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
756  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
757  .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
758  .addContainerGap(33, Short.MAX_VALUE))
759  );
760 
761  jScrollPane2.setViewportView(jPanel1);
762 
763  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
764  this.setLayout(layout);
765  layout.setHorizontalGroup(
766  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
767  .addGroup(layout.createSequentialGroup()
768  .addContainerGap()
769  .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 690, Short.MAX_VALUE))
770  );
771  layout.setVerticalGroup(
772  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
773  .addGroup(layout.createSequentialGroup()
774  .addContainerGap()
775  .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 410, javax.swing.GroupLayout.PREFERRED_SIZE)
776  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
777  );
778  }// </editor-fold>//GEN-END:initComponents
779 
780  private void indexButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_indexButtonActionPerformed
781  final HashDb hashDb = ((HashSetTable) hashSetTable).getSelection();
782  assert hashDb != null;
783 
784  // Add a listener for the INDEXING_DONE event. This listener will update
785  // the UI.
786  hashDb.addPropertyChangeListener(new PropertyChangeListener() {
787  @Override
788  public void propertyChange(PropertyChangeEvent evt) {
789  if (evt.getPropertyName().equals(HashDb.Event.INDEXING_DONE.toString())) {
790  HashDb selectedHashDb = ((HashSetTable) hashSetTable).getSelection();
791  if (selectedHashDb != null && hashDb != null && hashDb.equals(selectedHashDb)) {
793  }
794  hashSetTableModel.refreshDisplay();
795  }
796  }
797  });
798 
799  // Display a modal dialog box to kick off the indexing on a worker thread
800  // and try to persuade the user to wait for the indexing task to finish.
801  // TODO: If the user waits, this defeats the purpose of doing the indexing on a worker thread.
802  // But if the user cancels the dialog, other operations on the database
803  // may be attempted when it is not in a suitable state.
804  ModalNoButtons indexDialog = new ModalNoButtons(this, new Frame(), hashDb);
805  indexDialog.setLocationRelativeTo(null);
806  indexDialog.setVisible(true);
807  indexDialog.setModal(true);
808  }//GEN-LAST:event_indexButtonActionPerformed
809 
810  private void deleteDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteDatabaseButtonActionPerformed
811  if (JOptionPane.showConfirmDialog(null,
812  NbBundle.getMessage(this.getClass(),
813  "HashDbConfigPanel.deleteDbActionConfirmMsg"),
814  NbBundle.getMessage(this.getClass(), "HashDbConfigPanel.deleteDbActionMsg"),
815  JOptionPane.YES_NO_OPTION,
816  JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
817  HashDb hashDb = ((HashSetTable) hashSetTable).getSelection();
818  if (hashDb != null) {
819  hashSetManager.removeHashDatabaseInternal(hashDb);
820  hashSetTableModel.refreshModel();
821  }
822  }
823  }//GEN-LAST:event_deleteDatabaseButtonActionPerformed
824 
825  private void hashSetTableKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_hashSetTableKeyPressed
826  if (evt.getKeyCode() == KeyEvent.VK_DELETE) {
827  HashDb hashDb = ((HashSetTable) hashSetTable).getSelection();
828  if (hashDb != null) {
829  hashSetManager.removeHashDatabaseInternal(hashDb);
830  hashSetTableModel.refreshModel();
831  }
832  }
833  }//GEN-LAST:event_hashSetTableKeyPressed
834 
835  private void sendIngestMessagesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendIngestMessagesCheckBoxActionPerformed
836  HashDb hashDb = ((HashSetTable) hashSetTable).getSelection();
837  if (hashDb != null) {
838  hashDb.setSendIngestMessages(sendIngestMessagesCheckBox.isSelected());
839  }
840  }//GEN-LAST:event_sendIngestMessagesCheckBoxActionPerformed
841 
842  private void importDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importDatabaseButtonActionPerformed
843  HashDb hashDb = new HashDbImportDatabaseDialog().getHashDatabase();
844  if (null != hashDb) {
845  hashSetTableModel.refreshModel();
846  ((HashSetTable) hashSetTable).selectRowByName(hashDb.getHashSetName());
847  }
848  }//GEN-LAST:event_importDatabaseButtonActionPerformed
849 
850  private void createDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createDatabaseButtonActionPerformed
851  HashDb hashDb = new HashDbCreateDatabaseDialog().getHashDatabase();
852  if (null != hashDb) {
853  hashSetTableModel.refreshModel();
854  ((HashSetTable) hashSetTable).selectRowByName(hashDb.getHashSetName());
855  }
856  }//GEN-LAST:event_createDatabaseButtonActionPerformed
857 
858  private void addHashesToDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addHashesToDatabaseButtonActionPerformed
859 
860  HashDb hashDb = ((HashSetTable) hashSetTable).getSelection();
861  new AddHashValuesToDatabaseDialog(hashDb);
862  }//GEN-LAST:event_addHashesToDatabaseButtonActionPerformed
863 
864  // Variables declaration - do not modify//GEN-BEGIN:variables
865  private javax.swing.JButton addHashesToDatabaseButton;
866  private javax.swing.JButton createDatabaseButton;
867  private javax.swing.JButton deleteDatabaseButton;
868  private javax.swing.JLabel hashDatabasesLabel;
869  private javax.swing.JLabel hashDbIndexStatusLabel;
870  private javax.swing.JLabel hashDbLocationLabel;
871  private javax.swing.JLabel hashDbNameLabel;
872  private javax.swing.JLabel hashDbTypeLabel;
873  private javax.swing.JTable hashSetTable;
874  private javax.swing.JButton importDatabaseButton;
875  private javax.swing.JButton indexButton;
876  private javax.swing.JLabel indexLabel;
877  private javax.swing.JLabel indexPathLabel;
878  private javax.swing.JLabel indexPathLabelLabel;
879  private javax.swing.JLabel informationLabel;
880  private javax.swing.JSeparator informationSeparator;
881  private javax.swing.JLabel ingestWarningLabel;
882  private javax.swing.JButton jButton3;
883  private javax.swing.JLabel jLabel2;
884  private javax.swing.JLabel jLabel4;
885  private javax.swing.JLabel jLabel6;
886  private javax.swing.JPanel jPanel1;
887  private javax.swing.JScrollPane jScrollPane1;
888  private javax.swing.JScrollPane jScrollPane2;
889  private javax.swing.JLabel locationLabel;
890  private javax.swing.JLabel nameLabel;
891  private javax.swing.JLabel optionsLabel;
892  private javax.swing.JSeparator optionsSeparator;
893  private javax.swing.JCheckBox sendIngestMessagesCheckBox;
894  private javax.swing.JLabel typeLabel;
895  // End of variables declaration//GEN-END:variables
896 }
static synchronized IngestManager getInstance()
Component prepareRenderer(TableCellRenderer renderer, int row, int column)
void addIngestJobEventListener(final PropertyChangeListener listener)
synchronized static Logger getLogger(String name)
Definition: Logger.java:166

Copyright © 2012-2015 Basis Technology. Generated on: Wed Apr 6 2016
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.