mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 09:17:42 +00:00
1454 lines
74 KiB
Java
1454 lines
74 KiB
Java
/*
|
|
* Autopsy Forensic Browser
|
|
*
|
|
* Copyright 2015 Basis Technology Corp.
|
|
* Contact: carrier <at> sleuthkit <dot> org
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package org.sleuthkit.autopsy.experimental.configuration;
|
|
|
|
import java.awt.BorderLayout;
|
|
import java.io.File;
|
|
import java.nio.file.Files;
|
|
import java.util.List;
|
|
import javax.swing.JDialog;
|
|
import javax.swing.JFileChooser;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.SwingWorker;
|
|
import javax.swing.event.DocumentEvent;
|
|
import javax.swing.event.DocumentListener;
|
|
import org.openide.util.NbBundle;
|
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
|
import org.sleuthkit.autopsy.ingest.IngestJobSettings;
|
|
import org.sleuthkit.autopsy.ingest.IngestJobSettingsPanel;
|
|
import java.awt.Dimension;
|
|
import java.nio.file.Paths;
|
|
import org.openide.util.ImageUtilities;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.SwingUtilities;
|
|
import org.sleuthkit.autopsy.coreutils.FileUtil;
|
|
import org.openide.windows.WindowManager;
|
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
import org.sleuthkit.autopsy.experimental.autoingest.FileExporterSettingsPanel;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public class AutoIngestSettingsPanel extends javax.swing.JPanel {
|
|
|
|
private final AutoIngestSettingsPanelController controller;
|
|
private final JFileChooser fc = new JFileChooser();
|
|
private static final long serialVersionUID = 1L;
|
|
private static final Logger logger = Logger.getLogger(AutoIngestSettingsPanel.class.getName());
|
|
private Integer oldIngestThreads;
|
|
private static final String MULTI_USER_SETTINGS_MUST_BE_ENABLED = NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.validationErrMsg.MUdisabled");
|
|
|
|
enum OptionsUiMode {
|
|
|
|
STANDALONE, AIM, REVIEW, DOWNLOADING_CONFIGURATION
|
|
};
|
|
|
|
/**
|
|
* Creates new form AutoIngestSettingsPanel
|
|
*
|
|
* @param theController Controller to notify of changes.
|
|
*/
|
|
public AutoIngestSettingsPanel(AutoIngestSettingsPanelController theController) {
|
|
controller = theController;
|
|
initComponents();
|
|
|
|
cbJoinAutoIngestCluster.setVisible(true);
|
|
load(true);
|
|
sharedSettingsTextField.getDocument().addDocumentListener(new MyDocumentListener());
|
|
inputPathTextField.getDocument().addDocumentListener(new MyDocumentListener());
|
|
outputPathTextField.getDocument().addDocumentListener(new MyDocumentListener());
|
|
|
|
jLabelInvalidImageFolder.setText("");
|
|
jLabelInvalidResultsFolder.setText("");
|
|
sharedSettingsErrorTextField.setText("");
|
|
jLabelTaskDescription.setText("");
|
|
configButtonErrorTextField.setText("");
|
|
|
|
pbTaskInProgress.setEnabled(false);
|
|
jLabelCurrentTask.setEnabled(false);
|
|
jLabelTaskDescription.setEnabled(false);
|
|
|
|
this.oldIngestThreads = UserPreferences.numberOfFileIngestThreads();
|
|
}
|
|
|
|
private class MyDocumentListener implements DocumentListener {
|
|
|
|
@Override
|
|
public void changedUpdate(DocumentEvent e) {
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
|
|
@Override
|
|
public void removeUpdate(DocumentEvent e) {
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
|
|
@Override
|
|
public void insertUpdate(DocumentEvent e) {
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Load mode from persistent storage.
|
|
*
|
|
* @param inStartup True if we're doing the initial population of the UI
|
|
*/
|
|
final void load(boolean inStartup) {
|
|
|
|
// multi user mode must be enabled
|
|
if (!UserPreferences.getIsMultiUserModeEnabled()) {
|
|
tbOops.setText(MULTI_USER_SETTINGS_MUST_BE_ENABLED);
|
|
} else {
|
|
tbOops.setText("");
|
|
}
|
|
cbJoinAutoIngestCluster.setSelected(AutoIngestUserPreferences.getJoinAutoModeCluster());
|
|
cbJoinAutoIngestCluster.setEnabled(UserPreferences.getIsMultiUserModeEnabled());
|
|
|
|
if (inStartup) {
|
|
AutoIngestUserPreferences.SelectedMode storedMode = AutoIngestUserPreferences.getMode();
|
|
inputPathTextField.requestFocusInWindow();
|
|
if (null != storedMode) {
|
|
switch (storedMode) {
|
|
case REVIEW:
|
|
jRadioButtonReview.setSelected(true);
|
|
enableOptionsBasedOnMode(OptionsUiMode.REVIEW);
|
|
break;
|
|
case AUTOMATED:
|
|
jRadioButtonAutomated.setSelected(true);
|
|
enableOptionsBasedOnMode(OptionsUiMode.AIM);
|
|
break;
|
|
default:
|
|
cbJoinAutoIngestCluster.setSelected(false);
|
|
enableOptionsBasedOnMode(OptionsUiMode.STANDALONE);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
String images = AutoIngestUserPreferences.getAutoModeImageFolder();
|
|
if (images != null) {
|
|
inputPathTextField.setText(images);
|
|
} else {
|
|
inputPathTextField.setText("");
|
|
}
|
|
|
|
String results = AutoIngestUserPreferences.getAutoModeResultsFolder();
|
|
if (results != null) {
|
|
outputPathTextField.setText(results);
|
|
} else {
|
|
outputPathTextField.setText("");
|
|
}
|
|
|
|
if (inStartup) {
|
|
sharedConfigCheckbox.setSelected(AutoIngestUserPreferences.getSharedConfigEnabled());
|
|
String sharedSettingsFolder = AutoIngestUserPreferences.getSharedConfigFolder();
|
|
if (sharedSettingsFolder != null) {
|
|
sharedSettingsTextField.setText(sharedSettingsFolder);
|
|
} else {
|
|
String folder = getDefaultSharedFolder();
|
|
sharedSettingsTextField.setText(folder);
|
|
}
|
|
|
|
masterNodeCheckBox.setSelected(AutoIngestUserPreferences.getSharedConfigMaster());
|
|
setEnabledStateForSharedConfiguration();
|
|
}
|
|
|
|
validateSettings();
|
|
}
|
|
|
|
/**
|
|
* Get the default location for the shared configuration folder. Currently
|
|
* this is a subfolder of the shared images folder.
|
|
*
|
|
* @return The default subfolder name, or an empty string if the base folder
|
|
* is not set
|
|
*/
|
|
private String getDefaultSharedFolder() {
|
|
|
|
String images = inputPathTextField.getText().trim();
|
|
if (images == null || images.isEmpty()) {
|
|
return "";
|
|
}
|
|
File sharedFolder = new File(images, "sharedConfiguration");
|
|
if (!sharedFolder.exists()) {
|
|
try {
|
|
sharedFolder.mkdir();
|
|
return sharedFolder.getAbsolutePath();
|
|
} catch (Exception ex) {
|
|
sharedSettingsErrorTextField.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.ErrorSettingDefaultFolder"));
|
|
return "";
|
|
}
|
|
}
|
|
return sharedFolder.getAbsolutePath();
|
|
}
|
|
|
|
/**
|
|
* Save mode to persistent storage.
|
|
*/
|
|
void store() {
|
|
boolean needsRestart = false;
|
|
AutoIngestUserPreferences.SelectedMode storedMode = AutoIngestUserPreferences.getMode();
|
|
|
|
if (AutoIngestUserPreferences.getJoinAutoModeCluster() != cbJoinAutoIngestCluster.isSelected()) {
|
|
needsRestart = true;
|
|
}
|
|
|
|
AutoIngestUserPreferences.setJoinAutoModeCluster(cbJoinAutoIngestCluster.isSelected());
|
|
if (!cbJoinAutoIngestCluster.isSelected()) {
|
|
AutoIngestUserPreferences.setMode(AutoIngestUserPreferences.SelectedMode.STANDALONE);
|
|
//before return popup the message
|
|
if (needsRestart) {
|
|
SwingUtilities.invokeLater(() -> {
|
|
JOptionPane.showMessageDialog(null,
|
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.MustRestart"),
|
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.restartRequiredLabel.text"),
|
|
JOptionPane.WARNING_MESSAGE);
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (jRadioButtonAutomated.isSelected()) {
|
|
if (storedMode != AutoIngestUserPreferences.SelectedMode.AUTOMATED) {
|
|
needsRestart = true;
|
|
}
|
|
String thePath = AutoIngestUserPreferences.getAutoModeImageFolder();
|
|
if (thePath != null && 0 != inputPathTextField.getText().compareTo(thePath)) {
|
|
needsRestart = true;
|
|
}
|
|
thePath = AutoIngestUserPreferences.getAutoModeResultsFolder();
|
|
if (thePath != null && 0 != outputPathTextField.getText().compareTo(thePath)) {
|
|
needsRestart = true;
|
|
}
|
|
|
|
AutoIngestUserPreferences.setMode(AutoIngestUserPreferences.SelectedMode.AUTOMATED);
|
|
String imageFolderPath = getNormalizedFolderPath(inputPathTextField.getText().trim());
|
|
AutoIngestUserPreferences.setAutoModeImageFolder(imageFolderPath);
|
|
String resultsFolderPath = getNormalizedFolderPath(outputPathTextField.getText().trim());
|
|
AutoIngestUserPreferences.setAutoModeResultsFolder(resultsFolderPath);
|
|
AutoIngestUserPreferences.setSharedConfigEnabled(sharedConfigCheckbox.isSelected());
|
|
if (sharedConfigCheckbox.isSelected()) {
|
|
String globalSettingsPath = getNormalizedFolderPath(sharedSettingsTextField.getText().trim());
|
|
AutoIngestUserPreferences.setSharedConfigFolder(globalSettingsPath);
|
|
AutoIngestUserPreferences.setSharedConfigMaster(masterNodeCheckBox.isSelected());
|
|
}
|
|
} else if (jRadioButtonReview.isSelected()) {
|
|
if (storedMode != AutoIngestUserPreferences.SelectedMode.REVIEW) {
|
|
needsRestart = true;
|
|
}
|
|
String thePath = AutoIngestUserPreferences.getAutoModeResultsFolder();
|
|
if (thePath != null && 0 != outputPathTextField.getText().compareTo(thePath)) {
|
|
needsRestart = true;
|
|
}
|
|
|
|
AutoIngestUserPreferences.setMode(AutoIngestUserPreferences.SelectedMode.REVIEW);
|
|
String resultsFolderPath = getNormalizedFolderPath(outputPathTextField.getText().trim());
|
|
AutoIngestUserPreferences.setAutoModeResultsFolder(resultsFolderPath);
|
|
}
|
|
if (needsRestart) {
|
|
SwingUtilities.invokeLater(() -> {
|
|
JOptionPane.showMessageDialog(null,
|
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.MustRestart"),
|
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.restartRequiredLabel.text"),
|
|
JOptionPane.WARNING_MESSAGE);
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
void validateSettings() {
|
|
if (valid()) {
|
|
if (validSharedConfigSettings()) {
|
|
downloadButton.setEnabled(true);
|
|
if (masterNodeCheckBox.isEnabled() && masterNodeCheckBox.isSelected()) {
|
|
uploadButton.setEnabled(true);
|
|
} else {
|
|
uploadButton.setEnabled(false);
|
|
}
|
|
} else {
|
|
downloadButton.setEnabled(false);
|
|
uploadButton.setEnabled(false);
|
|
}
|
|
displaySharedConfigButtonText();
|
|
} else {
|
|
uploadButton.setEnabled(false);
|
|
if (validSharedConfigSettings()) {
|
|
downloadButton.setEnabled(true);
|
|
} else {
|
|
downloadButton.setEnabled(false);
|
|
}
|
|
displaySharedConfigButtonText();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate current panel settings.
|
|
*/
|
|
boolean valid() {
|
|
|
|
if (!cbJoinAutoIngestCluster.isSelected()) {
|
|
return true;
|
|
}
|
|
|
|
boolean isValidNodePanel = true;
|
|
|
|
switch (getModeFromRadioButtons()) {
|
|
case AIM:
|
|
if (!validateImagePath()) {
|
|
isValidNodePanel = false;
|
|
}
|
|
if (!validateResultsPath()) {
|
|
isValidNodePanel = false;
|
|
}
|
|
if (!validateSharedSettingsPath()) {
|
|
isValidNodePanel = false;
|
|
configButtonErrorTextField.setText("Shared configuration folder is invalid");
|
|
}
|
|
break;
|
|
case REVIEW:
|
|
if (!validateResultsPath()) {
|
|
isValidNodePanel = false;
|
|
}
|
|
break;
|
|
|
|
case STANDALONE:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (jRadioButtonAutomated.isSelected()) {
|
|
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected() && !validSharedConfigSettings()) {
|
|
isValidNodePanel = false;
|
|
}
|
|
}
|
|
return isValidNodePanel;
|
|
}
|
|
|
|
/**
|
|
* Check everything that is needed to enable the upload or download config
|
|
* buttons is set (except the master node checkbox for upload).
|
|
*
|
|
* @return
|
|
*/
|
|
boolean validSharedConfigSettings() {
|
|
// Check for:
|
|
// - shared config checkbox enabled and checked
|
|
// - valid shared config folder entered
|
|
// - mulit-user settings enabled
|
|
return (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected() && UserPreferences.getIsMultiUserModeEnabled());
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void displaySharedConfigButtonText() {
|
|
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected()) {
|
|
if (!UserPreferences.getIsMultiUserModeEnabled()) {
|
|
configButtonErrorTextField.setText("Multi-user cases must be enabled");
|
|
} else {
|
|
configButtonErrorTextField.setText("");
|
|
}
|
|
} else {
|
|
configButtonErrorTextField.setText("");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determines whether settings requiring a restart have changed, and also
|
|
* updates the UI.
|
|
*
|
|
* @return true if something has changed that will require a reset, false
|
|
* otherwise
|
|
*/
|
|
boolean isResetNeeded() {
|
|
|
|
boolean resetNeeded = false;
|
|
|
|
// Save the current values from the UI
|
|
String oldInputPath = inputPathTextField.getText().trim();
|
|
String oldOutputPath = outputPathTextField.getText().trim();
|
|
|
|
// Refresh UI
|
|
load(false);
|
|
|
|
if (!oldInputPath.equals(inputPathTextField.getText().trim())) {
|
|
resetNeeded = true;
|
|
}
|
|
if (!oldOutputPath.equals(outputPathTextField.getText().trim())) {
|
|
resetNeeded = true;
|
|
}
|
|
if (!this.oldIngestThreads.equals(UserPreferences.numberOfFileIngestThreads())) {
|
|
resetNeeded = true;
|
|
}
|
|
return resetNeeded;
|
|
}
|
|
|
|
/**
|
|
* Normalizes a path to make sure there are no "space" characters at the end
|
|
*
|
|
* @param path Path to a directory
|
|
*
|
|
* @return Path without "space" characters at the end
|
|
*/
|
|
String normalizePath(String path) {
|
|
|
|
while (path.length() > 0) {
|
|
if (path.charAt(path.length() - 1) == ' ') {
|
|
path = path.substring(0, path.length() - 1);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* Validates that a path is valid and points to a folder.
|
|
*
|
|
* @param path A path to be validated
|
|
*
|
|
* @return boolean returns true if valid and points to a folder, false
|
|
* otherwise
|
|
*/
|
|
boolean isFolderPathValid(String path) {
|
|
try {
|
|
File file = new File(normalizePath(path));
|
|
|
|
// check if it's a symbolic link
|
|
if (Files.isSymbolicLink(file.toPath())) {
|
|
return true;
|
|
}
|
|
|
|
// local folder
|
|
if (file.exists() && file.isDirectory()) {
|
|
return true;
|
|
}
|
|
} catch (Exception ex) {
|
|
// Files.isSymbolicLink (and other "files" methods) throw exceptions on seemingly innocent inputs.
|
|
// For example, it will throw an exception when either " " is last character in path or
|
|
// a path starting with ":".
|
|
// We can just ignore these exceptions as they occur in process of user typing in the path.
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Returns a path that was normalized by file system.
|
|
*
|
|
* @param path A path to be normalized. Normalization occurs inside a call
|
|
* to new File().
|
|
*
|
|
* @return String returns normalized OS path
|
|
*/
|
|
String getNormalizedFolderPath(String path) {
|
|
// removes "/", "\", and " " characters at the end of path string.
|
|
// normalizePath() removes spaces at the end of path and a call to "new File()"
|
|
// internally formats the path string to remove "/" and "\" characters at the end of path.
|
|
File file = new File(normalizePath(path));
|
|
return file.getPath();
|
|
}
|
|
|
|
/**
|
|
* Validate image path. Display warnings if invalid.
|
|
*/
|
|
boolean validateImagePath() {
|
|
|
|
String inputPath = inputPathTextField.getText().trim();
|
|
|
|
if (inputPath.isEmpty()) {
|
|
jLabelInvalidImageFolder.setVisible(true);
|
|
jLabelInvalidImageFolder.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.ImageDirectoryUnspecified"));
|
|
return false;
|
|
}
|
|
|
|
if (!isFolderPathValid(inputPath)) {
|
|
jLabelInvalidImageFolder.setVisible(true);
|
|
jLabelInvalidImageFolder.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.PathInvalid"));
|
|
return false;
|
|
}
|
|
|
|
if (false == permissionsAppropriate(inputPath)) {
|
|
jLabelInvalidImageFolder.setVisible(true);
|
|
jLabelInvalidImageFolder.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.CannotAccess")
|
|
+ " " + inputPath + " "
|
|
+ NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.CheckPermissions"));
|
|
return false;
|
|
}
|
|
|
|
jLabelInvalidImageFolder.setVisible(false);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Validate results path. Display warnings if invalid.
|
|
*/
|
|
boolean validateResultsPath() {
|
|
|
|
String outputPath = outputPathTextField.getText().trim();
|
|
|
|
if (outputPath.isEmpty()) {
|
|
jLabelInvalidResultsFolder.setVisible(true);
|
|
jLabelInvalidResultsFolder.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.ResultsDirectoryUnspecified"));
|
|
return false;
|
|
}
|
|
|
|
if (!isFolderPathValid(outputPath)) {
|
|
jLabelInvalidResultsFolder.setVisible(true);
|
|
jLabelInvalidResultsFolder.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.PathInvalid"));
|
|
return false;
|
|
}
|
|
|
|
if (false == permissionsAppropriate(outputPath)) {
|
|
jLabelInvalidResultsFolder.setVisible(true);
|
|
jLabelInvalidResultsFolder.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.CannotAccess")
|
|
+ " " + outputPath + " "
|
|
+ NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.CheckPermissions"));
|
|
return false;
|
|
}
|
|
|
|
jLabelInvalidResultsFolder.setVisible(false);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Validate shared settings path. Display warnings if invalid.
|
|
*/
|
|
boolean validateSharedSettingsPath() {
|
|
String sharedSettingsPath = sharedSettingsTextField.getText().trim();
|
|
|
|
// Automatically valid if shared settings aren't selected
|
|
if (!sharedConfigCheckbox.isSelected()) {
|
|
return true;
|
|
}
|
|
|
|
if (sharedSettingsPath.isEmpty()) {
|
|
sharedSettingsErrorTextField.setVisible(true);
|
|
sharedSettingsErrorTextField.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.EmptySettingsDirectory"));
|
|
return false;
|
|
}
|
|
|
|
if (!isFolderPathValid(sharedSettingsPath)) {
|
|
sharedSettingsErrorTextField.setVisible(true);
|
|
sharedSettingsErrorTextField.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.PathInvalid"));
|
|
return false;
|
|
}
|
|
|
|
if (false == permissionsAppropriate(sharedSettingsPath)) {
|
|
sharedSettingsErrorTextField.setVisible(true);
|
|
sharedSettingsErrorTextField.setText(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.CannotAccess")
|
|
+ " " + sharedSettingsPath + " "
|
|
+ NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.CheckPermissions"));
|
|
return false;
|
|
}
|
|
|
|
sharedSettingsErrorTextField.setText("");
|
|
return true;
|
|
}
|
|
|
|
private void displayIngestJobSettingsPanel() {
|
|
|
|
IngestJobSettings ingestJobSettings = new IngestJobSettings(AutoIngestUserPreferences.getAutoModeIngestModuleContextString());
|
|
showWarnings(ingestJobSettings);
|
|
IngestJobSettingsPanel ingestJobSettingsPanel = new IngestJobSettingsPanel(ingestJobSettings);
|
|
|
|
add(ingestJobSettingsPanel, BorderLayout.PAGE_START);
|
|
|
|
if (JOptionPane.showConfirmDialog(null, ingestJobSettingsPanel, "Ingest Module Configuration", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) {
|
|
// store the updated settings
|
|
ingestJobSettings = ingestJobSettingsPanel.getSettings();
|
|
ingestJobSettings.save();
|
|
showWarnings(ingestJobSettings);
|
|
}
|
|
}
|
|
|
|
private static void showWarnings(IngestJobSettings ingestJobSettings) {
|
|
List<String> warnings = ingestJobSettings.getWarnings();
|
|
if (warnings.isEmpty() == false) {
|
|
StringBuilder warningMessage = new StringBuilder();
|
|
for (String warning : warnings) {
|
|
warningMessage.append(warning).append("\n");
|
|
}
|
|
JOptionPane.showMessageDialog(null, warningMessage.toString());
|
|
}
|
|
}
|
|
|
|
private void enableOptionsBasedOnMode(OptionsUiMode mode) {
|
|
if (mode != OptionsUiMode.DOWNLOADING_CONFIGURATION) {
|
|
jRadioButtonAutomated.setEnabled(cbJoinAutoIngestCluster.isSelected());
|
|
jRadioButtonReview.setEnabled(cbJoinAutoIngestCluster.isSelected());
|
|
|
|
jLabelSelectInputFolder.setEnabled(mode == OptionsUiMode.AIM);
|
|
inputPathTextField.setEnabled(mode == OptionsUiMode.AIM);
|
|
browseInputFolderButton.setEnabled(mode == OptionsUiMode.AIM);
|
|
|
|
jLabelSelectOutputFolder.setEnabled(mode == OptionsUiMode.AIM || mode == OptionsUiMode.REVIEW);
|
|
outputPathTextField.setEnabled(mode == OptionsUiMode.AIM || mode == OptionsUiMode.REVIEW);
|
|
browseOutputFolderButton.setEnabled(mode == OptionsUiMode.AIM || mode == OptionsUiMode.REVIEW);
|
|
|
|
jPanelSharedConfig.setEnabled(mode == OptionsUiMode.AIM);
|
|
|
|
jPanelIngestSettings.setEnabled(mode == OptionsUiMode.AIM);
|
|
bnEditIngestSettings.setEnabled(mode == OptionsUiMode.AIM);
|
|
bnAdvancedSettings.setEnabled(mode == OptionsUiMode.AIM);
|
|
bnLogging.setEnabled(mode == OptionsUiMode.AIM);
|
|
jPanelSharedConfig.setEnabled(mode == OptionsUiMode.AIM);
|
|
sharedConfigCheckbox.setEnabled(mode == OptionsUiMode.AIM);
|
|
masterNodeCheckBox.setEnabled(mode == OptionsUiMode.AIM && sharedConfigCheckbox.isSelected());
|
|
bnFileExport.setEnabled(mode == OptionsUiMode.AIM);
|
|
sharedSettingsTextField.setEnabled(mode == OptionsUiMode.AIM && sharedConfigCheckbox.isSelected());
|
|
downloadButton.setEnabled(mode == OptionsUiMode.AIM && sharedConfigCheckbox.isSelected());
|
|
browseSharedSettingsButton.setEnabled(mode == OptionsUiMode.AIM && sharedConfigCheckbox.isSelected());
|
|
uploadButton.setEnabled(mode == OptionsUiMode.AIM && sharedConfigCheckbox.isSelected() && masterNodeCheckBox.isSelected());
|
|
} else {
|
|
setEnabledState(false);
|
|
}
|
|
|
|
}
|
|
|
|
private OptionsUiMode getModeFromRadioButtons() {
|
|
if (!cbJoinAutoIngestCluster.isSelected()) {
|
|
return OptionsUiMode.STANDALONE;
|
|
}
|
|
|
|
if (jRadioButtonAutomated.isSelected()) {
|
|
return OptionsUiMode.AIM;
|
|
} else if (jRadioButtonReview.isSelected()) {
|
|
return OptionsUiMode.REVIEW;
|
|
} else {
|
|
return OptionsUiMode.STANDALONE;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This method is called from within the constructor to initialize the form.
|
|
* WARNING: Do NOT modify this code. The content of this method is always
|
|
* regenerated by the Form Editor.
|
|
*/
|
|
@SuppressWarnings("unchecked")
|
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
|
private void initComponents() {
|
|
|
|
modeRadioButtons = new javax.swing.ButtonGroup();
|
|
nodePanel = new javax.swing.JPanel();
|
|
jPanelNodeType = new javax.swing.JPanel();
|
|
jLabelSelectMode = new javax.swing.JLabel();
|
|
restartRequiredNodeLabel = new javax.swing.JLabel();
|
|
jRadioButtonAutomated = new javax.swing.JRadioButton();
|
|
jRadioButtonReview = new javax.swing.JRadioButton();
|
|
jLabelSelectInputFolder = new javax.swing.JLabel();
|
|
inputPathTextField = new javax.swing.JTextField();
|
|
browseInputFolderButton = new javax.swing.JButton();
|
|
jLabelSelectOutputFolder = new javax.swing.JLabel();
|
|
outputPathTextField = new javax.swing.JTextField();
|
|
browseOutputFolderButton = new javax.swing.JButton();
|
|
jLabelInvalidImageFolder = new javax.swing.JLabel();
|
|
jLabelInvalidResultsFolder = new javax.swing.JLabel();
|
|
jLabel1 = new javax.swing.JLabel();
|
|
jPanelSharedConfig = new javax.swing.JPanel();
|
|
sharedConfigCheckbox = new javax.swing.JCheckBox();
|
|
sharedSettingsTextField = new javax.swing.JTextField();
|
|
browseSharedSettingsButton = new javax.swing.JButton();
|
|
sharedSettingsErrorTextField = new javax.swing.JTextField();
|
|
masterNodeCheckBox = new javax.swing.JCheckBox();
|
|
uploadButton = new javax.swing.JButton();
|
|
downloadButton = new javax.swing.JButton();
|
|
jLabelCurrentTask = new javax.swing.JLabel();
|
|
pbTaskInProgress = new javax.swing.JProgressBar();
|
|
jLabelTaskDescription = new javax.swing.JLabel();
|
|
configButtonErrorTextField = new javax.swing.JTextField();
|
|
jSeparator1 = new javax.swing.JSeparator();
|
|
jPanelIngestSettings = new javax.swing.JPanel();
|
|
bnEditIngestSettings = new javax.swing.JButton();
|
|
bnAdvancedSettings = new javax.swing.JButton();
|
|
bnFileExport = new javax.swing.JButton();
|
|
bnLogging = new javax.swing.JButton();
|
|
cbJoinAutoIngestCluster = new javax.swing.JCheckBox();
|
|
tbOops = new javax.swing.JTextField();
|
|
|
|
jPanelNodeType.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jPanelNodeType.border.title"))); // NOI18N
|
|
jPanelNodeType.setMinimumSize(new java.awt.Dimension(50, 50));
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectMode, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectMode.text")); // NOI18N
|
|
|
|
restartRequiredNodeLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/experimental/images/warning16.png"))); // NOI18N
|
|
org.openide.awt.Mnemonics.setLocalizedText(restartRequiredNodeLabel, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.restartRequiredNodeLabel.text")); // NOI18N
|
|
|
|
modeRadioButtons.add(jRadioButtonAutomated);
|
|
jRadioButtonAutomated.setSelected(true);
|
|
org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonAutomated, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonAutomated.text")); // NOI18N
|
|
jRadioButtonAutomated.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonAutomated.toolTipText")); // NOI18N
|
|
jRadioButtonAutomated.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
jRadioButtonAutomatedActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
modeRadioButtons.add(jRadioButtonReview);
|
|
org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonReview, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonReview.text")); // NOI18N
|
|
jRadioButtonReview.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jRadioButtonReview.toolTipText")); // NOI18N
|
|
jRadioButtonReview.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
jRadioButtonReviewActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectInputFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectInputFolder.text")); // NOI18N
|
|
jLabelSelectInputFolder.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
|
|
|
|
inputPathTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.inputPathTextField.text")); // NOI18N
|
|
inputPathTextField.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.inputPathTextField.toolTipText")); // NOI18N
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(browseInputFolderButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseInputFolderButton.text")); // NOI18N
|
|
browseInputFolderButton.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
browseInputFolderButtonActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectOutputFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelSelectOutputFolder.text")); // NOI18N
|
|
jLabelSelectOutputFolder.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
|
|
|
|
outputPathTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.outputPathTextField.text")); // NOI18N
|
|
outputPathTextField.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.outputPathTextField.toolTipText")); // NOI18N
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(browseOutputFolderButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseOutputFolderButton.text")); // NOI18N
|
|
browseOutputFolderButton.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
browseOutputFolderButtonActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
jLabelInvalidImageFolder.setForeground(new java.awt.Color(255, 0, 0));
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelInvalidImageFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelInvalidImageFolder.text")); // NOI18N
|
|
|
|
jLabelInvalidResultsFolder.setForeground(new java.awt.Color(255, 0, 0));
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelInvalidResultsFolder, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelInvalidResultsFolder.text")); // NOI18N
|
|
|
|
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/experimental/images/AIM.png"))); // NOI18N
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabel1.text")); // NOI18N
|
|
|
|
javax.swing.GroupLayout jPanelNodeTypeLayout = new javax.swing.GroupLayout(jPanelNodeType);
|
|
jPanelNodeType.setLayout(jPanelNodeTypeLayout);
|
|
jPanelNodeTypeLayout.setHorizontalGroup(
|
|
jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
|
.addComponent(outputPathTextField, javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(inputPathTextField, javax.swing.GroupLayout.Alignment.LEADING))
|
|
.addGap(10, 10, 10)
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(browseInputFolderButton, javax.swing.GroupLayout.Alignment.TRAILING)
|
|
.addComponent(browseOutputFolderButton, javax.swing.GroupLayout.Alignment.TRAILING)))
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addComponent(jLabelSelectMode)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(restartRequiredNodeLabel))
|
|
.addComponent(jRadioButtonReview)
|
|
.addComponent(jRadioButtonAutomated))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(jLabel1))
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addComponent(jLabelSelectInputFolder)
|
|
.addGap(18, 18, 18)
|
|
.addComponent(jLabelInvalidImageFolder, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addComponent(jLabelSelectOutputFolder)
|
|
.addGap(18, 18, 18)
|
|
.addComponent(jLabelInvalidResultsFolder, javax.swing.GroupLayout.PREFERRED_SIZE, 544, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addGap(0, 0, Short.MAX_VALUE)))
|
|
.addContainerGap())
|
|
);
|
|
jPanelNodeTypeLayout.setVerticalGroup(
|
|
jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelNodeTypeLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(jLabelSelectMode)
|
|
.addComponent(restartRequiredNodeLabel))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(jRadioButtonAutomated)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(jRadioButtonReview))
|
|
.addComponent(jLabel1))
|
|
.addGap(1, 1, 1)
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(jLabelSelectInputFolder)
|
|
.addComponent(jLabelInvalidImageFolder))
|
|
.addGap(1, 1, 1)
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(inputPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(browseInputFolderButton))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(jLabelSelectOutputFolder, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(jLabelInvalidResultsFolder))
|
|
.addGap(1, 1, 1)
|
|
.addGroup(jPanelNodeTypeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(browseOutputFolderButton)
|
|
.addComponent(outputPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addGap(0, 0, Short.MAX_VALUE))
|
|
);
|
|
|
|
jPanelSharedConfig.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jPanelSharedConfig.border.title"))); // NOI18N
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(sharedConfigCheckbox, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedConfigCheckbox.text")); // NOI18N
|
|
sharedConfigCheckbox.setMaximumSize(new java.awt.Dimension(191, 14));
|
|
sharedConfigCheckbox.setMinimumSize(new java.awt.Dimension(191, 14));
|
|
sharedConfigCheckbox.setPreferredSize(new java.awt.Dimension(191, 14));
|
|
sharedConfigCheckbox.addItemListener(new java.awt.event.ItemListener() {
|
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
|
sharedConfigCheckboxItemStateChanged(evt);
|
|
}
|
|
});
|
|
|
|
sharedSettingsTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedSettingsTextField.text")); // NOI18N
|
|
sharedSettingsTextField.setEnabled(false);
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(browseSharedSettingsButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.browseSharedSettingsButton.text")); // NOI18N
|
|
browseSharedSettingsButton.setEnabled(false);
|
|
browseSharedSettingsButton.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
browseSharedSettingsButtonActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
sharedSettingsErrorTextField.setEditable(false);
|
|
sharedSettingsErrorTextField.setForeground(new java.awt.Color(255, 0, 0));
|
|
sharedSettingsErrorTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.sharedSettingsErrorTextField.text")); // NOI18N
|
|
sharedSettingsErrorTextField.setBorder(null);
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(masterNodeCheckBox, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.masterNodeCheckBox.text")); // NOI18N
|
|
masterNodeCheckBox.setEnabled(false);
|
|
masterNodeCheckBox.addItemListener(new java.awt.event.ItemListener() {
|
|
public void itemStateChanged(java.awt.event.ItemEvent evt) {
|
|
masterNodeCheckBoxItemStateChanged(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(uploadButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.uploadButton.text")); // NOI18N
|
|
uploadButton.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
uploadButtonActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(downloadButton, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.downloadButton.text")); // NOI18N
|
|
downloadButton.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
downloadButtonActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelCurrentTask, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelCurrentTask.text")); // NOI18N
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(jLabelTaskDescription, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jLabelTaskDescription.text")); // NOI18N
|
|
|
|
configButtonErrorTextField.setEditable(false);
|
|
configButtonErrorTextField.setForeground(new java.awt.Color(255, 0, 0));
|
|
configButtonErrorTextField.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.configButtonErrorTextField.text")); // NOI18N
|
|
configButtonErrorTextField.setBorder(null);
|
|
|
|
javax.swing.GroupLayout jPanelSharedConfigLayout = new javax.swing.GroupLayout(jPanelSharedConfig);
|
|
jPanelSharedConfig.setLayout(jPanelSharedConfigLayout);
|
|
jPanelSharedConfigLayout.setHorizontalGroup(
|
|
jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
.addGap(10, 10, 10)
|
|
.addComponent(jLabelCurrentTask)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(jLabelTaskDescription, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addContainerGap())
|
|
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
.addComponent(sharedSettingsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(browseSharedSettingsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addComponent(uploadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelSharedConfigLayout.createSequentialGroup()
|
|
.addComponent(downloadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(configButtonErrorTextField))
|
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelSharedConfigLayout.createSequentialGroup()
|
|
.addComponent(sharedConfigCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(sharedSettingsErrorTextField))
|
|
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 692, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addComponent(pbTaskInProgress, javax.swing.GroupLayout.PREFERRED_SIZE, 695, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(masterNodeCheckBox))
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
jPanelSharedConfigLayout.setVerticalGroup(
|
|
jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelSharedConfigLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(sharedConfigCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(sharedSettingsErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(sharedSettingsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addComponent(browseSharedSettingsButton))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(downloadButton)
|
|
.addComponent(configButtonErrorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addGap(1, 1, 1)
|
|
.addComponent(masterNodeCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(uploadButton)
|
|
.addGap(8, 8, 8)
|
|
.addGroup(jPanelSharedConfigLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(jLabelCurrentTask)
|
|
.addComponent(jLabelTaskDescription))
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(pbTaskInProgress, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
|
|
jPanelIngestSettings.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.jPanelIngestSettings.border.title"))); // NOI18N
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(bnEditIngestSettings, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnEditIngestSettings.text")); // NOI18N
|
|
bnEditIngestSettings.setToolTipText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnEditIngestSettings.toolTipText")); // NOI18N
|
|
bnEditIngestSettings.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
bnEditIngestSettingsActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(bnAdvancedSettings, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnAdvancedSettings.text")); // NOI18N
|
|
bnAdvancedSettings.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
bnAdvancedSettingsActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(bnFileExport, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnFileExport.text")); // NOI18N
|
|
bnFileExport.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
bnFileExportActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
org.openide.awt.Mnemonics.setLocalizedText(bnLogging, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.bnLogging.text")); // NOI18N
|
|
bnLogging.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
bnLoggingActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
javax.swing.GroupLayout jPanelIngestSettingsLayout = new javax.swing.GroupLayout(jPanelIngestSettings);
|
|
jPanelIngestSettings.setLayout(jPanelIngestSettingsLayout);
|
|
jPanelIngestSettingsLayout.setHorizontalGroup(
|
|
jPanelIngestSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelIngestSettingsLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addComponent(bnEditIngestSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(bnAdvancedSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(bnFileExport, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(bnLogging, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
jPanelIngestSettingsLayout.setVerticalGroup(
|
|
jPanelIngestSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(jPanelIngestSettingsLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(jPanelIngestSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(bnEditIngestSettings)
|
|
.addComponent(bnFileExport)
|
|
.addComponent(bnAdvancedSettings)
|
|
.addComponent(bnLogging))
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
|
|
cbJoinAutoIngestCluster.setFont(cbJoinAutoIngestCluster.getFont().deriveFont(cbJoinAutoIngestCluster.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
|
org.openide.awt.Mnemonics.setLocalizedText(cbJoinAutoIngestCluster, org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.cbJoinAutoIngestCluster.text")); // NOI18N
|
|
cbJoinAutoIngestCluster.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
cbJoinAutoIngestClusterActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
tbOops.setEditable(false);
|
|
tbOops.setFont(tbOops.getFont().deriveFont(tbOops.getFont().getStyle() | java.awt.Font.BOLD, 12));
|
|
tbOops.setForeground(new java.awt.Color(255, 0, 0));
|
|
tbOops.setText(org.openide.util.NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.tbOops.text")); // NOI18N
|
|
tbOops.setBorder(null);
|
|
tbOops.addActionListener(new java.awt.event.ActionListener() {
|
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
tbOopsActionPerformed(evt);
|
|
}
|
|
});
|
|
|
|
javax.swing.GroupLayout nodePanelLayout = new javax.swing.GroupLayout(nodePanel);
|
|
nodePanel.setLayout(nodePanelLayout);
|
|
nodePanelLayout.setHorizontalGroup(
|
|
nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
|
.addComponent(cbJoinAutoIngestCluster, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addGap(18, 18, 18)
|
|
.addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, 465, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
|
.addComponent(jPanelNodeType, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(jPanelSharedConfig, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
.addComponent(jPanelIngestSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
nodePanelLayout.setVerticalGroup(
|
|
nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addGroup(nodePanelLayout.createSequentialGroup()
|
|
.addContainerGap()
|
|
.addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
.addComponent(cbJoinAutoIngestCluster)
|
|
.addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
.addGap(3, 3, 3)
|
|
.addComponent(jPanelNodeType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(jPanelIngestSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
.addComponent(jPanelSharedConfig, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
);
|
|
|
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
|
this.setLayout(layout);
|
|
layout.setHorizontalGroup(
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(nodePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
);
|
|
layout.setVerticalGroup(
|
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
.addComponent(nodePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
);
|
|
}// </editor-fold>//GEN-END:initComponents
|
|
|
|
private void browseSharedSettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseSharedSettingsButtonActionPerformed
|
|
|
|
String oldText = sharedSettingsTextField.getText().trim();
|
|
// set the current directory of the FileChooser if the oldText is valid
|
|
File currentDir = new File(oldText);
|
|
if (currentDir.exists()) {
|
|
fc.setCurrentDirectory(currentDir);
|
|
}
|
|
|
|
fc.setDialogTitle("Select shared configuration folder:");
|
|
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
|
|
|
int retval = fc.showOpenDialog(this);
|
|
if (retval == JFileChooser.APPROVE_OPTION) {
|
|
String path = fc.getSelectedFile().getPath();
|
|
sharedSettingsTextField.setText(path);
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
}//GEN-LAST:event_browseSharedSettingsButtonActionPerformed
|
|
|
|
boolean permissionsAppropriate(String path) {
|
|
return FileUtil.hasReadWriteAccess(Paths.get(path));
|
|
}
|
|
|
|
private void downloadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_downloadButtonActionPerformed
|
|
// First save the shared config folder and solr settings to the properties
|
|
String globalSettingsPath = getNormalizedFolderPath(sharedSettingsTextField.getText().trim());
|
|
AutoIngestUserPreferences.setSharedConfigFolder(globalSettingsPath);
|
|
|
|
enableUI(false);
|
|
jLabelCurrentTask.setEnabled(true);
|
|
jLabelTaskDescription.setEnabled(true);
|
|
pbTaskInProgress.setEnabled(true);
|
|
pbTaskInProgress.setIndeterminate(true);
|
|
|
|
UpdateConfigSwingWorker worker = new UpdateConfigSwingWorker(ConfigTaskType.DOWNLOAD);
|
|
try {
|
|
worker.execute();
|
|
} catch (Exception ex) {
|
|
jLabelTaskDescription.setText(ex.getLocalizedMessage());
|
|
}
|
|
}//GEN-LAST:event_downloadButtonActionPerformed
|
|
|
|
private void uploadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uploadButtonActionPerformed
|
|
store();
|
|
|
|
enableUI(false);
|
|
jLabelCurrentTask.setEnabled(true);
|
|
jLabelTaskDescription.setEnabled(true);
|
|
pbTaskInProgress.setEnabled(true);
|
|
pbTaskInProgress.setIndeterminate(true);
|
|
|
|
UpdateConfigSwingWorker worker = new UpdateConfigSwingWorker(ConfigTaskType.UPLOAD);
|
|
try {
|
|
worker.execute();
|
|
} catch (Exception ex) {
|
|
jLabelTaskDescription.setText(ex.getLocalizedMessage());
|
|
}
|
|
}//GEN-LAST:event_uploadButtonActionPerformed
|
|
|
|
private void sharedConfigCheckboxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sharedConfigCheckboxItemStateChanged
|
|
// Enable the global settings text box and browse button iff the checkbox is checked and enabled
|
|
setSharedConfigEnable();
|
|
}//GEN-LAST:event_sharedConfigCheckboxItemStateChanged
|
|
|
|
private void setSharedConfigEnable() {
|
|
setEnabledStateForSharedConfiguration();
|
|
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected() && jRadioButtonAutomated.isSelected()) {
|
|
sharedSettingsTextField.setEnabled(true);
|
|
browseSharedSettingsButton.setEnabled(true);
|
|
masterNodeCheckBox.setEnabled(true);
|
|
downloadButton.setEnabled(true);
|
|
validateSettings();
|
|
controller.changed();
|
|
} else {
|
|
sharedSettingsTextField.setEnabled(false);
|
|
browseSharedSettingsButton.setEnabled(false);
|
|
masterNodeCheckBox.setEnabled(false);
|
|
downloadButton.setEnabled(false);
|
|
sharedSettingsErrorTextField.setText("");
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
}
|
|
|
|
private void masterNodeCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_masterNodeCheckBoxItemStateChanged
|
|
// Enable the global settings text box and browse button iff the checkbox is checked and enabled
|
|
setEnabledStateForSharedConfiguration();
|
|
if (masterNodeCheckBox.isEnabled() && masterNodeCheckBox.isSelected()) {
|
|
uploadButton.setEnabled(true);
|
|
validateSettings(); // This will disable the upload/save button if the settings aren't currently valid
|
|
controller.changed();
|
|
} else {
|
|
uploadButton.setEnabled(false);
|
|
}
|
|
if (sharedConfigCheckbox.isEnabled()) {
|
|
jRadioButtonAutomated.setEnabled(false);
|
|
jRadioButtonReview.setEnabled(false);
|
|
}
|
|
}//GEN-LAST:event_masterNodeCheckBoxItemStateChanged
|
|
|
|
private void cbJoinAutoIngestClusterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbJoinAutoIngestClusterActionPerformed
|
|
enableOptionsBasedOnMode(getModeFromRadioButtons());
|
|
controller.changed();
|
|
}//GEN-LAST:event_cbJoinAutoIngestClusterActionPerformed
|
|
|
|
private void tbOopsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbOopsActionPerformed
|
|
// TODO add your handling code here:
|
|
}//GEN-LAST:event_tbOopsActionPerformed
|
|
|
|
private void browseOutputFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseOutputFolderButtonActionPerformed
|
|
String oldText = outputPathTextField.getText().trim();
|
|
// set the current directory of the FileChooser if the oldText is valid
|
|
File currentDir = new File(oldText);
|
|
if (currentDir.exists()) {
|
|
fc.setCurrentDirectory(currentDir);
|
|
}
|
|
|
|
fc.setDialogTitle("Select case output folder:");
|
|
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
|
|
|
int retval = fc.showOpenDialog(this);
|
|
if (retval == JFileChooser.APPROVE_OPTION) {
|
|
String path = fc.getSelectedFile().getPath();
|
|
outputPathTextField.setText(path);
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
}//GEN-LAST:event_browseOutputFolderButtonActionPerformed
|
|
|
|
private void browseInputFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseInputFolderButtonActionPerformed
|
|
String oldText = inputPathTextField.getText().trim();
|
|
// set the current directory of the FileChooser if the oldText is valid
|
|
File currentDir = new File(oldText);
|
|
if (currentDir.exists()) {
|
|
fc.setCurrentDirectory(currentDir);
|
|
}
|
|
|
|
fc.setDialogTitle("Select case input folder:");
|
|
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
|
|
|
int retval = fc.showOpenDialog(this);
|
|
if (retval == JFileChooser.APPROVE_OPTION) {
|
|
String path = fc.getSelectedFile().getPath();
|
|
inputPathTextField.setText(path);
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
}//GEN-LAST:event_browseInputFolderButtonActionPerformed
|
|
|
|
private void jRadioButtonReviewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonReviewActionPerformed
|
|
if (cbJoinAutoIngestCluster.isSelected()) {
|
|
enableOptionsBasedOnMode(OptionsUiMode.REVIEW);
|
|
setSharedConfigEnable();
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
}//GEN-LAST:event_jRadioButtonReviewActionPerformed
|
|
|
|
private void jRadioButtonAutomatedActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonAutomatedActionPerformed
|
|
if (cbJoinAutoIngestCluster.isSelected()) {
|
|
enableOptionsBasedOnMode(OptionsUiMode.AIM);
|
|
setSharedConfigEnable();
|
|
validateSettings();
|
|
controller.changed();
|
|
}
|
|
}//GEN-LAST:event_jRadioButtonAutomatedActionPerformed
|
|
|
|
private void bnLoggingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnLoggingActionPerformed
|
|
JDialog jDialog = new JDialog();
|
|
NodeStatusLogPanel loggingPanel = new NodeStatusLogPanel(jDialog);
|
|
|
|
JScrollPane jScrollPane = new JScrollPane(loggingPanel);
|
|
jScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
|
|
jScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
|
jScrollPane.setMinimumSize(new Dimension(100, 100));
|
|
jDialog.add(jScrollPane);
|
|
jDialog.setTitle(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.NodeStatusLogging.text"));
|
|
jDialog.setIconImage(ImageUtilities.loadImage("org/sleuthkit/autopsy/experimental/images/frame32.gif"));
|
|
jDialog.setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
|
|
jDialog.pack();
|
|
jDialog.setLocationRelativeTo(this);
|
|
jDialog.setVisible(true);
|
|
}//GEN-LAST:event_bnLoggingActionPerformed
|
|
|
|
private void bnFileExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnFileExportActionPerformed
|
|
JDialog jDialog = new JDialog();
|
|
FileExporterSettingsPanel fileExporterSettingsPanel = new FileExporterSettingsPanel(jDialog);
|
|
jDialog.addWindowListener(new java.awt.event.WindowAdapter() {
|
|
@Override
|
|
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
|
|
fileExporterSettingsPanel.store();
|
|
}
|
|
});
|
|
JScrollPane jScrollPane = new JScrollPane(fileExporterSettingsPanel);
|
|
jScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
|
|
jScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
|
jScrollPane.setMinimumSize(new Dimension(100, 100));
|
|
jDialog.add(jScrollPane);
|
|
jDialog.setTitle(NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.FileExportRules.text"));
|
|
jDialog.setIconImage(ImageUtilities.loadImage("org/sleuthkit/autopsy/experimental/images/frame32.gif"));
|
|
jDialog.setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
|
|
jDialog.pack();
|
|
jDialog.setLocationRelativeTo(this);
|
|
jDialog.setVisible(true);
|
|
}//GEN-LAST:event_bnFileExportActionPerformed
|
|
|
|
private void bnAdvancedSettingsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnAdvancedSettingsActionPerformed
|
|
AdvancedAutoIngestSettingsPanel advancedAutoIngestSettingsPanel = new AdvancedAutoIngestSettingsPanel(getModeFromRadioButtons());
|
|
if (JOptionPane.showConfirmDialog(null, advancedAutoIngestSettingsPanel,
|
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.AdvancedAutoIngestSettingsPanel.Title"),
|
|
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) {
|
|
advancedAutoIngestSettingsPanel.store();
|
|
}
|
|
}//GEN-LAST:event_bnAdvancedSettingsActionPerformed
|
|
|
|
private void bnEditIngestSettingsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnEditIngestSettingsActionPerformed
|
|
displayIngestJobSettingsPanel();
|
|
}//GEN-LAST:event_bnEditIngestSettingsActionPerformed
|
|
|
|
private void enableUI(boolean state) {
|
|
enableOptionsBasedOnMode(OptionsUiMode.DOWNLOADING_CONFIGURATION);
|
|
downloadButton.setEnabled(state);
|
|
uploadButton.setEnabled(state);
|
|
browseSharedSettingsButton.setEnabled(state);
|
|
sharedConfigCheckbox.setEnabled(state);
|
|
masterNodeCheckBox.setEnabled(state);
|
|
sharedSettingsTextField.setEnabled(state);
|
|
}
|
|
|
|
private void resetUI() {
|
|
load(true);
|
|
controller.changed();
|
|
}
|
|
|
|
public enum ConfigTaskType {
|
|
|
|
DOWNLOAD, UPLOAD
|
|
}
|
|
|
|
/**
|
|
* Handles running the upload configuration task. There's some added
|
|
* complexity here in order to re-enable the update button after the update
|
|
* completes.
|
|
*
|
|
*/
|
|
public class UpdateConfigSwingWorker extends SwingWorker<Void, String> {
|
|
|
|
private String errorMessage = null;
|
|
private SharedConfiguration.SharedConfigResult uploadResult = SharedConfiguration.SharedConfigResult.SUCCESS;
|
|
private final SharedConfiguration sharedConfig = new SharedConfiguration(this);
|
|
private final ConfigTaskType task;
|
|
|
|
protected UpdateConfigSwingWorker(ConfigTaskType task) {
|
|
this.task = task;
|
|
}
|
|
|
|
@Override
|
|
protected Void doInBackground() throws InterruptedException {
|
|
try {
|
|
if (task == ConfigTaskType.UPLOAD) {
|
|
uploadResult = sharedConfig.uploadConfiguration();
|
|
} else {
|
|
uploadResult = sharedConfig.downloadConfiguration();
|
|
}
|
|
} catch (Exception ex) {
|
|
if (ex instanceof InterruptedException) {
|
|
throw (InterruptedException) ex;
|
|
}
|
|
errorMessage = ex.getLocalizedMessage();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void publishStatus(String status) {
|
|
publish(status);
|
|
}
|
|
|
|
@Override
|
|
protected void process(List<String> messages) {
|
|
for (String status : messages) {
|
|
jLabelTaskDescription.setText(status);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void done() {
|
|
// It would be nicer to hide the progress bar, but that seems to shrink the whole panel
|
|
pbTaskInProgress.setIndeterminate(false);
|
|
|
|
if (uploadResult == SharedConfiguration.SharedConfigResult.LOCKED) {
|
|
jLabelTaskDescription.setText("Transfer of shared configuration incomplete");
|
|
JOptionPane.showMessageDialog(null, "Shared configuration folder is currently locked by another node - try again in a few minutes", "Error", JOptionPane.ERROR_MESSAGE);
|
|
} else if (errorMessage != null) {
|
|
//MessageNotifyUtil.Message.info(errorMessage);
|
|
jLabelTaskDescription.setText("Transfer of shared configuration incomplete");
|
|
JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), errorMessage, "Error copying configuration", JOptionPane.ERROR_MESSAGE);
|
|
} else {
|
|
jLabelTaskDescription.setText("Shared configuration copied successfully");
|
|
}
|
|
|
|
// Check if anything requiring a reset has changed and update the UI
|
|
if (isResetNeeded()) {
|
|
JOptionPane.showMessageDialog(null,
|
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.MustRestart"),
|
|
NbBundle.getMessage(AutoIngestSettingsPanel.class, "AutoIngestSettingsPanel.restartRequiredLabel.text"),
|
|
JOptionPane.WARNING_MESSAGE);
|
|
}
|
|
|
|
// Re-enable everything here
|
|
resetUI();
|
|
setEnabledStateForSharedConfiguration();
|
|
pbTaskInProgress.setEnabled(false);
|
|
}
|
|
}
|
|
|
|
void setEnabledStateForSharedConfiguration() {
|
|
if (jRadioButtonAutomated.isSelected() && cbJoinAutoIngestCluster.isSelected()) {
|
|
if (sharedConfigCheckbox.isEnabled() && sharedConfigCheckbox.isSelected()) {
|
|
setEnabledState(masterNodeCheckBox.isSelected());
|
|
} else {
|
|
// If we are in AIM mode and shared config is not enabled, allow this
|
|
setEnabledState(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
void setEnabledState(boolean enabled) {
|
|
bnAdvancedSettings.setEnabled(enabled);
|
|
bnEditIngestSettings.setEnabled(enabled);
|
|
bnFileExport.setEnabled(enabled);
|
|
bnLogging.setEnabled(enabled);
|
|
browseInputFolderButton.setEnabled(enabled);
|
|
browseOutputFolderButton.setEnabled(enabled);
|
|
browseSharedSettingsButton.setEnabled(sharedConfigCheckbox.isSelected() && jRadioButtonAutomated.isSelected());
|
|
configButtonErrorTextField.setEnabled(enabled);
|
|
inputPathTextField.setEnabled(enabled);
|
|
jLabelInvalidImageFolder.setEnabled(enabled);
|
|
jLabelInvalidResultsFolder.setEnabled(enabled);
|
|
jLabelSelectInputFolder.setEnabled(enabled);
|
|
jLabelSelectMode.setEnabled(enabled);
|
|
jLabelSelectOutputFolder.setEnabled(enabled);
|
|
jPanelIngestSettings.setEnabled(enabled);
|
|
jPanelNodeType.setEnabled(enabled);
|
|
jPanelSharedConfig.setEnabled(enabled);
|
|
jRadioButtonAutomated.setEnabled(enabled);
|
|
jRadioButtonReview.setEnabled(enabled);
|
|
outputPathTextField.setEnabled(enabled);
|
|
restartRequiredNodeLabel.setEnabled(enabled);
|
|
}
|
|
|
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
|
private javax.swing.JButton bnAdvancedSettings;
|
|
private javax.swing.JButton bnEditIngestSettings;
|
|
private javax.swing.JButton bnFileExport;
|
|
private javax.swing.JButton bnLogging;
|
|
private javax.swing.JButton browseInputFolderButton;
|
|
private javax.swing.JButton browseOutputFolderButton;
|
|
private javax.swing.JButton browseSharedSettingsButton;
|
|
private javax.swing.JCheckBox cbJoinAutoIngestCluster;
|
|
private javax.swing.JTextField configButtonErrorTextField;
|
|
private javax.swing.JButton downloadButton;
|
|
private javax.swing.JTextField inputPathTextField;
|
|
private javax.swing.JLabel jLabel1;
|
|
private javax.swing.JLabel jLabelCurrentTask;
|
|
private javax.swing.JLabel jLabelInvalidImageFolder;
|
|
private javax.swing.JLabel jLabelInvalidResultsFolder;
|
|
private javax.swing.JLabel jLabelSelectInputFolder;
|
|
private javax.swing.JLabel jLabelSelectMode;
|
|
private javax.swing.JLabel jLabelSelectOutputFolder;
|
|
private javax.swing.JLabel jLabelTaskDescription;
|
|
private javax.swing.JPanel jPanelIngestSettings;
|
|
private javax.swing.JPanel jPanelNodeType;
|
|
private javax.swing.JPanel jPanelSharedConfig;
|
|
private javax.swing.JRadioButton jRadioButtonAutomated;
|
|
private javax.swing.JRadioButton jRadioButtonReview;
|
|
private javax.swing.JSeparator jSeparator1;
|
|
private javax.swing.JCheckBox masterNodeCheckBox;
|
|
private javax.swing.ButtonGroup modeRadioButtons;
|
|
private javax.swing.JPanel nodePanel;
|
|
private javax.swing.JTextField outputPathTextField;
|
|
private javax.swing.JProgressBar pbTaskInProgress;
|
|
private javax.swing.JLabel restartRequiredNodeLabel;
|
|
private javax.swing.JCheckBox sharedConfigCheckbox;
|
|
private javax.swing.JTextField sharedSettingsErrorTextField;
|
|
private javax.swing.JTextField sharedSettingsTextField;
|
|
private javax.swing.JTextField tbOops;
|
|
private javax.swing.JButton uploadButton;
|
|
// End of variables declaration//GEN-END:variables
|
|
}
|