Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
GlobalSettingsPanel.java
Go to the documentation of this file.
1/*
2 * Central Repository
3 *
4 * Copyright 2015-2020 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 */
19package org.sleuthkit.autopsy.centralrepository.optionspanel;
20
21import java.awt.EventQueue;
22import org.sleuthkit.autopsy.coreutils.Logger;
23import java.beans.PropertyChangeEvent;
24import java.beans.PropertyChangeListener;
25import java.util.EnumSet;
26import java.util.Set;
27import javax.swing.JOptionPane;
28import javax.swing.SwingUtilities;
29import org.netbeans.spi.options.OptionsPanelController;
30import org.openide.util.NbBundle;
31import org.openide.util.NbBundle.Messages;
32import org.sleuthkit.autopsy.casemodule.Case;
33import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoDbManager;
34import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
35import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoPlatforms;
36import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
37import org.sleuthkit.autopsy.events.AutopsyEvent;
38import org.sleuthkit.autopsy.ingest.IngestManager;
39import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel;
40import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoDbChoice;
41import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoDbUtil;
42import org.sleuthkit.autopsy.centralrepository.datamodel.PostgresCentralRepoSettings;
43import org.sleuthkit.autopsy.centralrepository.datamodel.SqliteCentralRepoSettings;
44import java.awt.Component;
45import java.beans.PropertyChangeSupport;
46import java.util.logging.Level;
47import javax.swing.ImageIcon;
48import org.openide.util.ImageUtilities;
49import org.sleuthkit.autopsy.centralrepository.datamodel.DatabaseTestResult;
50import org.sleuthkit.autopsy.centralrepository.datamodel.PostgresSettingsLoader;
51
52
53
57@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
59
60 private static final long serialVersionUID = 1L;
61 private static final Logger logger = Logger.getLogger(GlobalSettingsPanel.class.getName());
63
64 // this allows property change events to be fired at a static level but listened to by instances
65 private static final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(GlobalSettingsPanel.class);
66
67 // tracks the last known instance property change listener so that only one GlobalSettingsPanel is listening for events
68 private static PropertyChangeListener lastRegistered = null;
69
71
72 private final ImageIcon goodIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/good.png", false));
73 private final ImageIcon badIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/bad.png", false));
74
75
85 Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), (PropertyChangeEvent evt) -> {
86 //disable when case is open, enable when case is closed
87 ingestStateUpdated(evt.getNewValue() != null);
88 });
89 }
90
91
96 // listen for change events in currently saved choice
97 if (lastRegistered != null) {
99 GlobalSettingsPanel.propertyChangeSupport.removePropertyChangeListener(lastRegistered);
100 }
101
102 lastRegistered = this::onSettingsChange;
104 GlobalSettingsPanel.propertyChangeSupport.addPropertyChangeListener(lastRegistered);
105 }
106
107
108 private void onSettingsChange(PropertyChangeEvent evt) {
110 clearStatus();
111 }
112
113
114 private void customizeComponents() {
115 setName(NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.pnCorrelationProperties.border.title"));
116 }
117
122
134 private static boolean invokeCrChoice(Component parent, CentralRepoDbChoice initialSelection) {
135 EamDbSettingsDialog dialog = (initialSelection != null)
136 ? new EamDbSettingsDialog(initialSelection)
137 : new EamDbSettingsDialog();
138 return dialog.wasConfigurationChanged();
139 }
140
154 @NbBundle.Messages({
155 "GlobalSettingsPanel.onMultiUserChange.enable.title=Central Repository",
156 "# {0} - server name",
157 "GlobalSettingsPanel.onMultiUserChange.enable.description=Do you want to update the Central Repository to use the PostgreSQL server on {0}?",
158 "GlobalSettingsPanel.onMultiUserChange.enable.description2=Any data in an existing SQLite Central Repository will not be transferred to the new database."
159 })
160 public static void onMultiUserChange(Component parent, boolean muPreviouslySelected, boolean muCurrentlySelected) {
163
164 if (!muPreviouslySelected && muCurrentlySelected) {
165 SwingUtilities.invokeLater(() -> {
166 PostgresCentralRepoSettings multiUserSettings
168 if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(parent,
169 "<html><body>"
170 + "<div style='width: 400px;'>"
171 + "<p>" + Bundle.GlobalSettingsPanel_onMultiUserChange_enable_description(multiUserSettings.getHost()) + "</p>"
172 + "<p style='margin-top: 10px'>" + Bundle.GlobalSettingsPanel_onMultiUserChange_enable_description2() + "</p>"
173 + "</div>"
174 + "</body></html>",
175 Bundle.GlobalSettingsPanel_onMultiUserChange_enable_title(),
176 JOptionPane.YES_NO_OPTION)) {
177
178 // setup database for CR
182 }
183 });
184 } // moving from selected to not selected && 'PostgreSQL using multi-user settings' is selected
185 else if (muPreviouslySelected && !muCurrentlySelected && crEnabled && crMultiUser) {
186 SwingUtilities.invokeLater(() -> {
188 });
189 } // changing multi-user settings connection && 'PostgreSQL using multi-user settings' is selected &&
190 // central repo either enabled or was disabled due to error
191 else if (muPreviouslySelected && muCurrentlySelected && crEnabled && crMultiUser) {
192 GlobalSettingsPanel.propertyChangeSupport.firePropertyChange("multiuserSettingsChanged", null, null);
194 }
195 }
196
197
203 private static void checkStatusAndCreateDb(Component parent) {
204 SwingUtilities.invokeLater(() -> {
206 });
207 }
208
216 @NbBundle.Messages({
217 "GlobalSettingsPanel.onMultiUserChange.disabledMu.title=Central Repository Change Necessary",
218 "GlobalSettingsPanel.onMultiUserChange.disabledMu.description=The Central Repository will be reconfigured to use a local SQLite database.",
219 "GlobalSettingsPanel.onMultiUserChange.disabledMu.description2=Press Configure PostgreSQL to change to a PostgreSQL database.",
220 "GlobalSettingsPanel.askForCentralRepoDbChoice.sqliteChoice.text=Use SQLite",
221 "GlobalSettingsPanel.askForCentralRepoDbChoice.customPostgrestChoice.text=Configure PostgreSQL",
222 "GlobalSettingsPanel.askForCentralRepoDbChoice.disableChoice.text=Disable Central Repository"
223 })
224 private static void askForCentralRepoDbChoice(Component parent) {
225 Object[] options = {
226 Bundle.GlobalSettingsPanel_askForCentralRepoDbChoice_sqliteChoice_text(),
227 Bundle.GlobalSettingsPanel_askForCentralRepoDbChoice_customPostgrestChoice_text(),
228 Bundle.GlobalSettingsPanel_askForCentralRepoDbChoice_disableChoice_text()
229 };
230
231 int result = JOptionPane.showOptionDialog(
232 parent,
233 "<html><body>"
234 + "<div style='width: 400px;'>"
235 + "<p>" + Bundle.GlobalSettingsPanel_onMultiUserChange_disabledMu_description() + "</p>"
236 + "<p style='margin-top: 10px'>" + Bundle.GlobalSettingsPanel_onMultiUserChange_disabledMu_description2() + "</p>"
237 + "</div>"
238 + "</body></html>",
239 Bundle.GlobalSettingsPanel_onMultiUserChange_disabledMu_title(),
240 JOptionPane.YES_NO_CANCEL_OPTION,
241 JOptionPane.PLAIN_MESSAGE,
242 null,
243 options,
244 options[0]
245 );
246
247 if (JOptionPane.YES_OPTION == result) {
249 } else if (JOptionPane.NO_OPTION == result) {
251 }
252 }
253
254 @NbBundle.Messages({
255 "GlobalSettingsPanel.testCurrentConfiguration.dbDoesNotExist.message=Database does not exist.",
256 })
257 private boolean testCurrentConfiguration() {
258 if (CentralRepoDbManager.getSavedDbChoice() == null ||
261 return false;
262
264 DatabaseTestResult testResult = manager.testStatus();
265
266 // if database doesn't exist, prompt user to create database
267 if (testResult == DatabaseTestResult.DB_DOES_NOT_EXIST) {
268 boolean success = EamDbSettingsDialog.promptCreateDatabase(manager, null);
269 if (success)
270 testResult = DatabaseTestResult.TESTED_OK;
271 }
272
273 // display to the user the status
274 switch (testResult) {
275 case TESTED_OK: return showStatusOkay();
276 case DB_DOES_NOT_EXIST: return showStatusFail(Bundle.GlobalSettingsPanel_testCurrentConfiguration_dbDoesNotExist_message());
277 case SCHEMA_INVALID: return showStatusFail(Bundle.EamDbSettingsDialog_okButton_corruptDatabaseExists_message());
278 case CONNECTION_FAILED:
279 default:
280 return showStatusFail(Bundle.EamDbSettingsDialog_okButton_databaseConnectionFailed_message());
281 }
282 }
283
284 private boolean showStatusOkay() {
285 return setStatus(goodIcon, " ");
286 }
287
288 private boolean showStatusFail(String message) {
289 return setStatus(badIcon, message);
290 }
291
292 private void clearStatus() {
293 setStatus(null, " ");
294 }
295
296 private boolean setStatus(ImageIcon icon, String text) {
297 synchronized (testStatusLabel) {
298 testStatusLabel.setIcon(icon);
299 testStatusLabel.setText(text);
300 return true;
301 }
302 }
303
309 @SuppressWarnings("unchecked")
310 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
311 private void initComponents() {
312
313 jScrollPane1 = new javax.swing.JScrollPane();
314 jPanel1 = new javax.swing.JPanel();
315 lbCentralRepository = new javax.swing.JLabel();
316 cbUseCentralRepo = new javax.swing.JCheckBox();
317 pnDatabaseConfiguration = new javax.swing.JPanel();
318 lbDbPlatformTypeLabel = new javax.swing.JLabel();
319 lbDbNameLabel = new javax.swing.JLabel();
320 lbDbLocationLabel = new javax.swing.JLabel();
321 bnDbConfigure = new javax.swing.JButton();
322 lbDbPlatformValue = new javax.swing.JLabel();
323 lbDbNameValue = new javax.swing.JLabel();
324 lbDbLocationValue = new javax.swing.JLabel();
325 bnTestConfigure = new javax.swing.JButton();
326 testStatusLabel = new javax.swing.JLabel();
327 pnCorrelationProperties = new javax.swing.JPanel();
328 bnManageTypes = new javax.swing.JButton();
329 correlationPropertiesScrollPane = new javax.swing.JScrollPane();
330 correlationPropertiesTextArea = new javax.swing.JTextArea();
331 organizationPanel = new javax.swing.JPanel();
332 manageOrganizationButton = new javax.swing.JButton();
333 organizationScrollPane = new javax.swing.JScrollPane();
334 organizationTextArea = new javax.swing.JTextArea();
335 casesPanel = new javax.swing.JPanel();
336 showCasesButton = new javax.swing.JButton();
337 casesScrollPane = new javax.swing.JScrollPane();
338 casesTextArea = new javax.swing.JTextArea();
339 tbOops = new javax.swing.JTextField();
340 ingestRunningWarningLabel = new javax.swing.JLabel();
341
342 setName(""); // NOI18N
343 setPreferredSize(new java.awt.Dimension(1022, 488));
344
345 jScrollPane1.setBorder(null);
346 jScrollPane1.setPreferredSize(new java.awt.Dimension(1022, 407));
347
348 jPanel1.setMinimumSize(new java.awt.Dimension(0, 0));
349 jPanel1.setPreferredSize(new java.awt.Dimension(1020, 407));
350
351 org.openide.awt.Mnemonics.setLocalizedText(lbCentralRepository, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.lbCentralRepository.text")); // NOI18N
352
353 org.openide.awt.Mnemonics.setLocalizedText(cbUseCentralRepo, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.cbUseCentralRepo.text")); // NOI18N
354 cbUseCentralRepo.addActionListener(new java.awt.event.ActionListener() {
355 public void actionPerformed(java.awt.event.ActionEvent evt) {
356 cbUseCentralRepoActionPerformed(evt);
357 }
358 });
359
360 pnDatabaseConfiguration.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.pnDatabaseConfiguration.title"))); // NOI18N
361
362 org.openide.awt.Mnemonics.setLocalizedText(lbDbPlatformTypeLabel, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.lbDbPlatformTypeLabel.text")); // NOI18N
363
364 org.openide.awt.Mnemonics.setLocalizedText(lbDbNameLabel, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.lbDbNameLabel.text")); // NOI18N
365
366 org.openide.awt.Mnemonics.setLocalizedText(lbDbLocationLabel, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.lbDbLocationLabel.text")); // NOI18N
367
368 org.openide.awt.Mnemonics.setLocalizedText(bnDbConfigure, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.bnDbConfigure.text")); // NOI18N
369 bnDbConfigure.addActionListener(new java.awt.event.ActionListener() {
370 public void actionPerformed(java.awt.event.ActionEvent evt) {
371 bnDbConfigureActionPerformed(evt);
372 }
373 });
374
375 org.openide.awt.Mnemonics.setLocalizedText(bnTestConfigure, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.bnTestConfigure.text")); // NOI18N
376 bnTestConfigure.addActionListener(new java.awt.event.ActionListener() {
377 public void actionPerformed(java.awt.event.ActionEvent evt) {
378 bnTestConfigureActionPerformed(evt);
379 }
380 });
381
382 testStatusLabel.setFont(testStatusLabel.getFont().deriveFont(testStatusLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
383 testStatusLabel.setForeground(new java.awt.Color(255, 0, 0));
384 org.openide.awt.Mnemonics.setLocalizedText(testStatusLabel, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.testStatusLabel.text")); // NOI18N
385 testStatusLabel.setToolTipText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.testStatusLabel.toolTipText")); // NOI18N
386 testStatusLabel.setMaximumSize(new java.awt.Dimension(387, 16));
387 testStatusLabel.setPreferredSize(new java.awt.Dimension(387, 16));
388
389 javax.swing.GroupLayout pnDatabaseConfigurationLayout = new javax.swing.GroupLayout(pnDatabaseConfiguration);
390 pnDatabaseConfiguration.setLayout(pnDatabaseConfigurationLayout);
391 pnDatabaseConfigurationLayout.setHorizontalGroup(
392 pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
393 .addGroup(pnDatabaseConfigurationLayout.createSequentialGroup()
394 .addContainerGap()
395 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
396 .addGroup(pnDatabaseConfigurationLayout.createSequentialGroup()
397 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
398 .addComponent(lbDbPlatformTypeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
399 .addComponent(lbDbNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
400 .addComponent(lbDbLocationLabel))
401 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
402 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
403 .addComponent(lbDbNameValue, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
404 .addComponent(lbDbPlatformValue, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
405 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnDatabaseConfigurationLayout.createSequentialGroup()
406 .addComponent(lbDbLocationValue, javax.swing.GroupLayout.DEFAULT_SIZE, 255, Short.MAX_VALUE)
407 .addGap(681, 681, 681))))
408 .addGroup(pnDatabaseConfigurationLayout.createSequentialGroup()
409 .addComponent(bnDbConfigure)
410 .addGap(18, 18, 18)
411 .addComponent(bnTestConfigure)
412 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
413 .addComponent(testStatusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 675, javax.swing.GroupLayout.PREFERRED_SIZE)
414 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
415 );
416 pnDatabaseConfigurationLayout.setVerticalGroup(
417 pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
418 .addGroup(pnDatabaseConfigurationLayout.createSequentialGroup()
419 .addGap(7, 7, 7)
420 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
421 .addComponent(lbDbPlatformTypeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
422 .addComponent(lbDbPlatformValue, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
423 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
424 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
425 .addComponent(lbDbNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
426 .addComponent(lbDbNameValue, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
427 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
428 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
429 .addComponent(lbDbLocationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
430 .addComponent(lbDbLocationValue, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
431 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
432 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
433 .addComponent(testStatusLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
434 .addGroup(pnDatabaseConfigurationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
435 .addComponent(bnDbConfigure)
436 .addComponent(bnTestConfigure)))
437 .addGap(8, 8, 8))
438 );
439
440 pnCorrelationProperties.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.pnCorrelationProperties.border.title"))); // NOI18N
441 pnCorrelationProperties.setPreferredSize(new java.awt.Dimension(674, 93));
442
443 org.openide.awt.Mnemonics.setLocalizedText(bnManageTypes, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.bnManageProperties.text")); // NOI18N
444 bnManageTypes.addActionListener(new java.awt.event.ActionListener() {
445 public void actionPerformed(java.awt.event.ActionEvent evt) {
446 bnManageTypesActionPerformed(evt);
447 }
448 });
449
450 correlationPropertiesScrollPane.setBorder(null);
451
452 correlationPropertiesTextArea.setEditable(false);
453 correlationPropertiesTextArea.setBackground(new java.awt.Color(240, 240, 240));
454 correlationPropertiesTextArea.setColumns(20);
455 correlationPropertiesTextArea.setLineWrap(true);
456 correlationPropertiesTextArea.setRows(1);
457 correlationPropertiesTextArea.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.correlationPropertiesTextArea.text")); // NOI18N
458 correlationPropertiesTextArea.setToolTipText("");
459 correlationPropertiesTextArea.setWrapStyleWord(true);
460 correlationPropertiesTextArea.setBorder(null);
461 correlationPropertiesTextArea.setOpaque(false);
462 correlationPropertiesScrollPane.setViewportView(correlationPropertiesTextArea);
463
464 javax.swing.GroupLayout pnCorrelationPropertiesLayout = new javax.swing.GroupLayout(pnCorrelationProperties);
465 pnCorrelationProperties.setLayout(pnCorrelationPropertiesLayout);
466 pnCorrelationPropertiesLayout.setHorizontalGroup(
467 pnCorrelationPropertiesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
468 .addGroup(pnCorrelationPropertiesLayout.createSequentialGroup()
469 .addContainerGap()
470 .addGroup(pnCorrelationPropertiesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
471 .addGroup(pnCorrelationPropertiesLayout.createSequentialGroup()
472 .addComponent(bnManageTypes)
473 .addGap(0, 0, Short.MAX_VALUE))
474 .addComponent(correlationPropertiesScrollPane))
475 .addContainerGap())
476 );
477 pnCorrelationPropertiesLayout.setVerticalGroup(
478 pnCorrelationPropertiesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
479 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnCorrelationPropertiesLayout.createSequentialGroup()
480 .addComponent(correlationPropertiesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 24, Short.MAX_VALUE)
481 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
482 .addComponent(bnManageTypes)
483 .addGap(8, 8, 8))
484 );
485
486 organizationPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.organizationPanel.border.title"))); // NOI18N
487
488 org.openide.awt.Mnemonics.setLocalizedText(manageOrganizationButton, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.manageOrganizationButton.text")); // NOI18N
489 manageOrganizationButton.addActionListener(new java.awt.event.ActionListener() {
490 public void actionPerformed(java.awt.event.ActionEvent evt) {
491 manageOrganizationButtonActionPerformed(evt);
492 }
493 });
494
495 organizationScrollPane.setBorder(null);
496
497 organizationTextArea.setEditable(false);
498 organizationTextArea.setBackground(new java.awt.Color(240, 240, 240));
499 organizationTextArea.setColumns(20);
500 organizationTextArea.setLineWrap(true);
501 organizationTextArea.setRows(2);
502 organizationTextArea.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.organizationTextArea.text")); // NOI18N
503 organizationTextArea.setWrapStyleWord(true);
504 organizationTextArea.setBorder(null);
505 organizationTextArea.setOpaque(false);
506 organizationScrollPane.setViewportView(organizationTextArea);
507
508 javax.swing.GroupLayout organizationPanelLayout = new javax.swing.GroupLayout(organizationPanel);
509 organizationPanel.setLayout(organizationPanelLayout);
510 organizationPanelLayout.setHorizontalGroup(
511 organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
512 .addGroup(organizationPanelLayout.createSequentialGroup()
513 .addContainerGap()
514 .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
515 .addComponent(organizationScrollPane)
516 .addGroup(organizationPanelLayout.createSequentialGroup()
517 .addComponent(manageOrganizationButton)
518 .addGap(0, 0, Short.MAX_VALUE)))
519 .addContainerGap())
520 );
521 organizationPanelLayout.setVerticalGroup(
522 organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
523 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, organizationPanelLayout.createSequentialGroup()
524 .addContainerGap()
525 .addComponent(organizationScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
526 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
527 .addComponent(manageOrganizationButton)
528 .addGap(8, 8, 8))
529 );
530
531 casesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.casesPanel.border.title"))); // NOI18N
532 casesPanel.setName("Case Details"); // NOI18N
533
534 org.openide.awt.Mnemonics.setLocalizedText(showCasesButton, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.showCasesButton.text")); // NOI18N
535 showCasesButton.addActionListener(new java.awt.event.ActionListener() {
536 public void actionPerformed(java.awt.event.ActionEvent evt) {
537 showCasesButtonActionPerformed(evt);
538 }
539 });
540
541 casesScrollPane.setBorder(null);
542
543 casesTextArea.setEditable(false);
544 casesTextArea.setBackground(new java.awt.Color(240, 240, 240));
545 casesTextArea.setColumns(20);
546 casesTextArea.setLineWrap(true);
547 casesTextArea.setRows(2);
548 casesTextArea.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.casesTextArea.text")); // NOI18N
549 casesTextArea.setWrapStyleWord(true);
550 casesTextArea.setBorder(null);
551 casesTextArea.setOpaque(false);
552 casesScrollPane.setViewportView(casesTextArea);
553
554 javax.swing.GroupLayout casesPanelLayout = new javax.swing.GroupLayout(casesPanel);
555 casesPanel.setLayout(casesPanelLayout);
556 casesPanelLayout.setHorizontalGroup(
557 casesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
558 .addGroup(casesPanelLayout.createSequentialGroup()
559 .addContainerGap()
560 .addGroup(casesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
561 .addComponent(casesScrollPane)
562 .addGroup(casesPanelLayout.createSequentialGroup()
563 .addComponent(showCasesButton)
564 .addGap(0, 0, Short.MAX_VALUE)))
565 .addContainerGap())
566 );
567 casesPanelLayout.setVerticalGroup(
568 casesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
569 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, casesPanelLayout.createSequentialGroup()
570 .addContainerGap()
571 .addComponent(casesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
572 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
573 .addComponent(showCasesButton)
574 .addGap(8, 8, 8))
575 );
576
577 tbOops.setEditable(false);
578 tbOops.setFont(tbOops.getFont().deriveFont(tbOops.getFont().getStyle() | java.awt.Font.BOLD, tbOops.getFont().getSize()-1));
579 tbOops.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.tbOops.text")); // NOI18N
580 tbOops.setBorder(null);
581
582 ingestRunningWarningLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/modules/filetypeid/warning16.png"))); // NOI18N
583 org.openide.awt.Mnemonics.setLocalizedText(ingestRunningWarningLabel, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.ingestRunningWarningLabel.text")); // NOI18N
584
585 javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
586 jPanel1.setLayout(jPanel1Layout);
587 jPanel1Layout.setHorizontalGroup(
588 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
589 .addComponent(lbCentralRepository, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
590 .addGroup(jPanel1Layout.createSequentialGroup()
591 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
592 .addComponent(pnDatabaseConfiguration, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
593 .addComponent(pnCorrelationProperties, javax.swing.GroupLayout.DEFAULT_SIZE, 1016, Short.MAX_VALUE)
594 .addComponent(organizationPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
595 .addComponent(casesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
596 .addGroup(jPanel1Layout.createSequentialGroup()
597 .addComponent(cbUseCentralRepo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
598 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
599 .addComponent(ingestRunningWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 840, Short.MAX_VALUE))
600 .addGroup(jPanel1Layout.createSequentialGroup()
601 .addContainerGap()
602 .addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, 974, javax.swing.GroupLayout.PREFERRED_SIZE)))
603 .addContainerGap())
604 );
605 jPanel1Layout.setVerticalGroup(
606 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
607 .addGroup(jPanel1Layout.createSequentialGroup()
608 .addComponent(lbCentralRepository)
609 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
610 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
611 .addComponent(cbUseCentralRepo)
612 .addComponent(ingestRunningWarningLabel))
613 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
614 .addComponent(pnDatabaseConfiguration, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
615 .addGap(0, 0, 0)
616 .addComponent(pnCorrelationProperties, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
617 .addGap(0, 0, 0)
618 .addComponent(organizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
619 .addGap(0, 0, 0)
620 .addComponent(casesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
621 .addGap(0, 0, 0)
622 .addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
623 .addContainerGap())
624 );
625
626 casesPanel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.Case Details.AccessibleContext.accessibleName")); // NOI18N
627
628 jScrollPane1.setViewportView(jPanel1);
629
630 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
631 this.setLayout(layout);
632 layout.setHorizontalGroup(
633 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
634 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
635 );
636 layout.setVerticalGroup(
637 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
638 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)
639 );
640 }// </editor-fold>//GEN-END:initComponents
641
642 private void bnManageTypesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnManageTypesActionPerformed
643 store();
644 ManageCorrelationPropertiesDialog manageCorrelationDialog = new ManageCorrelationPropertiesDialog();
645 firePropertyChange(OptionsPanelController.PROP_VALID, null, null);
646 }//GEN-LAST:event_bnManageTypesActionPerformed
647
648 private void bnDbConfigureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnDbConfigureActionPerformed
649 store();
650 boolean changed = invokeCrChoice(this, null);
651 if (changed) {
652 load(); // reload db settings content and update buttons
653 }
654 }//GEN-LAST:event_bnDbConfigureActionPerformed
655
656 private void manageOrganizationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_manageOrganizationButtonActionPerformed
657 store();
658 ManageOrganizationsDialog manageOrganizationsDialog = new ManageOrganizationsDialog();
659 }//GEN-LAST:event_manageOrganizationButtonActionPerformed
660
661 private void showCasesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showCasesButtonActionPerformed
662 store();
663 ManageCasesDialog.displayManageCasesDialog();
664 }//GEN-LAST:event_showCasesButtonActionPerformed
665
666 private void cbUseCentralRepoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbUseCentralRepoActionPerformed
667 //if saved setting is disabled checkbox should be disabled already
668 store();
669 load();
671 }//GEN-LAST:event_cbUseCentralRepoActionPerformed
672
673 private void bnTestConfigureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestConfigureActionPerformed
675 }//GEN-LAST:event_bnTestConfigureActionPerformed
676
677 @Override
678 @Messages({"GlobalSettingsPanel.validationerrMsg.mustConfigure=Configure the database to enable this module."})
679 public void load() {
680 tbOops.setText("");
684
685 lbDbPlatformValue.setText(selectedChoice.getTitle());
686 CentralRepoPlatforms selectedDb = selectedChoice.getDbPlatform();
687
688 if (selectedChoice == null || selectedDb == CentralRepoPlatforms.DISABLED) {
689 lbDbNameValue.setText("");
690 lbDbLocationValue.setText("");
691 tbOops.setText(Bundle.GlobalSettingsPanel_validationerrMsg_mustConfigure());
692 } else {
694 if (selectedDb == CentralRepoPlatforms.POSTGRESQL) {
695 try {
697 lbDbNameValue.setText(dbSettingsPg.getDbName());
698 lbDbLocationValue.setText(dbSettingsPg.getHost());
699 } catch (CentralRepoException e) {
700 logger.log(Level.WARNING, "Unable to load settings into global panel for postgres settings", e);
701 }
702 } else if (selectedDb == CentralRepoPlatforms.SQLITE) {
704 lbDbNameValue.setText(dbSettingsSqlite.getDbName());
705 lbDbLocationValue.setText(dbSettingsSqlite.getDbDirectory());
706 }
707 }
708 }
709
710 @Override
711 public void store() { // Click OK or Apply on Options Panel
713 }
714
721 public boolean valid() {
722 return !cbUseCentralRepo.isSelected() || !lbDbPlatformValue.getText().equals(CentralRepoDbChoice.DISABLED.toString());
723 }
724
725 @Override
726 public void saveSettings() { // Click OK on Global Settings Panel
727 store();
728 }
729
730 @Override
731 @SuppressWarnings("FinalizeDeclaration")
732 protected void finalize() throws Throwable {
733 IngestManager.getInstance().removeIngestJobEventListener(ingestJobEventListener);
734 super.finalize();
735
736 }
737
742 private class IngestJobEventPropertyChangeListener implements PropertyChangeListener {
743
750 @Override
751 public void propertyChange(PropertyChangeEvent event) {
752 if (isLocalIngestJobEvent(event)) {
753 EventQueue.invokeLater(new Runnable() {
754 @Override
755 public void run() {
757 }
758 });
759 }
760 }
761 };
762
772 private boolean isLocalIngestJobEvent(PropertyChangeEvent event) {
773 if (event instanceof AutopsyEvent) {
774 if (((AutopsyEvent) event).getSourceType() == AutopsyEvent.SourceType.LOCAL) {
775 String eventType = event.getPropertyName();
776 return (eventType.equals(IngestManager.IngestJobEvent.STARTED.toString())
777 || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())
778 || eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()));
779 }
780 }
781 return false;
782 }
783
784 @Messages({"GlobalSettingsPanel.validationErrMsg.ingestRunning=You cannot change settings while ingest is running."})
785 private void ingestStateUpdated(boolean caseIsOpen) {
786 if (!SwingUtilities.isEventDispatchThread()) {
787 SwingUtilities.invokeLater(() -> {
788 ingestStateUpdated(caseIsOpen);
789 });
790
791 return;
792 }
793
794 cbUseCentralRepo.setEnabled(!caseIsOpen);
796 tbOops.setText(Bundle.GlobalSettingsPanel_validationErrMsg_ingestRunning());
797 tbOops.setVisible(true);
799 } else {
800 load();
801 }
802
803 enableDatabaseConfigureButton(cbUseCentralRepo.isSelected() && !caseIsOpen);
804 }
805
806
807
815 private void enableDatabaseConfigureButton(Boolean enable) {
816 boolean ingestRunning = IngestManager.getInstance().isIngestRunning();
817 ingestRunningWarningLabel.setVisible(ingestRunning);
818
819 pnDatabaseConfiguration.setEnabled(enable && !ingestRunning);
820 bnDbConfigure.setEnabled(enable && !ingestRunning);
821 bnTestConfigure.setEnabled(enable && !ingestRunning);
822 lbDbLocationLabel.setEnabled(enable && !ingestRunning);
823 lbDbLocationValue.setEnabled(enable && !ingestRunning);
824 lbDbNameLabel.setEnabled(enable && !ingestRunning);
825 lbDbNameValue.setEnabled(enable && !ingestRunning);
826 lbDbPlatformTypeLabel.setEnabled(enable && !ingestRunning);
827 lbDbPlatformValue.setEnabled(enable && !ingestRunning);
828 tbOops.setEnabled(enable && !ingestRunning);
829 }
830
839 private boolean enableButtonSubComponents(Boolean enable) {
840 boolean ingestRunning = IngestManager.getInstance().isIngestRunning();
841 pnCorrelationProperties.setEnabled(enable && !ingestRunning);
842 bnManageTypes.setEnabled(enable && !ingestRunning);
843 correlationPropertiesTextArea.setEnabled(enable && !ingestRunning);
844 organizationPanel.setEnabled(enable && !ingestRunning);
845 organizationTextArea.setEnabled(enable && !ingestRunning);
846 manageOrganizationButton.setEnabled(enable && !ingestRunning);
847 showCasesButton.setEnabled(enable && !ingestRunning);
848 casesPanel.setEnabled(enable && !ingestRunning);
849 casesTextArea.setEnabled(enable && !ingestRunning);
850 return true;
851 }
852
853 // Variables declaration - do not modify//GEN-BEGIN:variables
854 private javax.swing.JButton bnDbConfigure;
855 private javax.swing.JButton bnManageTypes;
856 private javax.swing.JButton bnTestConfigure;
857 private javax.swing.JPanel casesPanel;
858 private javax.swing.JScrollPane casesScrollPane;
859 private javax.swing.JTextArea casesTextArea;
860 private javax.swing.JCheckBox cbUseCentralRepo;
861 private javax.swing.JScrollPane correlationPropertiesScrollPane;
862 private javax.swing.JTextArea correlationPropertiesTextArea;
863 private javax.swing.JLabel ingestRunningWarningLabel;
864 private javax.swing.JPanel jPanel1;
865 private javax.swing.JScrollPane jScrollPane1;
866 private javax.swing.JLabel lbCentralRepository;
867 private javax.swing.JLabel lbDbLocationLabel;
868 private javax.swing.JLabel lbDbLocationValue;
869 private javax.swing.JLabel lbDbNameLabel;
870 private javax.swing.JLabel lbDbNameValue;
871 private javax.swing.JLabel lbDbPlatformTypeLabel;
872 private javax.swing.JLabel lbDbPlatformValue;
873 private javax.swing.JButton manageOrganizationButton;
874 private javax.swing.JPanel organizationPanel;
875 private javax.swing.JScrollPane organizationScrollPane;
876 private javax.swing.JTextArea organizationTextArea;
877 private javax.swing.JPanel pnCorrelationProperties;
878 private javax.swing.JPanel pnDatabaseConfiguration;
879 private javax.swing.JButton showCasesButton;
880 private javax.swing.JTextField tbOops;
881 private javax.swing.JLabel testStatusLabel;
882 // End of variables declaration//GEN-END:variables
883}
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
Definition Case.java:712
static CentralRepoDbChoice saveDbChoice(CentralRepoDbChoice choice)
static void setUseCentralRepo(boolean centralRepoCheckBoxIsSelected)
static boolean testStatusAndCreate(Component parent, CentralRepoDbManager manager)
static boolean promptCreateDatabase(CentralRepoDbManager manager, EamDbSettingsDialog dialog)
static final Set< IngestManager.IngestJobEvent > INGEST_JOB_EVENTS_OF_INTEREST
static void onMultiUserChange(Component parent, boolean muPreviouslySelected, boolean muCurrentlySelected)
static boolean invokeCrChoice(Component parent, CentralRepoDbChoice initialSelection)
synchronized static Logger getLogger(String name)
Definition Logger.java:124
static synchronized IngestManager getInstance()
void addIngestJobEventListener(final PropertyChangeListener listener)

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.