mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 02:07:42 +00:00
Merge pull request #2452 from rcordovano/develop
4.3.0 preps: DSPs, public API restore, const name
This commit is contained in:
commit
6ad40d4949
@ -20,7 +20,6 @@ package org.sleuthkit.autopsy.casemodule;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import javax.swing.JPanel;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
@ -30,11 +29,11 @@ import javax.swing.filechooser.FileFilter;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
import org.openide.util.lookup.ServiceProviders;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutomatedIngestDataSourceProcessor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
||||
import org.sleuthkit.autopsy.coreutils.DataSourceUtils;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutoIngestDataSourceProcessor;
|
||||
|
||||
/**
|
||||
* A image file data source processor that implements the DataSourceProcessor
|
||||
@ -44,17 +43,17 @@ import org.sleuthkit.autopsy.coreutils.DataSourceUtils;
|
||||
*/
|
||||
@ServiceProviders(value={
|
||||
@ServiceProvider(service=DataSourceProcessor.class),
|
||||
@ServiceProvider(service=AutomatedIngestDataSourceProcessor.class)}
|
||||
@ServiceProvider(service=AutoIngestDataSourceProcessor.class)}
|
||||
)
|
||||
public class ImageDSProcessor implements AutomatedIngestDataSourceProcessor {
|
||||
public class ImageDSProcessor implements DataSourceProcessor, AutoIngestDataSourceProcessor {
|
||||
|
||||
private final static String DATA_SOURCE_TYPE = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.dsType.text");
|
||||
private static final List<String> allExt = new ArrayList<>();
|
||||
private static final GeneralFilter rawFilter = new GeneralFilter(GeneralFilter.RAW_IMAGE_EXTS, GeneralFilter.RAW_IMAGE_DESC);
|
||||
private static final GeneralFilter encaseFilter = new GeneralFilter(GeneralFilter.ENCASE_IMAGE_EXTS, GeneralFilter.ENCASE_IMAGE_DESC);
|
||||
private static final GeneralFilter virtualMachineFilter = new GeneralFilter(GeneralFilter.VIRTUAL_MACHINE_EXTS, GeneralFilter.VIRTUAL_MACHINE_DESC);
|
||||
private static final String allDesc = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.allDesc.text");
|
||||
private static final GeneralFilter allFilter = new GeneralFilter(allExt, allDesc);
|
||||
private static final String ALL_DESC = NbBundle.getMessage(ImageDSProcessor.class, "ImageDSProcessor.allDesc.text");
|
||||
private static final GeneralFilter allFilter = new GeneralFilter(allExt, ALL_DESC);
|
||||
private static final List<FileFilter> filtersList = new ArrayList<>();
|
||||
private final ImageFilePanel configPanel;
|
||||
private AddImageTask addImageTask;
|
||||
@ -218,6 +217,48 @@ public class ImageDSProcessor implements AutomatedIngestDataSourceProcessor {
|
||||
setDataSourceOptionsCalled = false;
|
||||
}
|
||||
|
||||
private static boolean isAcceptedByFiler(File file, List<FileFilter> filters) {
|
||||
for (FileFilter filter : filters) {
|
||||
if (filter.accept(file)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException {
|
||||
|
||||
// check file extension for supported types
|
||||
if (!isAcceptedByFiler(dataSourcePath.toFile(), filtersList)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
try {
|
||||
// verify that the image has a file system that TSK can process
|
||||
Case currentCase = Case.getCurrentCase();
|
||||
if (!DataSourceUtils.imageHasFileSystem(dataSourcePath)) {
|
||||
// image does not have a file system that TSK can process
|
||||
return 0;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new AutoIngestDataSourceProcessorException("Exception inside canProcess() method", ex);
|
||||
}
|
||||
|
||||
// able to process the data source
|
||||
return 100;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutoIngestDataSourceProcessorException {
|
||||
this.deviceId = deviceId;
|
||||
this.imagePath = dataSourcePath.toString();
|
||||
this.timeZone = Calendar.getInstance().getTimeZone().getID();
|
||||
this.ignoreFatOrphanFiles = false;
|
||||
setDataSourceOptionsCalled = true;
|
||||
run(deviceId, dataSourcePath.toString(), timeZone, ignoreFatOrphanFiles, progressMonitor, callBack);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the configuration of the data source processor without using the
|
||||
* selection and configuration panel.
|
||||
@ -239,46 +280,5 @@ public class ImageDSProcessor implements AutomatedIngestDataSourceProcessor {
|
||||
this.ignoreFatOrphanFiles = ignoreFatOrphanFiles;
|
||||
setDataSourceOptionsCalled = true;
|
||||
}
|
||||
|
||||
private static boolean isAcceptedByFiler(File file, List<FileFilter> filters) {
|
||||
for (FileFilter filter : filters) {
|
||||
if (filter.accept(file)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int canProcess(Path dataSourcePath) throws AutomatedIngestDataSourceProcessorException {
|
||||
|
||||
// check file extension for supported types
|
||||
if (!isAcceptedByFiler(dataSourcePath.toFile(), filtersList)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
try {
|
||||
// verify that the image has a file system that TSK can process
|
||||
Case currentCase = Case.getCurrentCase();
|
||||
if (!DataSourceUtils.imageHasFileSystem(dataSourcePath)) {
|
||||
// image does not have a file system that TSK can process
|
||||
return 0;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new AutomatedIngestDataSourceProcessorException("Exception inside canProcess() method", ex);
|
||||
}
|
||||
|
||||
// able to process the data source
|
||||
return 100;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutomatedIngestDataSourceProcessorException {
|
||||
this.deviceId = deviceId;
|
||||
this.imagePath = dataSourcePath.toString();
|
||||
this.timeZone = Calendar.getInstance().getTimeZone().getID();
|
||||
this.ignoreFatOrphanFiles = false;
|
||||
setDataSourceOptionsCalled = true;
|
||||
run(deviceId, dataSourcePath.toString(), timeZone, ignoreFatOrphanFiles, progressMonitor, callBack);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -26,11 +26,11 @@ import javax.swing.JPanel;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
import org.openide.util.lookup.ServiceProviders;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutomatedIngestDataSourceProcessor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
||||
import org.sleuthkit.autopsy.coreutils.DriveUtils;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutoIngestDataSourceProcessor;
|
||||
|
||||
/**
|
||||
* A local drive data source processor that implements the DataSourceProcessor
|
||||
@ -40,9 +40,9 @@ import org.sleuthkit.autopsy.coreutils.DriveUtils;
|
||||
*/
|
||||
@ServiceProviders(value={
|
||||
@ServiceProvider(service=DataSourceProcessor.class),
|
||||
@ServiceProvider(service=AutomatedIngestDataSourceProcessor.class)}
|
||||
@ServiceProvider(service=AutoIngestDataSourceProcessor.class)}
|
||||
)
|
||||
public class LocalDiskDSProcessor implements AutomatedIngestDataSourceProcessor {
|
||||
public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestDataSourceProcessor {
|
||||
|
||||
private static final String DATA_SOURCE_TYPE = NbBundle.getMessage(LocalDiskDSProcessor.class, "LocalDiskDSProcessor.dsType.text");
|
||||
private final LocalDiskPanel configPanel;
|
||||
@ -196,6 +196,37 @@ public class LocalDiskDSProcessor implements AutomatedIngestDataSourceProcessor
|
||||
setDataSourceOptionsCalled = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException {
|
||||
|
||||
// verify that the data source is not a file or a directory
|
||||
File file = dataSourcePath.toFile();
|
||||
// ELTODO this needs to be tested more. should I keep isDirectory or just test for isFile?
|
||||
if (file.isFile() || file.isDirectory()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// check whether data source is an existing disk or partition
|
||||
// ELTODO this needs to be tested more. do these methods actually work correctly?
|
||||
// or should I use PlatformUtil.getPhysicalDrives() and PlatformUtil.getPartitions() instead?
|
||||
String path = dataSourcePath.toString();
|
||||
if ( (DriveUtils.isPhysicalDrive(path) || DriveUtils.isPartition(path)) && DriveUtils.driveExists(path) ) {
|
||||
return 90;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutoIngestDataSourceProcessorException {
|
||||
this.deviceId = deviceId;
|
||||
this.drivePath = dataSourcePath.toString();
|
||||
this.timeZone = Calendar.getInstance().getTimeZone().getID();
|
||||
this.ignoreFatOrphanFiles = false;
|
||||
setDataSourceOptionsCalled = true;
|
||||
run(deviceId, drivePath, timeZone, ignoreFatOrphanFiles, progressMonitor, callBack);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the configuration of the data source processor without using the
|
||||
* configuration panel.
|
||||
@ -217,36 +248,5 @@ public class LocalDiskDSProcessor implements AutomatedIngestDataSourceProcessor
|
||||
this.ignoreFatOrphanFiles = ignoreFatOrphanFiles;
|
||||
setDataSourceOptionsCalled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int canProcess(Path dataSourcePath) throws AutomatedIngestDataSourceProcessorException {
|
||||
|
||||
// verify that the data source is not a file or a directory
|
||||
File file = dataSourcePath.toFile();
|
||||
// ELTODO this needs to be tested more. should I keep isDirectory or just test for isFile?
|
||||
if (file.isFile() || file.isDirectory()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// check whether data source is an existing disk or partition
|
||||
// ELTODO this needs to be tested more. do these methods actually work correctly?
|
||||
// or should I use PlatformUtil.getPhysicalDrives() and PlatformUtil.getPartitions() instead?
|
||||
String path = dataSourcePath.toString();
|
||||
if ( (DriveUtils.isPhysicalDrive(path) || DriveUtils.isPartition(path)) && DriveUtils.driveExists(path) ) {
|
||||
return 90;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutomatedIngestDataSourceProcessorException {
|
||||
this.deviceId = deviceId;
|
||||
this.drivePath = dataSourcePath.toString();
|
||||
this.timeZone = Calendar.getInstance().getTimeZone().getID();
|
||||
this.ignoreFatOrphanFiles = false;
|
||||
setDataSourceOptionsCalled = true;
|
||||
run(deviceId, drivePath, timeZone, ignoreFatOrphanFiles, progressMonitor, callBack);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -26,10 +26,10 @@ import javax.swing.JPanel;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
import org.openide.util.lookup.ServiceProviders;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutomatedIngestDataSourceProcessor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutoIngestDataSourceProcessor;
|
||||
|
||||
/**
|
||||
* A local/logical files and/or directories data source processor that
|
||||
@ -39,9 +39,9 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
||||
*/
|
||||
@ServiceProviders(value={
|
||||
@ServiceProvider(service=DataSourceProcessor.class),
|
||||
@ServiceProvider(service=AutomatedIngestDataSourceProcessor.class)}
|
||||
@ServiceProvider(service=AutoIngestDataSourceProcessor.class)}
|
||||
)
|
||||
public class LocalFilesDSProcessor implements AutomatedIngestDataSourceProcessor {
|
||||
public class LocalFilesDSProcessor implements DataSourceProcessor, AutoIngestDataSourceProcessor {
|
||||
|
||||
private static final String DATA_SOURCE_TYPE = NbBundle.getMessage(LocalFilesDSProcessor.class, "LocalFilesDSProcessor.dsType");
|
||||
private final LocalFilesPanel configPanel;
|
||||
@ -185,6 +185,20 @@ public class LocalFilesDSProcessor implements AutomatedIngestDataSourceProcessor
|
||||
setDataSourceOptionsCalled = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException {
|
||||
// Local files DSP can process any file by simply adding it as a logical file.
|
||||
// It should return lowest possible non-zero confidence level and be treated
|
||||
// as the "option of last resort" for auto ingest purposes
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutoIngestDataSourceProcessorException {
|
||||
this.localFilePaths = Arrays.asList(new String[]{dataSourcePath.toString()});
|
||||
run(deviceId, deviceId, this.localFilePaths, progressMonitor, callBack);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the configuration of the data source processor without using the
|
||||
* configuration panel. The data source processor will assign a UUID to the
|
||||
@ -205,19 +219,5 @@ public class LocalFilesDSProcessor implements AutomatedIngestDataSourceProcessor
|
||||
this.localFilePaths = Arrays.asList(paths.split(","));
|
||||
setDataSourceOptionsCalled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int canProcess(Path dataSourcePath) throws AutomatedIngestDataSourceProcessorException {
|
||||
// Local files DSP can process any file by simply adding it as a logical file.
|
||||
// It should return lowest possible non-zero confidence level and be treated
|
||||
// as the "option of last resort" for auto ingest purposes
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutomatedIngestDataSourceProcessorException {
|
||||
this.localFilePaths = Arrays.asList(new String[]{dataSourcePath.toString()});
|
||||
run(deviceId, deviceId, this.localFilePaths, progressMonitor, callBack);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -40,12 +40,12 @@ import org.sleuthkit.datamodel.TskData.DbType;
|
||||
*/
|
||||
public final class UserPreferences {
|
||||
|
||||
private static final boolean isWindowsOS = PlatformUtil.isWindowsOS();
|
||||
private static final boolean IS_WINDOWS_OS = PlatformUtil.isWindowsOS();
|
||||
private static final Preferences preferences = NbPreferences.forModule(UserPreferences.class);
|
||||
public static final String KEEP_PREFERRED_VIEWER = "KeepPreferredViewer"; // NON-NLS
|
||||
public static final String HIDE_KNOWN_FILES_IN_DATA_SOURCES_TREE = "HideKnownFilesInDataSourcesTree"; //NON-NLS
|
||||
public static final String HIDE_KNOWN_FILES_IN_DATA_SRCS_TREE = "HideKnownFilesInDataSourcesTree"; //NON-NLS
|
||||
public static final String HIDE_KNOWN_FILES_IN_VIEWS_TREE = "HideKnownFilesInViewsTree"; //NON-NLS
|
||||
public static final String HIDE_SLACK_FILES_IN_DATA_SOURCES_TREE = "HideSlackFilesInDataSourcesTree"; //NON-NLS
|
||||
public static final String HIDE_SLACK_FILES_IN_DATA_SRCS_TREE = "HideSlackFilesInDataSourcesTree"; //NON-NLS
|
||||
public static final String HIDE_SLACK_FILES_IN_VIEWS_TREE = "HideSlackFilesInViewsTree"; //NON-NLS
|
||||
public static final String DISPLAY_TIMES_IN_LOCAL_TIME = "DisplayTimesInLocalTime"; //NON-NLS
|
||||
public static final String NUMBER_OF_FILE_INGEST_THREADS = "NumberOfFileIngestThreads"; //NON-NLS
|
||||
@ -111,11 +111,11 @@ public final class UserPreferences {
|
||||
}
|
||||
|
||||
public static boolean hideKnownFilesInDataSourcesTree() {
|
||||
return preferences.getBoolean(HIDE_KNOWN_FILES_IN_DATA_SOURCES_TREE, false);
|
||||
return preferences.getBoolean(HIDE_KNOWN_FILES_IN_DATA_SRCS_TREE, false);
|
||||
}
|
||||
|
||||
public static void setHideKnownFilesInDataSourcesTree(boolean value) {
|
||||
preferences.putBoolean(HIDE_KNOWN_FILES_IN_DATA_SOURCES_TREE, value);
|
||||
preferences.putBoolean(HIDE_KNOWN_FILES_IN_DATA_SRCS_TREE, value);
|
||||
}
|
||||
|
||||
public static boolean hideKnownFilesInViewsTree() {
|
||||
@ -127,11 +127,11 @@ public final class UserPreferences {
|
||||
}
|
||||
|
||||
public static boolean hideSlackFilesInDataSourcesTree() {
|
||||
return preferences.getBoolean(HIDE_SLACK_FILES_IN_DATA_SOURCES_TREE, true);
|
||||
return preferences.getBoolean(HIDE_SLACK_FILES_IN_DATA_SRCS_TREE, true);
|
||||
}
|
||||
|
||||
public static void setHideSlackFilesInDataSourcesTree(boolean value) {
|
||||
preferences.putBoolean(HIDE_SLACK_FILES_IN_DATA_SOURCES_TREE, value);
|
||||
preferences.putBoolean(HIDE_SLACK_FILES_IN_DATA_SRCS_TREE, value);
|
||||
}
|
||||
|
||||
public static boolean hideSlackFilesInViewsTree() {
|
||||
@ -198,7 +198,7 @@ public final class UserPreferences {
|
||||
}
|
||||
|
||||
public static boolean getIsMultiUserModeEnabled() {
|
||||
if (!isWindowsOS) {
|
||||
if (!IS_WINDOWS_OS) {
|
||||
return false;
|
||||
}
|
||||
return preferences.getBoolean(IS_MULTI_USER_MODE_ENABLED, false);
|
||||
|
@ -26,7 +26,7 @@ import java.nio.file.Path;
|
||||
*
|
||||
* @author elivis
|
||||
*/
|
||||
public interface AutomatedIngestDataSourceProcessor extends DataSourceProcessor {
|
||||
public interface AutoIngestDataSourceProcessor extends DataSourceProcessor {
|
||||
|
||||
/**
|
||||
* Indicates whether the DataSourceProcessor is capable of processing the
|
||||
@ -44,7 +44,7 @@ public interface AutomatedIngestDataSourceProcessor extends DataSourceProcessor
|
||||
* @throws
|
||||
* org.sleuthkit.autopsy.corecomponentinterfaces.AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException
|
||||
*/
|
||||
int canProcess(Path dataSourcePath) throws AutomatedIngestDataSourceProcessorException;
|
||||
int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException;
|
||||
|
||||
/**
|
||||
* Adds a data source to the case database using a background task in a
|
||||
@ -66,20 +66,20 @@ public interface AutomatedIngestDataSourceProcessor extends DataSourceProcessor
|
||||
* @throws
|
||||
* org.sleuthkit.autopsy.corecomponentinterfaces.AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException
|
||||
*/
|
||||
void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutomatedIngestDataSourceProcessorException;
|
||||
void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) throws AutoIngestDataSourceProcessorException;
|
||||
|
||||
/**
|
||||
* A custom exception for the use of AutomatedIngestDataSourceProcessor.
|
||||
*/
|
||||
public class AutomatedIngestDataSourceProcessorException extends Exception {
|
||||
public class AutoIngestDataSourceProcessorException extends Exception {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public AutomatedIngestDataSourceProcessorException(String message) {
|
||||
public AutoIngestDataSourceProcessorException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public AutomatedIngestDataSourceProcessorException(String message, Throwable cause) {
|
||||
public AutoIngestDataSourceProcessorException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
@ -46,7 +46,7 @@ public class KnownFileFilterNode extends FilterNode {
|
||||
@Override
|
||||
public void preferenceChange(PreferenceChangeEvent evt) {
|
||||
switch (evt.getKey()) {
|
||||
case UserPreferences.HIDE_KNOWN_FILES_IN_DATA_SOURCES_TREE:
|
||||
case UserPreferences.HIDE_KNOWN_FILES_IN_DATA_SRCS_TREE:
|
||||
filterFromDataSources = UserPreferences.hideKnownFilesInDataSourcesTree();
|
||||
break;
|
||||
case UserPreferences.HIDE_KNOWN_FILES_IN_VIEWS_TREE:
|
||||
|
@ -45,7 +45,7 @@ public class SlackFileFilterNode extends FilterNode {
|
||||
@Override
|
||||
public void preferenceChange(PreferenceChangeEvent evt) {
|
||||
switch (evt.getKey()) {
|
||||
case UserPreferences.HIDE_SLACK_FILES_IN_DATA_SOURCES_TREE:
|
||||
case UserPreferences.HIDE_SLACK_FILES_IN_DATA_SRCS_TREE:
|
||||
filterFromDataSources = UserPreferences.hideSlackFilesInDataSourcesTree();
|
||||
break;
|
||||
case UserPreferences.HIDE_SLACK_FILES_IN_VIEWS_TREE:
|
||||
|
@ -130,8 +130,8 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat
|
||||
@Override
|
||||
public void preferenceChange(PreferenceChangeEvent evt) {
|
||||
switch (evt.getKey()) {
|
||||
case UserPreferences.HIDE_KNOWN_FILES_IN_DATA_SOURCES_TREE:
|
||||
case UserPreferences.HIDE_SLACK_FILES_IN_DATA_SOURCES_TREE:
|
||||
case UserPreferences.HIDE_KNOWN_FILES_IN_DATA_SRCS_TREE:
|
||||
case UserPreferences.HIDE_SLACK_FILES_IN_DATA_SRCS_TREE:
|
||||
refreshContentTreeSafe();
|
||||
break;
|
||||
case UserPreferences.HIDE_KNOWN_FILES_IN_VIEWS_TREE:
|
||||
|
@ -120,13 +120,13 @@ import static org.sleuthkit.autopsy.experimental.autoingest.ManifestNodeData.Pro
|
||||
import static org.sleuthkit.autopsy.experimental.autoingest.ManifestNodeData.ProcessingStatus.PROCESSING;
|
||||
import static org.sleuthkit.autopsy.experimental.autoingest.ManifestNodeData.ProcessingStatus.COMPLETED;
|
||||
import static org.sleuthkit.autopsy.experimental.autoingest.ManifestNodeData.ProcessingStatus.DELETED;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutomatedIngestDataSourceProcessor;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException;
|
||||
import org.sleuthkit.autopsy.coreutils.FileUtil;
|
||||
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestAlertFile.AutoIngestAlertFileException;
|
||||
import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestJobLogger.AutoIngestJobLoggerException;
|
||||
import org.sleuthkit.autopsy.experimental.configuration.SharedConfiguration.SharedConfigurationException;
|
||||
import org.sleuthkit.autopsy.ingest.IngestJob.CancellationReason;
|
||||
import org.sleuthkit.autopsy.corecomponentinterfaces.AutoIngestDataSourceProcessor;
|
||||
|
||||
/**
|
||||
* An auto ingest manager is responsible for processing auto ingest jobs defined
|
||||
@ -1426,7 +1426,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
errorState = ErrorState.ALERT_FILE_ERROR;
|
||||
} else if (ex instanceof AutoIngestJobLoggerException) {
|
||||
errorState = ErrorState.JOB_LOGGER_ERROR;
|
||||
} else if (ex instanceof AutomatedIngestDataSourceProcessorException) {
|
||||
} else if (ex instanceof AutoIngestDataSourceProcessorException) {
|
||||
errorState = ErrorState.DATA_SOURCE_PROCESSOR_ERROR;
|
||||
} else if (ex instanceof InterruptedException) {
|
||||
throw (InterruptedException) ex;
|
||||
@ -1607,7 +1607,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
* i.e., if auto ingest is
|
||||
* shutting down.
|
||||
*/
|
||||
private void processJobs() throws CoordinationServiceException, SharedConfigurationException, ServicesMonitorException, DatabaseServerDownException, KeywordSearchServerDownException, CaseManagementException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException {
|
||||
private void processJobs() throws CoordinationServiceException, SharedConfigurationException, ServicesMonitorException, DatabaseServerDownException, KeywordSearchServerDownException, CaseManagementException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException {
|
||||
SYS_LOGGER.log(Level.INFO, "Started processing pending jobs queue");
|
||||
Lock manifestLock = JobProcessingTask.this.dequeueAndLockNextJob();
|
||||
while (null != manifestLock) {
|
||||
@ -1784,7 +1784,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
* i.e., if auto ingest is
|
||||
* shutting down.
|
||||
*/
|
||||
private void processJob() throws CoordinationServiceException, SharedConfigurationException, ServicesMonitorException, DatabaseServerDownException, KeywordSearchServerDownException, CaseManagementException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException {
|
||||
private void processJob() throws CoordinationServiceException, SharedConfigurationException, ServicesMonitorException, DatabaseServerDownException, KeywordSearchServerDownException, CaseManagementException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException {
|
||||
Manifest manifest = currentJob.getManifest();
|
||||
String manifestPath = manifest.getFilePath().toString();
|
||||
ManifestNodeData nodeData = new ManifestNodeData(coordinationService.getNodeData(CoordinationService.CategoryNode.MANIFESTS, manifestPath));
|
||||
@ -1873,7 +1873,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
* i.e., if auto ingest is
|
||||
* shutting down.
|
||||
*/
|
||||
private void attemptJob() throws CoordinationServiceException, SharedConfigurationException, ServicesMonitorException, DatabaseServerDownException, KeywordSearchServerDownException, CaseManagementException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException {
|
||||
private void attemptJob() throws CoordinationServiceException, SharedConfigurationException, ServicesMonitorException, DatabaseServerDownException, KeywordSearchServerDownException, CaseManagementException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException {
|
||||
updateConfiguration();
|
||||
if (currentJob.isCancelled() || jobProcessingTaskFuture.isCancelled()) {
|
||||
return;
|
||||
@ -2045,7 +2045,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
* while blocked, i.e., if auto
|
||||
* ingest is shutting down.
|
||||
*/
|
||||
private void runIngestForJob(Case caseForJob) throws CoordinationServiceException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException {
|
||||
private void runIngestForJob(Case caseForJob) throws CoordinationServiceException, AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException {
|
||||
Manifest manifest = currentJob.getManifest();
|
||||
String manifestPath = manifest.getFilePath().toString();
|
||||
try {
|
||||
@ -2085,7 +2085,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
* while blocked, i.e., if auto
|
||||
* ingest is shutting down.
|
||||
*/
|
||||
private void ingestDataSource(Case caseForJob) throws AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException {
|
||||
private void ingestDataSource(Case caseForJob) throws AnalysisStartupException, FileExportException, AutoIngestAlertFileException, AutoIngestJobLoggerException, InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException {
|
||||
if (currentJob.isCancelled() || jobProcessingTaskFuture.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
@ -2179,7 +2179,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
* while blocked, i.e., if auto
|
||||
* ingest is shutting down.
|
||||
*/
|
||||
private void runDataSourceProcessor(Case caseForJob, DataSource dataSource) throws InterruptedException, AutoIngestAlertFileException, AutoIngestJobLoggerException, AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException {
|
||||
private void runDataSourceProcessor(Case caseForJob, DataSource dataSource) throws InterruptedException, AutoIngestAlertFileException, AutoIngestJobLoggerException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException {
|
||||
Manifest manifest = currentJob.getManifest();
|
||||
Path manifestPath = manifest.getFilePath();
|
||||
SYS_LOGGER.log(Level.INFO, "Adding data source for {0} ", manifestPath);
|
||||
@ -2193,16 +2193,16 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
caseForJob.notifyAddingDataSource(taskId);
|
||||
|
||||
// lookup all AutomatedIngestDataSourceProcessors
|
||||
Collection<? extends AutomatedIngestDataSourceProcessor> processorCandidates = Lookup.getDefault().lookupAll(AutomatedIngestDataSourceProcessor.class);
|
||||
Collection<? extends AutoIngestDataSourceProcessor> processorCandidates = Lookup.getDefault().lookupAll(AutoIngestDataSourceProcessor.class);
|
||||
|
||||
Map<AutomatedIngestDataSourceProcessor, Integer> validDataSourceProcessorsMap = new HashMap<>();
|
||||
for (AutomatedIngestDataSourceProcessor processor : processorCandidates) {
|
||||
Map<AutoIngestDataSourceProcessor, Integer> validDataSourceProcessorsMap = new HashMap<>();
|
||||
for (AutoIngestDataSourceProcessor processor : processorCandidates) {
|
||||
try {
|
||||
int confidence = processor.canProcess(dataSource.getPath());
|
||||
if(confidence > 0){
|
||||
validDataSourceProcessorsMap.put(processor, confidence);
|
||||
}
|
||||
} catch (AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException ex) {
|
||||
} catch (AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException ex) {
|
||||
SYS_LOGGER.log(Level.SEVERE, "Exception while determining whether data source processor {0} can process {1}", new Object[]{processor.getDataSourceType(), dataSource.getPath()});
|
||||
// rethrow the exception. It will get caught & handled upstream and will result in AIM auto-pause.
|
||||
throw ex;
|
||||
@ -2220,21 +2220,21 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
}
|
||||
|
||||
// Get an ordered list of data source processors to try
|
||||
List<AutomatedIngestDataSourceProcessor> validDataSourceProcessors = validDataSourceProcessorsMap.entrySet().stream()
|
||||
.sorted(Map.Entry.<AutomatedIngestDataSourceProcessor, Integer>comparingByValue().reversed())
|
||||
List<AutoIngestDataSourceProcessor> validDataSourceProcessors = validDataSourceProcessorsMap.entrySet().stream()
|
||||
.sorted(Map.Entry.<AutoIngestDataSourceProcessor, Integer>comparingByValue().reversed())
|
||||
.map(Map.Entry::getKey)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
synchronized (ingestLock) {
|
||||
// Try each DSP in decreasing order of confidence
|
||||
for(AutomatedIngestDataSourceProcessor selectedProcessor:validDataSourceProcessors){
|
||||
for(AutoIngestDataSourceProcessor selectedProcessor:validDataSourceProcessors){
|
||||
jobLogger.logDataSourceProcessorSelected(selectedProcessor.getDataSourceType());
|
||||
SYS_LOGGER.log(Level.INFO, "Identified data source type for {0} as {1}", new Object[]{manifestPath, selectedProcessor.getDataSourceType()});
|
||||
try {
|
||||
selectedProcessor.process(dataSource.getDeviceId(), dataSource.getPath(), progressMonitor, callBack);
|
||||
ingestLock.wait();
|
||||
return;
|
||||
} catch (AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException ex) {
|
||||
} catch (AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException ex) {
|
||||
// Log that the current DSP failed and set the error flag. We consider it an error
|
||||
// if a DSP fails even if a later one succeeds since we expected to be able to process
|
||||
// the data source which each DSP on the list.
|
||||
@ -2248,7 +2248,7 @@ public final class AutoIngestManager extends Observable implements PropertyChang
|
||||
SYS_LOGGER.log(Level.SEVERE, "All data source processors failed to process {0}", dataSource.getPath());
|
||||
jobLogger.logFailedToAddDataSource();
|
||||
// Throw an exception. It will get caught & handled upstream and will result in AIM auto-pause.
|
||||
throw new AutomatedIngestDataSourceProcessor.AutomatedIngestDataSourceProcessorException("Failed to process " + dataSource.getPath() + " with all data source processors");
|
||||
throw new AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException("Failed to process " + dataSource.getPath() + " with all data source processors");
|
||||
}
|
||||
} finally {
|
||||
currentJob.setDataSourceProcessor(null);
|
||||
|
@ -42,11 +42,11 @@ import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
* perform this task at the desired size, and neither could numerous other
|
||||
* fonts.
|
||||
*/
|
||||
public class DropdownSingleKeywordSearchPanel extends KeywordSearchPanel {
|
||||
public class DropdownSingleTermSearchPanel extends KeywordSearchPanel {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final Logger LOGGER = Logger.getLogger(DropdownSingleKeywordSearchPanel.class.getName());
|
||||
private static DropdownSingleKeywordSearchPanel defaultInstance = null;
|
||||
private static final Logger LOGGER = Logger.getLogger(DropdownSingleTermSearchPanel.class.getName());
|
||||
private static DropdownSingleTermSearchPanel defaultInstance = null;
|
||||
|
||||
/**
|
||||
* Gets the default instance of a dropdown panel that provides GUI
|
||||
@ -54,9 +54,9 @@ public class DropdownSingleKeywordSearchPanel extends KeywordSearchPanel {
|
||||
* searches.
|
||||
* @return the default instance of DropdownSingleKeywordSearchPanel
|
||||
*/
|
||||
public static synchronized DropdownSingleKeywordSearchPanel getDefault() {
|
||||
public static synchronized DropdownSingleTermSearchPanel getDefault() {
|
||||
if (null == defaultInstance) {
|
||||
defaultInstance = new DropdownSingleKeywordSearchPanel();
|
||||
defaultInstance = new DropdownSingleTermSearchPanel();
|
||||
}
|
||||
return defaultInstance;
|
||||
}
|
||||
@ -65,7 +65,7 @@ public class DropdownSingleKeywordSearchPanel extends KeywordSearchPanel {
|
||||
* Constructs a dropdown panel that provides GUI components that allow a
|
||||
* user to do three types of ad hoc single keyword searches.
|
||||
*/
|
||||
public DropdownSingleKeywordSearchPanel() {
|
||||
public DropdownSingleTermSearchPanel() {
|
||||
initComponents();
|
||||
customizeComponents();
|
||||
}
|
||||
@ -167,20 +167,20 @@ public class DropdownSingleKeywordSearchPanel extends KeywordSearchPanel {
|
||||
substringRadioButton = new javax.swing.JRadioButton();
|
||||
regexRadioButton = new javax.swing.JRadioButton();
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(cutMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.cutMenuItem.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(cutMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.cutMenuItem.text")); // NOI18N
|
||||
rightClickMenu.add(cutMenuItem);
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(copyMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.copyMenuItem.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(copyMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.copyMenuItem.text")); // NOI18N
|
||||
rightClickMenu.add(copyMenuItem);
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(pasteMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.pasteMenuItem.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(pasteMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.pasteMenuItem.text")); // NOI18N
|
||||
rightClickMenu.add(pasteMenuItem);
|
||||
|
||||
org.openide.awt.Mnemonics.setLocalizedText(selectAllMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.selectAllMenuItem.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(selectAllMenuItem, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.selectAllMenuItem.text")); // NOI18N
|
||||
rightClickMenu.add(selectAllMenuItem);
|
||||
|
||||
keywordTextField.setFont(new java.awt.Font("Monospaced", 0, 14)); // NOI18N
|
||||
keywordTextField.setText(org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.keywordTextField.text")); // NOI18N
|
||||
keywordTextField.setText(org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.keywordTextField.text")); // NOI18N
|
||||
keywordTextField.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(192, 192, 192), 1, true));
|
||||
keywordTextField.setMinimumSize(new java.awt.Dimension(2, 25));
|
||||
keywordTextField.setPreferredSize(new java.awt.Dimension(2, 25));
|
||||
@ -196,7 +196,7 @@ public class DropdownSingleKeywordSearchPanel extends KeywordSearchPanel {
|
||||
});
|
||||
|
||||
searchButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/keywordsearch/search-icon.png"))); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(searchButton, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.searchButton.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(searchButton, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.searchButton.text")); // NOI18N
|
||||
searchButton.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
searchButtonActionPerformed(evt);
|
||||
@ -205,13 +205,13 @@ public class DropdownSingleKeywordSearchPanel extends KeywordSearchPanel {
|
||||
|
||||
queryTypeButtonGroup.add(exactRadioButton);
|
||||
exactRadioButton.setSelected(true);
|
||||
org.openide.awt.Mnemonics.setLocalizedText(exactRadioButton, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.exactRadioButton.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(exactRadioButton, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.exactRadioButton.text")); // NOI18N
|
||||
|
||||
queryTypeButtonGroup.add(substringRadioButton);
|
||||
org.openide.awt.Mnemonics.setLocalizedText(substringRadioButton, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.substringRadioButton.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(substringRadioButton, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.substringRadioButton.text")); // NOI18N
|
||||
|
||||
queryTypeButtonGroup.add(regexRadioButton);
|
||||
org.openide.awt.Mnemonics.setLocalizedText(regexRadioButton, org.openide.util.NbBundle.getMessage(DropdownSingleKeywordSearchPanel.class, "DropdownSearchPanel.regexRadioButton.text")); // NOI18N
|
||||
org.openide.awt.Mnemonics.setLocalizedText(regexRadioButton, org.openide.util.NbBundle.getMessage(DropdownSingleTermSearchPanel.class, "DropdownSearchPanel.regexRadioButton.text")); // NOI18N
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
@ -43,7 +43,7 @@ class DropdownToolbar extends javax.swing.JPanel {
|
||||
private static DropdownToolbar instance;
|
||||
private SearchSettingsChangeListener searchSettingsChangeListener;
|
||||
private boolean active = false;
|
||||
private DropdownSingleKeywordSearchPanel dropPanel = null;
|
||||
private DropdownSingleTermSearchPanel dropPanel = null;
|
||||
|
||||
/**
|
||||
* Gets the singleton panel that provides a toolbar button for the dropdown
|
||||
@ -103,7 +103,7 @@ class DropdownToolbar extends javax.swing.JPanel {
|
||||
}
|
||||
});
|
||||
|
||||
dropPanel = DropdownSingleKeywordSearchPanel.getDefault();
|
||||
dropPanel = DropdownSingleTermSearchPanel.getDefault();
|
||||
dropPanel.addSearchButtonActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
#Updated by build script
|
||||
#Sat, 22 Oct 2016 14:27:47 -0400
|
||||
#Mon, 02 Jan 2017 17:30:34 -0500
|
||||
LBL_splash_window_title=Starting Autopsy
|
||||
SPLASH_HEIGHT=314
|
||||
SPLASH_WIDTH=538
|
||||
|
@ -1,3 +1,4 @@
|
||||
#Updated by build script
|
||||
#Mon, 02 Jan 2017 17:30:34 -0500
|
||||
CTL_MainWindow_Title=Autopsy 4.2.0
|
||||
CTL_MainWindow_Title_No_Project=Autopsy 4.2.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user